pub struct RealmSynchronousProxy { /* private fields */ }

Implementations§

source§

impl RealmSynchronousProxy

source

pub fn new(channel: Channel) -> Self

source

pub fn into_channel(self) -> Channel

source

pub fn wait_for_event(&self, deadline: Time) -> Result<RealmEvent, Error>

Waits until an event arrives and returns it. It is safe for other threads to make concurrent requests while waiting for an event.

source

pub fn add_child( &self, name: &str, url: &str, options: &ChildOptions, ___deadline: Time ) -> Result<RealmAddChildResult, Error>

Adds a component to the realm.

The url can be in one of the following formats:

  • an absolute component URL (such as, “fuchsia-pkg://fuchsia.com/some-package#meta/some-component.cm”)
  • a relative path component URL to a subpackaged component (like, “some-subpackage#meta/subpackaged-component.cm”); or
  • a relative fragment-only URL (like, #meta/other-component.cm; see https://fuchsia.dev/fuchsia-src/reference/components/url#relative-fragment-only) indicating the path to a component manifest in the pkg_dir supplied to RealmBuilderFactory::Create*().

The realm builder client typically passes a handle to its own /pkg directory, and bundles the other-component into the same package.

Of the three URL types, only component declarations added via the fragment-only URL can be modified, via GetComponentDecl/ReplaceComponentDecl because realm builder actually performs its own component resolution from the component’s manifest and files bundled in the provided pkg_dir (typically from the package shared by the realm builder client component and the components added via fragment-only URL).

Errors:

  • CHILD_ALREADY_EXISTS: this realm already contains a child with the given name.
  • INVALID_MANIFEST_EXTENSION: url does not end with .cm
  • DECL_NOT_FOUND: The test package does not contain the component declaration referenced by a fragment-only component URL.
  • DECL_READ_ERROR: Encountered an I/O error when attempting to read a component declaration referenced by a fragment-only component URL from the test package.
  • BUILD_ALREADY_CALLED: The Builder.Build function has been called for this realm, and thus this Realm channel can no longer be used.
source

pub fn add_child_from_decl( &self, name: &str, decl: &Component, options: &ChildOptions, ___deadline: Time ) -> Result<RealmAddChildFromDeclResult, Error>

Adds a component to this realm whose declaration is set to decl. When launched, the component will share the test package as its package directory, and may access any resources from it.

Errors:

  • CHILD_ALREADY_EXISTS: this realm already contains a child with the given name.
  • INVALID_COMPONENT_DECL: decl failed validation.
  • BUILD_ALREADY_CALLED: The Builder.Build function has been called for this realm, and thus this Realm channel can no longer be used.
source

pub fn add_local_child( &self, name: &str, options: &ChildOptions, ___deadline: Time ) -> Result<RealmAddLocalChildResult, Error>

Adds a component to the realm whose implementation will be provided by the client. When this component should be started, the runner channel passed into Build will receive a start request for a component whose ProgramDecl contains the moniker from the root of the constructed realm for the child that is to be run under the program key LOCAL_COMPONENT_NAME.

Errors:

  • CHILD_ALREADY_EXISTS: this realm already contains a child with the given name.
  • BUILD_ALREADY_CALLED: The Builder.Build function has been called for this realm, and thus this Realm channel can no longer be used.
source

pub fn add_child_realm( &self, name: &str, options: &ChildOptions, child_realm: ServerEnd<RealmMarker>, ___deadline: Time ) -> Result<RealmAddChildRealmResult, Error>

Adds a child realm which can be built with the client end of child_realm.

Errors:

  • CHILD_ALREADY_EXISTS: this realm already contains a child with the given name.
  • BUILD_ALREADY_CALLED: The Builder.Build function has been called for this realm, and thus this Realm channel can no longer be used.
source

pub fn get_component_decl( &self, name: &str, ___deadline: Time ) -> Result<RealmGetComponentDeclResult, Error>

Returns the component decl for the given component. name must refer to a component that is one of the following:

  • A component with a local implementation
  • A legacy component
  • A component added with a fragment-only URL (typically, components bundled in the same package as the realm builder client, sharing the same /pkg directory, for example, #meta/other-component.cm; see https://fuchsia.dev/fuchsia-src/reference/components/url#relative-fragment-only)
  • An automatically generated realm (ex: the root)

Errors:

  • NO_SUCH_CHILD: This realm does not contain a child with the given name.
  • CHILD_DECL_NOT_VISIBLE: The component decl cannot be fetched for the referenced child, because the child was added to the realm using a modern (not legacy) absolute URL or subpackaged component’s relative path URL.
  • BUILD_ALREADY_CALLED: The Builder.Build function has been called for this realm, and thus this Realm channel can no longer be used.
source

pub fn replace_component_decl( &self, name: &str, component_decl: &Component, ___deadline: Time ) -> Result<RealmReplaceComponentDeclResult, Error>

Replaces the component decl for the given component. name must refer to a component that is one of the following:

  • A component with a local implementation
  • A legacy component
  • A component added with a fragment-only URL (typically, components bundled in the same package as the realm builder client, sharing the same /pkg directory, for example, #meta/other-component.cm; see https://fuchsia.dev/fuchsia-src/reference/components/url#relative-fragment-only)
  • An automatically generated realm (ex: the root)

Errors:

  • NO_SUCH_CHILD: This realm does not contain a child with the given name.
  • CHILD_ALREADY_EXISTS: The component whose decl is being replaced has had a child added to it through realm builder with the same name as an element in component_decl.children.
  • CHILD_DECL_NOT_VISIBLE: The component decl cannot be manipulated for the referenced child, because the child was added to the realm using an absolute (not relative) and modern (not legacy) URL.
  • INVALID_COMPONENT_DECL: component_decl failed validation.
  • BUILD_ALREADY_CALLED: The Builder.Build function has been called for this realm, and thus this Realm channel can no longer be used.
source

pub fn get_realm_decl( &self, ___deadline: Time ) -> Result<RealmGetRealmDeclResult, Error>

Returns the component decl for this realm.

Errors:

  • BUILD_ALREADY_CALLED: The Builder.Build function has been called for this realm, and thus this Realm channel can no longer be used.
source

pub fn replace_realm_decl( &self, component_decl: &Component, ___deadline: Time ) -> Result<RealmReplaceRealmDeclResult, Error>

Replaces the component decl for this realm.

Errors:

  • INVALID_COMPONENT_DECL: component_decl failed validation.
  • BUILD_ALREADY_CALLED: The Builder.Build function has been called for this realm, and thus this Realm channel can no longer be used.
source

pub fn add_route( &self, capabilities: &[Capability], from: &Ref, to: &[Ref], ___deadline: Time ) -> Result<RealmAddRouteResult, Error>

Mutates component manifests in the realm such that every component in to will have a valid capability route for each item in capabilities provided by from.

Errors:

  • NO_SUCH_SOURCE: from references a non-existent child.
  • NO_SUCH_TARGET: to references a non-existent child.
  • CAPABILITIES_EMPTY: capabilities is empty.
  • TARGETS_EMPTY: to is empty.
  • SOURCE_AND_TARGET_MATCH: from is equal to one of the elements in to.
  • INVALID_COMPONENT_DECL: The requested route caused one of the involved manifests to fail validation.
  • BUILD_ALREADY_CALLED: The Builder.Build function has been called for this realm, and thus this Realm channel can no longer be used.
source

pub fn read_only_directory( &self, name: &str, to: &[Ref], directory_contents: DirectoryContents, ___deadline: Time ) -> Result<RealmReadOnlyDirectoryResult, Error>

Offers a directory capability to a component in this realm. The directory will be read-only (i.e. have r* rights), and will have the contents described in directory_contents.

Errors:

  • NO_SUCH_TARGET: offer-to references a non-existent child.
  • BUILD_ALREADY_CALLED: The Builder.Build function has been called for this realm, and thus this Realm channel can no longer be used.
source

pub fn init_mutable_config_from_package( &self, name: &str, ___deadline: Time ) -> Result<RealmInitMutableConfigFromPackageResult, Error>

Load any packaged configuration for name before using values provided to the builder.

Allows calling SetConfigValue to override packaged configuration.

source

pub fn init_mutable_config_to_empty( &self, name: &str, ___deadline: Time ) -> Result<RealmInitMutableConfigToEmptyResult, Error>

Use only values provided to the builder for name’s configuration.

Allows calling SetConfigValue to provide configuration.

source

pub fn add_capability( &self, capability: &Capability, ___deadline: Time ) -> Result<RealmAddCapabilityResult, Error>

Add a capability to the realm.

source

pub fn set_config_value( &self, name: &str, key: &str, value: &ConfigValueSpec, ___deadline: Time ) -> Result<RealmSetConfigValueResult, Error>

Sets the configuration value for a field specified by key. The component specified must have a config schema with this field. The value must conform to all constraints as defined by the schema.

This method must be called after either InitMutableConfigFromPackage or InitMutableConfigToEmpty.

Errors:

  • NO_CONFIG_SCHEMA: component does not have a config schema
  • NO_SUCH_CONFIG_FIELD: key could not be found in component’s config schema
  • CONFIG_VALUE_INVALID: value does not meet config schema constraints

Trait Implementations§

source§

impl Debug for RealmSynchronousProxy

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl SynchronousProxy for RealmSynchronousProxy

§

type Proxy = RealmProxy

The async proxy for the same protocol.
§

type Protocol = RealmMarker

The protocol which this Proxy controls.
source§

fn from_channel(inner: Channel) -> Self

Create a proxy over the given channel.
source§

fn into_channel(self) -> Channel

Convert the proxy back into a channel.
source§

fn as_channel(&self) -> &Channel

Get a reference to the proxy’s underlying channel. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Encode<Ambiguous1> for T

§

unsafe fn encode( self, _encoder: &mut Encoder<'_>, _offset: usize, _depth: Depth ) -> Result<(), Error>

Encodes the object into the encoder’s buffers. Any handles stored in the object are swapped for Handle::INVALID. Read more
§

impl<T> Encode<Ambiguous2> for T

§

unsafe fn encode( self, _encoder: &mut Encoder<'_>, _offset: usize, _depth: Depth ) -> Result<(), Error>

Encodes the object into the encoder’s buffers. Any handles stored in the object are swapped for Handle::INVALID. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more