Struct uniffi_bindgen::interface::ComponentInterface [−][src]
The main public interface for this module, representing the complete details of an interface exposed by a rust component and the details of consuming it via an extern-C FFI layer.
Implementations
impl<'ci> ComponentInterface
[src]
pub fn from_webidl(idl: &str) -> Result<Self>
[src]
Parse a ComponentInterface
from a string containing a WebIDL definition.
pub fn namespace(&self) -> &str
[src]
The string namespace within which this API should be presented to the caller.
This string would typically be used to prefix function names in the FFI, to build a package or module name for the foreign language, etc.
pub fn iter_enum_definitions(&self) -> Vec<Enum>
[src]
List the definitions for every Enum type in the interface.
pub fn get_enum_definition(&self, name: &str) -> Option<&Enum>
[src]
Get an Enum definition by name, or None if no such Enum is defined.
pub fn iter_record_definitions(&self) -> Vec<Record>
[src]
List the definitions for every Record type in the interface.
pub fn get_record_definition(&self, name: &str) -> Option<&Record>
[src]
Get a Record definition by name, or None if no such Record is defined.
pub fn iter_function_definitions(&self) -> Vec<Function>
[src]
List the definitions for every Function in the interface.
pub fn get_function_definition(&self, name: &str) -> Option<&Function>
[src]
Get a Function definition by name, or None if no such Function is defined.
pub fn iter_object_definitions(&self) -> Vec<Object>
[src]
List the definitions for every Object type in the interface.
pub fn get_object_definition(&self, name: &str) -> Option<&Object>
[src]
Get an Object definition by name, or None if no such Object is defined.
pub fn iter_callback_interface_definitions(&self) -> Vec<CallbackInterface>
[src]
List the definitions for every Callback Interface type in the interface.
pub fn get_callback_interface_definition(
&self,
name: &str
) -> Option<&CallbackInterface>
[src]
&self,
name: &str
) -> Option<&CallbackInterface>
Get a Callback interface definition by name, or None if no such interface is defined.
pub fn iter_error_definitions(&self) -> Vec<Error>
[src]
List the definitions for every Error type in the interface.
pub fn get_error_definition(&self, name: &str) -> Option<&Error>
[src]
Get an Error definition by name, or None if no such Error is defined.
pub fn iter_types(&self) -> Vec<Type>
[src]
pub fn checksum(&self) -> u64
[src]
Calculate a numeric checksum for this ComponentInterface.
The checksum can be used to guard against accidentally using foreign-language bindings generated from one version of an interface with the compiled Rust code from a different version of that interface. It offers the following properties:
- Two ComponentIntefaces generated from the same WebIDL file, using the same version of uniffi and the same version of Rust, will always have the same checksum value.
- Two ComponentInterfaces will, with high probability, have different checksum values if: - They were generated from two different WebIDL files. - They were generated by two different versions of uniffi
The checksum may or may not change depending on the version of Rust used; since we expect consumers to be using the same executable to generate both the scaffolding and the bindings, assuming the same version of Rust seems acceptable.
Note that this is designed to prevent accidents, not attacks, so there is no need for the checksum to be cryptographically secure.
TODO: it’s not clear to me if the derivation of Hash
is actually deterministic enough to
ensure the guarantees above, or if it might be sensitive to e.g. compiler-driven re-ordering
of struct field. Let’s see how it goes…
pub fn ffi_namespace(&self) -> String
[src]
The namespace to use in FFI-level function definitions.
The value returned by this method is used as a prefix to namespace all FFI-level functions used in this ComponentInterface.
Since these names are an internal implementation detail that is not typically visible to consumers, we take the opportunity to add an additional safety guard by including a 4-hex-char checksum in each name. If foreign-language bindings attempt to load and use a version of the Rust code compiled from a different UDL definition than the one used for the bindings themselves, then there is a high probability of checksum mismatch and they will fail to link against the compiled Rust code. The result will be an ugly inscrutable link-time error, but that is a lot better than triggering potentially arbitrary memory unsafety!
pub fn ffi_rustbuffer_alloc(&self) -> FFIFunction
[src]
Builtin FFI function for allocating a new RustBuffer
.
This is needed so that the foreign language bindings can create buffers in which to pass
complex data types across the FFI.
pub fn ffi_rustbuffer_from_bytes(&self) -> FFIFunction
[src]
Builtin FFI function for copying foreign-owned bytes This is needed so that the foreign language bindings can create buffers in which to pass complex data types across the FFI.
pub fn ffi_rustbuffer_free(&self) -> FFIFunction
[src]
Builtin FFI function for freeing a RustBuffer
.
This is needed so that the foreign language bindings can free buffers in which they received
complex data types returned across the FFI.
pub fn ffi_rustbuffer_reserve(&self) -> FFIFunction
[src]
Builtin FFI function for reserving extra space in a RustBuffer
.
This is needed so that the foreign language bindings can grow buffers used for passing
complex data types across the FFI.
pub fn ffi_string_free(&self) -> FFIFunction
[src]
Builtin FFI function for freeing a string.
This is needed for foreign-language code when dealing with errors, so that it can free
the error message string.
TODO: make our error class return the message in a RustBuffer
so we can free it using
the exisiting bytebuffer-freeing function rather than a special one.
pub fn iter_ffi_function_definitions(&self) -> Vec<FFIFunction>
[src]
List the definitions of all FFI functions in the interface.
The set of FFI functions is derived automatically from the set of higher-level types along with the builtin FFI helper functions.
Trait Implementations
impl Debug for ComponentInterface
[src]
impl Default for ComponentInterface
[src]
fn default() -> ComponentInterface
[src]
impl From<&'_ ComponentInterface> for Config
[src]
fn from(_ci: &ComponentInterface) -> Self
[src]
impl From<&'_ ComponentInterface> for Config
[src]
fn from(ci: &ComponentInterface) -> Self
[src]
impl From<&'_ ComponentInterface> for Config
[src]
fn from(ci: &ComponentInterface) -> Self
[src]
impl From<&'_ ComponentInterface> for Config
[src]
fn from(ci: &ComponentInterface) -> Self
[src]
impl From<&'_ ComponentInterface> for Config
[src]
fn from(ci: &ComponentInterface) -> Self
[src]
impl FromStr for ComponentInterface
[src]
Convenience implementation for parsing a ComponentInterface
from a string.
type Err = Error
The associated error which can be returned from parsing.
fn from_str(s: &str) -> Result<Self>
[src]
impl Hash for ComponentInterface
[src]
ComponentInterface
structs can be hashed, but this is mostly a convenient way to
produce a checksum of their contents. They’re not really intended to live in a hashtable.
Auto Trait Implementations
impl RefUnwindSafe for ComponentInterface
impl Send for ComponentInterface
impl Sync for ComponentInterface
impl Unpin for ComponentInterface
impl UnwindSafe for ComponentInterface
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> Conv for T
impl<T> Conv for T
impl<T> FmtForward for T
pub fn fmt_binary(self) -> FmtBinary<Self> where
Self: Binary,
Self: Binary,
pub fn fmt_display(self) -> FmtDisplay<Self> where
Self: Display,
Self: Display,
pub fn fmt_lower_exp(self) -> FmtLowerExp<Self> where
Self: LowerExp,
Self: LowerExp,
pub fn fmt_lower_hex(self) -> FmtLowerHex<Self> where
Self: LowerHex,
Self: LowerHex,
pub fn fmt_octal(self) -> FmtOctal<Self> where
Self: Octal,
Self: Octal,
pub fn fmt_pointer(self) -> FmtPointer<Self> where
Self: Pointer,
Self: Pointer,
pub fn fmt_upper_exp(self) -> FmtUpperExp<Self> where
Self: UpperExp,
Self: UpperExp,
pub fn fmt_upper_hex(self) -> FmtUpperHex<Self> where
Self: UpperHex,
Self: UpperHex,
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> Pipe for T where
T: ?Sized,
T: ?Sized,
pub fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
pub fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R where
R: 'a,
R: 'a,
pub fn pipe_ref_mut<'a, R>(
&'a mut self,
func: impl FnOnce(&'a mut Self) -> R
) -> R where
R: 'a,
&'a mut self,
func: impl FnOnce(&'a mut Self) -> R
) -> R where
R: 'a,
pub fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R where
Self: Borrow<B>,
B: 'a + ?Sized,
R: 'a,
Self: Borrow<B>,
B: 'a + ?Sized,
R: 'a,
pub fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R
) -> R where
Self: BorrowMut<B>,
B: 'a + ?Sized,
R: 'a,
&'a mut self,
func: impl FnOnce(&'a mut B) -> R
) -> R where
Self: BorrowMut<B>,
B: 'a + ?Sized,
R: 'a,
pub fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R where
Self: AsRef<U>,
U: 'a + ?Sized,
R: 'a,
Self: AsRef<U>,
U: 'a + ?Sized,
R: 'a,
pub fn pipe_as_mut<'a, U, R>(
&'a mut self,
func: impl FnOnce(&'a mut U) -> R
) -> R where
Self: AsMut<U>,
U: 'a + ?Sized,
R: 'a,
&'a mut self,
func: impl FnOnce(&'a mut U) -> R
) -> R where
Self: AsMut<U>,
U: 'a + ?Sized,
R: 'a,
pub fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R where
Self: Deref<Target = T>,
T: 'a + ?Sized,
R: 'a,
Self: Deref<Target = T>,
T: 'a + ?Sized,
R: 'a,
pub fn pipe_deref_mut<'a, T, R>(
&'a mut self,
func: impl FnOnce(&'a mut T) -> R
) -> R where
Self: DerefMut<Target = T> + Deref,
T: 'a + ?Sized,
R: 'a,
&'a mut self,
func: impl FnOnce(&'a mut T) -> R
) -> R where
Self: DerefMut<Target = T> + Deref,
T: 'a + ?Sized,
R: 'a,
impl<T> Pipe for T
impl<T> PipeAsRef for T
pub fn pipe_as_ref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R where
Self: AsRef<T>,
T: 'a,
R: 'a,
Self: AsRef<T>,
T: 'a,
R: 'a,
pub fn pipe_as_mut<'a, T, R>(
&'a mut self,
func: impl FnOnce(&'a mut T) -> R
) -> R where
Self: AsMut<T>,
T: 'a,
R: 'a,
&'a mut self,
func: impl FnOnce(&'a mut T) -> R
) -> R where
Self: AsMut<T>,
T: 'a,
R: 'a,
impl<T> PipeBorrow for T
pub fn pipe_borrow<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R where
Self: Borrow<T>,
T: 'a,
R: 'a,
Self: Borrow<T>,
T: 'a,
R: 'a,
pub fn pipe_borrow_mut<'a, T, R>(
&'a mut self,
func: impl FnOnce(&'a mut T) -> R
) -> R where
Self: BorrowMut<T>,
T: 'a,
R: 'a,
&'a mut self,
func: impl FnOnce(&'a mut T) -> R
) -> R where
Self: BorrowMut<T>,
T: 'a,
R: 'a,
impl<T> PipeDeref for T
pub fn pipe_deref<'a, R>(
&'a self,
func: impl FnOnce(&'a Self::Target) -> R
) -> R where
Self: Deref,
R: 'a,
&'a self,
func: impl FnOnce(&'a Self::Target) -> R
) -> R where
Self: Deref,
R: 'a,
pub fn pipe_deref_mut<'a, R>(
&'a mut self,
func: impl FnOnce(&'a mut Self::Target) -> R
) -> R where
Self: DerefMut,
R: 'a,
&'a mut self,
func: impl FnOnce(&'a mut Self::Target) -> R
) -> R where
Self: DerefMut,
R: 'a,
impl<T> PipeRef for T
pub fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R where
R: 'a,
R: 'a,
pub fn pipe_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R where
R: 'a,
R: 'a,
impl<T> Tap for T
pub fn tap(self, func: impl FnOnce(&Self)) -> Self
pub fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self
pub fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self where
Self: Borrow<B>,
B: ?Sized,
Self: Borrow<B>,
B: ?Sized,
pub fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self where
Self: BorrowMut<B>,
B: ?Sized,
Self: BorrowMut<B>,
B: ?Sized,
pub fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self where
Self: AsRef<R>,
R: ?Sized,
Self: AsRef<R>,
R: ?Sized,
pub fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self where
Self: AsMut<R>,
R: ?Sized,
Self: AsMut<R>,
R: ?Sized,
pub fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self where
Self: Deref<Target = T>,
T: ?Sized,
Self: Deref<Target = T>,
T: ?Sized,
pub fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self where
Self: DerefMut<Target = T> + Deref,
T: ?Sized,
Self: DerefMut<Target = T> + Deref,
T: ?Sized,
pub fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
pub fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
pub fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self where
Self: Borrow<B>,
B: ?Sized,
Self: Borrow<B>,
B: ?Sized,
pub fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self where
Self: BorrowMut<B>,
B: ?Sized,
Self: BorrowMut<B>,
B: ?Sized,
pub fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self where
Self: AsRef<R>,
R: ?Sized,
Self: AsRef<R>,
R: ?Sized,
pub fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self where
Self: AsMut<R>,
R: ?Sized,
Self: AsMut<R>,
R: ?Sized,
pub fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self where
Self: Deref<Target = T>,
T: ?Sized,
Self: Deref<Target = T>,
T: ?Sized,
pub fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self where
Self: DerefMut<Target = T> + Deref,
T: ?Sized,
Self: DerefMut<Target = T> + Deref,
T: ?Sized,
impl<T> Tap for T
pub fn tap<F, R>(self, func: F) -> Self where
F: FnOnce(&Self) -> R,
F: FnOnce(&Self) -> R,
pub fn tap_dbg<F, R>(self, func: F) -> Self where
F: FnOnce(&Self) -> R,
F: FnOnce(&Self) -> R,
pub fn tap_mut<F, R>(self, func: F) -> Self where
F: FnOnce(&mut Self) -> R,
F: FnOnce(&mut Self) -> R,
pub fn tap_mut_dbg<F, R>(self, func: F) -> Self where
F: FnOnce(&mut Self) -> R,
F: FnOnce(&mut Self) -> R,
impl<T, U> TapAsRef<U> for T where
U: ?Sized,
U: ?Sized,
pub fn tap_ref<F, R>(self, func: F) -> Self where
Self: AsRef<T>,
F: FnOnce(&T) -> R,
Self: AsRef<T>,
F: FnOnce(&T) -> R,
pub fn tap_ref_dbg<F, R>(self, func: F) -> Self where
Self: AsRef<T>,
F: FnOnce(&T) -> R,
Self: AsRef<T>,
F: FnOnce(&T) -> R,
pub fn tap_ref_mut<F, R>(self, func: F) -> Self where
Self: AsMut<T>,
F: FnOnce(&mut T) -> R,
Self: AsMut<T>,
F: FnOnce(&mut T) -> R,
pub fn tap_ref_mut_dbg<F, R>(self, func: F) -> Self where
Self: AsMut<T>,
F: FnOnce(&mut T) -> R,
Self: AsMut<T>,
F: FnOnce(&mut T) -> R,
impl<T, U> TapBorrow<U> for T where
U: ?Sized,
U: ?Sized,
pub fn tap_borrow<F, R>(self, func: F) -> Self where
Self: Borrow<T>,
F: FnOnce(&T) -> R,
Self: Borrow<T>,
F: FnOnce(&T) -> R,
pub fn tap_borrow_dbg<F, R>(self, func: F) -> Self where
Self: Borrow<T>,
F: FnOnce(&T) -> R,
Self: Borrow<T>,
F: FnOnce(&T) -> R,
pub fn tap_borrow_mut<F, R>(self, func: F) -> Self where
Self: BorrowMut<T>,
F: FnOnce(&mut T) -> R,
Self: BorrowMut<T>,
F: FnOnce(&mut T) -> R,
pub fn tap_borrow_mut_dbg<F, R>(self, func: F) -> Self where
Self: BorrowMut<T>,
F: FnOnce(&mut T) -> R,
Self: BorrowMut<T>,
F: FnOnce(&mut T) -> R,
impl<T> TapDeref for T
pub fn tap_deref<F, R>(self, func: F) -> Self where
Self: Deref,
F: FnOnce(&Self::Target) -> R,
Self: Deref,
F: FnOnce(&Self::Target) -> R,
pub fn tap_deref_dbg<F, R>(self, func: F) -> Self where
Self: Deref,
F: FnOnce(&Self::Target) -> R,
Self: Deref,
F: FnOnce(&Self::Target) -> R,
pub fn tap_deref_mut<F, R>(self, func: F) -> Self where
Self: DerefMut,
F: FnOnce(&mut Self::Target) -> R,
Self: DerefMut,
F: FnOnce(&mut Self::Target) -> R,
pub fn tap_deref_mut_dbg<F, R>(self, func: F) -> Self where
Self: DerefMut,
F: FnOnce(&mut Self::Target) -> R,
Self: DerefMut,
F: FnOnce(&mut Self::Target) -> R,
impl<T> TryConv for T
impl<T> TryConv for T
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,