zbus/fdo/
introspectable.rs1use super::{Error, Result};
7use crate::{interface, message::Header, ObjectServer};
8
9pub(crate) struct Introspectable;
13
14#[interface(
15 name = "org.freedesktop.DBus.Introspectable",
16 introspection_docs = false,
17 proxy(default_path = "/", visibility = "pub")
18)]
19impl Introspectable {
20 async fn introspect(
23 &self,
24 #[zbus(object_server)] server: &ObjectServer,
25 #[zbus(header)] header: Header<'_>,
26 ) -> Result<String> {
27 let path = header.path().ok_or(crate::Error::MissingField)?;
28 let root = server.root().read().await;
29 let node = root
30 .get_child(path)
31 .ok_or_else(|| Error::UnknownObject(format!("Unknown object '{path}'")))?;
32
33 Ok(node.introspect().await)
34 }
35}