pub trait Interface:
Any
+ Send
+ Sync {
// Required methods
fn name() -> InterfaceName<'static>
where Self: Sized;
fn get<'life0, 'life1, 'async_trait>(
&'life0 self,
property_name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Option<Result<OwnedValue>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn get_all<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<HashMap<String, OwnedValue>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn set_mut<'life0, 'life1, 'life2, 'life3, 'life4, 'life5, 'async_trait>(
&'life0 mut self,
property_name: &'life1 str,
value: &'life2 Value<'life3>,
ctxt: &'life4 SignalContext<'life5>,
) -> Pin<Box<dyn Future<Output = Option<Result<()>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait,
'life5: 'async_trait;
fn call<'call>(
&'call self,
server: &'call ObjectServer,
connection: &'call Connection,
msg: &'call Message,
name: MemberName<'call>,
) -> DispatchResult<'call>;
fn call_mut<'call>(
&'call mut self,
server: &'call ObjectServer,
connection: &'call Connection,
msg: &'call Message,
name: MemberName<'call>,
) -> DispatchResult<'call>;
fn introspect_to_writer(&self, writer: &mut dyn Write, level: usize);
// Provided methods
fn spawn_tasks_for_methods(&self) -> bool { ... }
fn set<'call>(
&'call self,
property_name: &'call str,
value: &'call Value<'_>,
ctxt: &'call SignalContext<'_>,
) -> DispatchResult<'call> { ... }
}
Expand description
The trait is used to dispatch messages to an interface instance.
This trait should be treated as unstable API and compatibility may break in minor
version bumps. Because of this and other reasons, it is not recommended to manually implement
this trait. The crate::dbus_interface
macro implements it for you.
If you have an advanced use case where dbus_interface
is inadequate, consider using
crate::MessageStream
or crate::blocking::MessageIterator
instead.
Required Methods§
Sourcefn name() -> InterfaceName<'static>where
Self: Sized,
fn name() -> InterfaceName<'static>where
Self: Sized,
Return the name of the interface. Ex: “org.foo.MyInterface”
Sourcefn get<'life0, 'life1, 'async_trait>(
&'life0 self,
property_name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Option<Result<OwnedValue>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get<'life0, 'life1, 'async_trait>(
&'life0 self,
property_name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Option<Result<OwnedValue>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Get a property value. Returns None
if the property doesn’t exist.
Sourcefn get_all<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<HashMap<String, OwnedValue>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_all<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<HashMap<String, OwnedValue>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Return all the properties.
Sourcefn set_mut<'life0, 'life1, 'life2, 'life3, 'life4, 'life5, 'async_trait>(
&'life0 mut self,
property_name: &'life1 str,
value: &'life2 Value<'life3>,
ctxt: &'life4 SignalContext<'life5>,
) -> Pin<Box<dyn Future<Output = Option<Result<()>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait,
'life5: 'async_trait,
fn set_mut<'life0, 'life1, 'life2, 'life3, 'life4, 'life5, 'async_trait>(
&'life0 mut self,
property_name: &'life1 str,
value: &'life2 Value<'life3>,
ctxt: &'life4 SignalContext<'life5>,
) -> Pin<Box<dyn Future<Output = Option<Result<()>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait,
'life5: 'async_trait,
Set a property value.
Returns None
if the property doesn’t exist.
This will only be invoked if set
returned RequiresMut
.
Sourcefn call<'call>(
&'call self,
server: &'call ObjectServer,
connection: &'call Connection,
msg: &'call Message,
name: MemberName<'call>,
) -> DispatchResult<'call>
fn call<'call>( &'call self, server: &'call ObjectServer, connection: &'call Connection, msg: &'call Message, name: MemberName<'call>, ) -> DispatchResult<'call>
Call a method.
Return DispatchResult::NotFound
if the method doesn’t exist, or
DispatchResult::RequiresMut
if call_mut
should be used instead.
It is valid, though inefficient, for this to always return RequiresMut
.
Sourcefn call_mut<'call>(
&'call mut self,
server: &'call ObjectServer,
connection: &'call Connection,
msg: &'call Message,
name: MemberName<'call>,
) -> DispatchResult<'call>
fn call_mut<'call>( &'call mut self, server: &'call ObjectServer, connection: &'call Connection, msg: &'call Message, name: MemberName<'call>, ) -> DispatchResult<'call>
Call a &mut self
method.
This will only be invoked if call
returned RequiresMut
.
Sourcefn introspect_to_writer(&self, writer: &mut dyn Write, level: usize)
fn introspect_to_writer(&self, writer: &mut dyn Write, level: usize)
Write introspection XML to the writer, with the given indentation level.
Provided Methods§
Sourcefn spawn_tasks_for_methods(&self) -> bool
fn spawn_tasks_for_methods(&self) -> bool
Whether each method call will be handled from a different spawned task.
Note: When methods are called from separate tasks, they may not be run in the order in which they were called.
Sourcefn set<'call>(
&'call self,
property_name: &'call str,
value: &'call Value<'_>,
ctxt: &'call SignalContext<'_>,
) -> DispatchResult<'call>
fn set<'call>( &'call self, property_name: &'call str, value: &'call Value<'_>, ctxt: &'call SignalContext<'_>, ) -> DispatchResult<'call>
Set a property value.
Return DispatchResult::NotFound
if the property doesn’t exist, or
DispatchResult::RequiresMut
if set_mut
should be used instead. The default
implementation just returns RequiresMut
.