pub struct InterfaceRef<I> {
pub(crate) emitter: SignalEmitter<'static>,
pub(crate) lock: Arc<RwLock<dyn Interface>>,
pub(crate) phantom: PhantomData<I>,
}
Expand description
Wrapper over an interface, along with its corresponding SignalEmitter
instance. A reference to the underlying interface may be obtained via
InterfaceRef::get
and InterfaceRef::get_mut
.
Fields§
§emitter: SignalEmitter<'static>
§lock: Arc<RwLock<dyn Interface>>
§phantom: PhantomData<I>
Implementations§
Source§impl<I> InterfaceRef<I>where
I: 'static,
impl<I> InterfaceRef<I>where
I: 'static,
Sourcepub async fn get(&self) -> InterfaceDeref<'_, I>
pub async fn get(&self) -> InterfaceDeref<'_, I>
Get a reference to the underlying interface.
WARNING: If methods (e.g property setters) in ObjectServer
require &mut self
ObjectServer
will not be able to access the interface in question until all references
of this method are dropped; it is highly recommended that the scope of the interface
returned is restricted.
Sourcepub async fn get_mut(&self) -> InterfaceDerefMut<'_, I>
pub async fn get_mut(&self) -> InterfaceDerefMut<'_, I>
Get a reference to the underlying interface.
WARNINGS: Since the ObjectServer
will not be able to access the interface in question
until the return value of this method is dropped, it is highly recommended that the scope
of the interface returned is restricted.
§Errors
If the interface at this instance’s path is not valid, an Error::InterfaceNotFound
error
is returned.
§Examples
struct MyIface(u32);
#[interface(name = "org.myiface.MyIface")]
impl MyIface {
#[zbus(property)]
async fn count(&self) -> u32 {
self.0
}
}
// Set up connection and object_server etc here and then in another part of the code:
let object_server = connection.object_server();
let iface_ref = object_server.interface::<_, MyIface>(path).await?;
let mut iface = iface_ref.get_mut().await;
iface.0 = 42;
iface.count_changed(iface_ref.signal_emitter()).await?;
pub fn signal_emitter(&self) -> &SignalEmitter<'static>
pub fn signal_context(&self) -> &SignalEmitter<'static>
signal_emitter
instead.Trait Implementations§
Source§impl<I> Clone for InterfaceRef<I>
impl<I> Clone for InterfaceRef<I>
Source§impl ObjectManagerSignals for InterfaceRef<ObjectManager>
impl ObjectManagerSignals for InterfaceRef<ObjectManager>
Source§fn interfaces_added<'life0, 'life1, 'life2, 'life3, 'life4, 'async_trait>(
&'life0 self,
object_path: ObjectPath<'life1>,
interfaces_and_properties: HashMap<InterfaceName<'life2>, HashMap<&'life3 str, Value<'life4>>>,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait,
fn interfaces_added<'life0, 'life1, 'life2, 'life3, 'life4, 'async_trait>(
&'life0 self,
object_path: ObjectPath<'life1>,
interfaces_and_properties: HashMap<InterfaceName<'life2>, HashMap<&'life3 str, Value<'life4>>>,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait,
This signal is emitted when either a new object is added or when an existing object gains
one or more interfaces. The interfaces_and_properties
argument contains a map with the
interfaces and properties (if any) that have been added to the given object path.
Source§fn interfaces_removed<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
object_path: ObjectPath<'life1>,
interfaces: Cow<'life2, [InterfaceName<'life3>]>,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn interfaces_removed<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
object_path: ObjectPath<'life1>,
interfaces: Cow<'life2, [InterfaceName<'life3>]>,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
This signal is emitted whenever an object is removed or it loses one or more interfaces.
The interfaces
parameters contains a list of the interfaces that were removed.
Source§impl PropertiesSignals for InterfaceRef<Properties>
impl PropertiesSignals for InterfaceRef<Properties>
Source§fn properties_changed<'life0, 'life1, 'life2, 'life3, 'life4, 'life5, 'async_trait>(
&'life0 self,
interface_name: InterfaceName<'life1>,
changed_properties: HashMap<&'life2 str, Value<'life3>>,
invalidated_properties: Cow<'life4, [&'life5 str]>,
) -> Pin<Box<dyn Future<Output = 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 properties_changed<'life0, 'life1, 'life2, 'life3, 'life4, 'life5, 'async_trait>(
&'life0 self,
interface_name: InterfaceName<'life1>,
changed_properties: HashMap<&'life2 str, Value<'life3>>,
invalidated_properties: Cow<'life4, [&'life5 str]>,
) -> Pin<Box<dyn Future<Output = 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,
Emit the org.freedesktop.DBus.Properties.PropertiesChanged
signal.