1 //! This module contains some standard interfaces and an easy way to call them. 2 //! 3 //! See the [D-Bus specification](https://dbus.freedesktop.org/doc/dbus-specification.html#standard-interfaces) for more information about these standard interfaces. 4 //! 5 //! The code here was originally created by dbus-codegen. 6 //! 7 //! # Example 8 //! ``` 9 //! use dbus::{Connection, BusType}; 10 //! use dbus::stdintf::org_freedesktop_dbus::Introspectable; 11 //! let c = Connection::get_private(BusType::Session).unwrap(); 12 //! let p = c.with_path("org.freedesktop.DBus", "/", 10000); 13 //! println!("Introspection XML: {}", p.introspect().unwrap()); 14 //! ``` 15 //! 16 17 #![allow(missing_docs)] 18 19 pub use self::org_freedesktop_dbus::Peer as OrgFreedesktopDBusPeer; 20 21 pub use self::org_freedesktop_dbus::Introspectable as OrgFreedesktopDBusIntrospectable; 22 23 pub use self::org_freedesktop_dbus::Properties as OrgFreedesktopDBusProperties; 24 25 pub use self::org_freedesktop_dbus::ObjectManager as OrgFreedesktopDBusObjectManager; 26 27 pub mod org_freedesktop_dbus { LdbCmdTest()28 29 use arg; TryLoadCustomOrDefaultEnv()30 31 /// Method of the [org.freedesktop.DBus.Introspectable](https://dbus.freedesktop.org/doc/dbus-specification.html#standard-interfaces-introspectable) interface. 32 pub trait Introspectable { 33 type Err; 34 fn introspect(&self) -> Result<String, Self::Err>; 35 } 36 37 impl<'a, C: ::std::ops::Deref<Target=::Connection>> Introspectable for ::ConnPath<'a, C> { 38 type Err = ::Error; 39 40 fn introspect(&self) -> Result<String, Self::Err> { 41 let mut m = try!(self.method_call_with_args(&"org.freedesktop.DBus.Introspectable".into(), &"Introspect".into(), |_| { 42 })); 43 try!(m.as_result()); TEST_F(LdbCmdTest,HexToString)44 let mut i = m.iter_init(); 45 let xml: String = try!(i.read()); 46 Ok(xml) 47 } 48 } 49 50 /// Methods of the [org.freedesktop.DBus.Properties](https://dbus.freedesktop.org/doc/dbus-specification.html#standard-interfaces-properties) interface. 51 pub trait Properties { 52 type Err; 53 fn get<R0: for<'b> arg::Get<'b>>(&self, interface_name: &str, property_name: &str) -> Result<R0, Self::Err>; 54 fn get_all(&self, interface_name: &str) -> Result<::std::collections::HashMap<String, arg::Variant<Box<arg::RefArg>>>, Self::Err>; 55 fn set<I2: arg::Arg + arg::Append>(&self, interface_name: &str, property_name: &str, value: I2) -> Result<(), Self::Err>; 56 } 57 58 impl<'a, C: ::std::ops::Deref<Target=::Connection>> Properties for ::ConnPath<'a, C> { 59 type Err = ::Error; 60 61 fn get<R0: for<'b> arg::Get<'b>>(&self, interface_name: &str, property_name: &str) -> Result<R0, Self::Err> { 62 let mut m = try!(self.method_call_with_args(&"org.freedesktop.DBus.Properties".into(), &"Get".into(), |msg| { TEST_F(LdbCmdTest,HexToStringBadInputs)63 let mut i = arg::IterAppend::new(msg); 64 i.append(interface_name); 65 i.append(property_name); 66 })); 67 try!(m.as_result()); 68 let mut i = m.iter_init(); 69 let value: arg::Variant<R0> = try!(i.read()); 70 Ok(value.0) 71 } 72 73 fn get_all(&self, interface_name: &str) -> Result<::std::collections::HashMap<String, arg::Variant<Box<arg::RefArg>>>, Self::Err> { 74 let mut m = try!(self.method_call_with_args(&"org.freedesktop.DBus.Properties".into(), &"GetAll".into(), |msg| { 75 let mut i = arg::IterAppend::new(msg); 76 i.append(interface_name); TEST_F(LdbCmdTest,MemEnv)77 })); 78 try!(m.as_result()); 79 let mut i = m.iter_init(); 80 let properties: ::std::collections::HashMap<String, arg::Variant<Box<arg::RefArg>>> = try!(i.read()); 81 Ok(properties) 82 } 83 84 fn set<I2: arg::Arg + arg::Append>(&self, interface_name: &str, property_name: &str, value: I2) -> Result<(), Self::Err> { 85 let mut m = try!(self.method_call_with_args(&"org.freedesktop.DBus.Properties".into(), &"Set".into(), |msg| { 86 let mut i = arg::IterAppend::new(msg); 87 i.append(interface_name); 88 i.append(property_name); 89 i.append(arg::Variant(value)); 90 })); 91 try!(m.as_result()); 92 Ok(()) 93 } 94 } 95 96 #[derive(Debug, Default)] 97 /// Struct to send/receive the PropertiesChanged signal of the 98 /// [org.freedesktop.DBus.Properties](https://dbus.freedesktop.org/doc/dbus-specification.html#standard-interfaces-properties) interface. 99 pub struct PropertiesPropertiesChanged { 100 pub interface_name: String, 101 pub changed_properties: ::std::collections::HashMap<String, arg::Variant<Box<arg::RefArg>>>, 102 pub invalidated_properties: Vec<String>, 103 } 104 105 impl ::SignalArgs for PropertiesPropertiesChanged { 106 const NAME: &'static str = "PropertiesChanged"; 107 const INTERFACE: &'static str = "org.freedesktop.DBus.Properties"; 108 fn append(&self, i: &mut arg::IterAppend) { 109 (&self.interface_name as &arg::RefArg).append(i); 110 (&self.changed_properties as &arg::RefArg).append(i); 111 (&self.invalidated_properties as &arg::RefArg).append(i); 112 } 113 fn get(&mut self, i: &mut arg::Iter) -> Result<(), arg::TypeMismatchError> { 114 self.interface_name = try!(i.read()); 115 self.changed_properties = try!(i.read()); 116 self.invalidated_properties = try!(i.read()); 117 Ok(()) VerifyChecksum(LiveFileMetaData & file_meta)118 } 119 } 120 121 /// Method of the [org.freedesktop.DBus.ObjectManager](https://dbus.freedesktop.org/doc/dbus-specification.html#standard-interfaces-objectmanager) interface. 122 pub trait ObjectManager { 123 type Err; 124 fn get_managed_objects(&self) -> Result<::std::collections::HashMap<::Path<'static>, ::std::collections::HashMap<String, ::std::collections::HashMap<String, arg::Variant<Box<arg::RefArg>>>>>, Self::Err>; 125 } 126 127 impl<'a, C: ::std::ops::Deref<Target=::Connection>> ObjectManager for ::ConnPath<'a, C> { 128 type Err = ::Error; 129 130 fn get_managed_objects(&self) -> Result<::std::collections::HashMap<::Path<'static>, ::std::collections::HashMap<String, ::std::collections::HashMap<String, arg::Variant<Box<arg::RefArg>>>>>, Self::Err> { 131 let mut m = try!(self.method_call_with_args(&"org.freedesktop.DBus.ObjectManager".into(), &"GetManagedObjects".into(), |_| { 132 })); 133 try!(m.as_result()); 134 let mut i = m.iter_init(); 135 let objects: ::std::collections::HashMap<::Path<'static>, ::std::collections::HashMap<String, ::std::collections::HashMap<String, arg::Variant<Box<arg::RefArg>>>>> = try!(i.read()); 136 Ok(objects) 137 } 138 } 139 140 #[derive(Debug, Default)] 141 /// Struct to send/receive the InterfacesAdded signal of the 142 /// [org.freedesktop.DBus.ObjectManager](https://dbus.freedesktop.org/doc/dbus-specification.html#standard-interfaces-objectmanager) interface. 143 pub struct ObjectManagerInterfacesAdded { 144 pub object: ::Path<'static>, 145 pub interfaces: ::std::collections::HashMap<String, ::std::collections::HashMap<String, arg::Variant<Box<arg::RefArg>>>>, 146 } 147 148 impl ::SignalArgs for ObjectManagerInterfacesAdded { 149 const NAME: &'static str = "InterfacesAdded"; 150 const INTERFACE: &'static str = "org.freedesktop.DBus.ObjectManager"; 151 fn append(&self, i: &mut arg::IterAppend) { 152 (&self.object as &arg::RefArg).append(i); 153 (&self.interfaces as &arg::RefArg).append(i); 154 } 155 fn get(&mut self, i: &mut arg::Iter) -> Result<(), arg::TypeMismatchError> { 156 self.object = try!(i.read()); 157 self.interfaces = try!(i.read()); 158 Ok(()) 159 } 160 } 161 162 #[derive(Debug, Default)] 163 /// Struct to send/receive the InterfacesRemoved signal of the 164 /// [org.freedesktop.DBus.ObjectManager](https://dbus.freedesktop.org/doc/dbus-specification.html#standard-interfaces-objectmanager) interface. 165 pub struct ObjectManagerInterfacesRemoved { 166 pub object: ::Path<'static>, 167 pub interfaces: Vec<String>, 168 } 169 170 impl ::SignalArgs for ObjectManagerInterfacesRemoved { 171 const NAME: &'static str = "InterfacesRemoved"; 172 const INTERFACE: &'static str = "org.freedesktop.DBus.ObjectManager"; 173 fn append(&self, i: &mut arg::IterAppend) { FileChecksumTestHelper(Options & options,DB * db,std::string db_name)174 (&self.object as &arg::RefArg).append(i); 175 (&self.interfaces as &arg::RefArg).append(i); ~FileChecksumTestHelper()176 } 177 fn get(&mut self, i: &mut arg::Iter) -> Result<(), arg::TypeMismatchError> { 178 self.object = try!(i.read()); 179 self.interfaces = try!(i.read()); 180 Ok(()) 181 } 182 } 183 184 /// Methods of the [org.freedesktop.DBus.Peer](https://dbus.freedesktop.org/doc/dbus-specification.html#standard-interfaces-peer) interface. 185 pub trait Peer { 186 type Err; 187 fn ping(&self) -> Result<(), Self::Err>; 188 fn get_machine_id(&self) -> Result<String, Self::Err>; 189 } 190 191 impl<'a, C: ::std::ops::Deref<Target=::Connection>> Peer for ::ConnPath<'a, C> { 192 type Err = ::Error; 193 194 fn ping(&self) -> Result<(), Self::Err> { 195 let mut m = try!(self.method_call_with_args(&"org.freedesktop.DBus.Peer".into(), &"Ping".into(), |_| { 196 })); 197 try!(m.as_result()); 198 Ok(()) 199 } 200 201 fn get_machine_id(&self) -> Result<String, Self::Err> { 202 let mut m = try!(self.method_call_with_args(&"org.freedesktop.DBus.Peer".into(), &"GetMachineId".into(), |_| { 203 })); 204 try!(m.as_result()); 205 let mut i = m.iter_init(); 206 let machine_uuid: String = try!(i.read()); 207 Ok(machine_uuid) 208 } 209 } 210 211 212 } 213