/rust/registry/src/index.crates.io-6f17d22bba15001f/dbus-0.9.7/src/arg/msgarg.rs
Line | Count | Source (jump to first uncovered line) |
1 | | #![allow(dead_code)] |
2 | | |
3 | | use crate::{Signature, arg::TypeMismatchError, arg::Variant}; |
4 | | use std::{fmt, any}; |
5 | | use std::sync::Arc; |
6 | | // use std::rc::Rc; |
7 | | use std::collections::HashMap; |
8 | | |
9 | | use super::{Iter, IterAppend, ArgType}; |
10 | | |
11 | | /// Types that can represent a D-Bus message argument implement this trait. |
12 | | /// |
13 | | /// Types should also implement either Append or Get to be useful. |
14 | | pub trait Arg { |
15 | | /// The corresponding D-Bus argument type code. |
16 | | const ARG_TYPE: ArgType; |
17 | | /// The corresponding D-Bus type signature for this type. |
18 | | fn signature() -> Signature<'static>; |
19 | | } |
20 | | |
21 | | /// Helper trait to introspect many arguments. |
22 | | pub trait ArgAll { |
23 | | /// A tuple of &static str. Used for introspection. |
24 | | #[allow(non_camel_case_types)] // Note: This should be changed for 0.9 - but for now, don't break backwards compatibility |
25 | | type strs; |
26 | | /// Enumerates all arguments with their signatures (introspection helper method). |
27 | | fn strs_sig<F: FnMut(&'static str, Signature<'static>)>(a: Self::strs, f: F); |
28 | | } |
29 | | |
30 | | /// Types that can be appended to a message as arguments implement this trait. |
31 | | pub trait Append { |
32 | | /// Performs the append operation by consuming self. |
33 | 0 | fn append(self, ia: &mut IterAppend) where Self: Sized { self.append_by_ref(ia) } Unexecuted instantiation: <&str as dbus::arg::msgarg::Append>::append Unexecuted instantiation: <&&str as dbus::arg::msgarg::Append>::append |
34 | | |
35 | | /// Performs the append operation by borrowing self. |
36 | | fn append_by_ref(&self, _: &mut IterAppend); |
37 | | } |
38 | | |
39 | | /// Helper trait to append many arguments to a message. |
40 | | pub trait AppendAll { |
41 | | /// Performs the append operation by borrowing self. |
42 | | fn append(&self, _: &mut IterAppend); |
43 | | } |
44 | | |
45 | | /// Types that can be retrieved from a message as arguments implement this trait. |
46 | | pub trait Get<'a>: Sized { |
47 | | /// Performs the get operation. |
48 | | fn get(i: &mut Iter<'a>) -> Option<Self>; |
49 | | } |
50 | | |
51 | | /// Helper trait to read all arguments from a message. |
52 | | pub trait ReadAll: Sized { |
53 | | /// Performs the read operation. |
54 | | fn read(i: &mut Iter) -> Result<Self, TypeMismatchError>; |
55 | | } |
56 | | |
57 | | |
58 | | /// Object safe version of Arg + Append + Get. |
59 | | pub trait RefArg: fmt::Debug + Send + Sync { |
60 | | /// The corresponding D-Bus argument type code. |
61 | | fn arg_type(&self) -> ArgType; |
62 | | /// The corresponding D-Bus type signature for this type. |
63 | | fn signature(&self) -> Signature<'static>; |
64 | | /// Performs the append operation. |
65 | | fn append(&self, _: &mut IterAppend); |
66 | | /// Transforms this argument to Any (which can be downcasted to read the current value). |
67 | | /// |
68 | | /// See the argument guide's reference section for which types you can cast to. |
69 | | fn as_any(&self) -> &dyn any::Any where Self: 'static; |
70 | | /// Transforms this argument to Any (which can be downcasted to read the current value). |
71 | | /// |
72 | | /// See the argument guide's reference section for which types you can cast to. |
73 | | /// # Panic |
74 | | /// Will panic if the interior cannot be made mutable, e g, if encapsulated |
75 | | /// inside a Rc with a reference count > 1. |
76 | | fn as_any_mut(&mut self) -> &mut dyn any::Any where Self: 'static; |
77 | | /// Try to read the argument as an i64. |
78 | | /// |
79 | | /// Works for: Boolean, Byte, Int16, UInt16, Int32, UInt32, Int64, UnixFd. |
80 | | #[inline] |
81 | 0 | fn as_i64(&self) -> Option<i64> { None } Unexecuted instantiation: <alloc::vec::Vec<dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <alloc::vec::Vec<std::fs::File> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<dbus::strings::Path> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<dbus::strings::Signature> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<alloc::string::String> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<bool> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<f64> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<u8> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<i32> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<u32> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<i16> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<u16> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<i64> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<u64> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <std::collections::hash::map::HashMap<alloc::string::String, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <std::collections::hash::map::HashMap<dbus::strings::Path, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <std::collections::hash::map::HashMap<dbus::strings::Signature, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <std::collections::hash::map::HashMap<bool, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <std::collections::hash::map::HashMap<u8, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <std::collections::hash::map::HashMap<i32, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <std::collections::hash::map::HashMap<u32, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <std::collections::hash::map::HashMap<i16, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <std::collections::hash::map::HashMap<u16, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <std::collections::hash::map::HashMap<i64, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <std::collections::hash::map::HashMap<u64, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <alloc::collections::vec_deque::VecDeque<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <alloc::vec::Vec<dbus::strings::Path> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <alloc::vec::Vec<dbus::strings::Member> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <alloc::vec::Vec<dbus::strings::ErrorName> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <alloc::vec::Vec<dbus::strings::Interface> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <alloc::vec::Vec<dbus::strings::Signature> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <dbus::strings::Path as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <dbus::strings::Member as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <dbus::strings::ErrorName as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <dbus::strings::Interface as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <dbus::strings::Signature as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <alloc::vec::Vec<alloc::string::String> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <alloc::vec::Vec<bool> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <alloc::vec::Vec<f64> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <alloc::vec::Vec<u8> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <alloc::vec::Vec<i32> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <alloc::vec::Vec<u32> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <alloc::vec::Vec<i16> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <alloc::vec::Vec<u16> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <alloc::vec::Vec<i64> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <alloc::vec::Vec<u64> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <dbus::arg::array_impl::InternalArray as dbus::arg::msgarg::RefArg>::as_i64 |
82 | | /// Try to read the argument as an u64. |
83 | | /// |
84 | | /// Works for: Boolean, Byte, Int16, UInt16, Int32, UInt32, UInt64. |
85 | | #[inline] |
86 | 0 | fn as_u64(&self) -> Option<u64> { None } Unexecuted instantiation: <alloc::vec::Vec<dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <alloc::vec::Vec<std::fs::File> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<dbus::strings::Path> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<dbus::strings::Signature> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<alloc::string::String> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<bool> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<f64> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<u8> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<i32> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<u32> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<i16> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<u16> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<i64> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<u64> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <std::collections::hash::map::HashMap<alloc::string::String, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <std::collections::hash::map::HashMap<dbus::strings::Path, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <std::collections::hash::map::HashMap<dbus::strings::Signature, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <std::collections::hash::map::HashMap<bool, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <std::collections::hash::map::HashMap<u8, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <std::collections::hash::map::HashMap<i32, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <std::collections::hash::map::HashMap<u32, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <std::collections::hash::map::HashMap<i16, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <std::collections::hash::map::HashMap<u16, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <std::collections::hash::map::HashMap<i64, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <std::collections::hash::map::HashMap<u64, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <alloc::collections::vec_deque::VecDeque<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <std::fs::File as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <alloc::vec::Vec<dbus::strings::Path> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <alloc::vec::Vec<dbus::strings::Member> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <alloc::vec::Vec<dbus::strings::ErrorName> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <alloc::vec::Vec<dbus::strings::Interface> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <alloc::vec::Vec<dbus::strings::Signature> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <dbus::strings::Path as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <dbus::strings::Member as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <dbus::strings::ErrorName as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <dbus::strings::Interface as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <dbus::strings::Signature as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <alloc::vec::Vec<alloc::string::String> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <alloc::vec::Vec<bool> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <alloc::vec::Vec<f64> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <alloc::vec::Vec<u8> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <alloc::vec::Vec<i32> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <alloc::vec::Vec<u32> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <alloc::vec::Vec<i16> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <alloc::vec::Vec<u16> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <alloc::vec::Vec<i64> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <alloc::vec::Vec<u64> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <dbus::arg::array_impl::InternalArray as dbus::arg::msgarg::RefArg>::as_u64 |
87 | | /// Try to read the argument as an f64. |
88 | | /// |
89 | | /// Works for: Boolean, Byte, Int16, UInt16, Int32, UInt32, Double. |
90 | | #[inline] |
91 | 0 | fn as_f64(&self) -> Option<f64> { None } Unexecuted instantiation: <alloc::vec::Vec<dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <alloc::vec::Vec<std::fs::File> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<dbus::strings::Path> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<dbus::strings::Signature> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<alloc::string::String> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<bool> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<f64> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<u8> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<i32> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<u32> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<i16> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<u16> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<i64> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<u64> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <std::collections::hash::map::HashMap<alloc::string::String, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <std::collections::hash::map::HashMap<dbus::strings::Path, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <std::collections::hash::map::HashMap<dbus::strings::Signature, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <std::collections::hash::map::HashMap<bool, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <std::collections::hash::map::HashMap<u8, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <std::collections::hash::map::HashMap<i32, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <std::collections::hash::map::HashMap<u32, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <std::collections::hash::map::HashMap<i16, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <std::collections::hash::map::HashMap<u16, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <std::collections::hash::map::HashMap<i64, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <std::collections::hash::map::HashMap<u64, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <alloc::collections::vec_deque::VecDeque<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <std::fs::File as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <alloc::vec::Vec<dbus::strings::Path> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <alloc::vec::Vec<dbus::strings::Member> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <alloc::vec::Vec<dbus::strings::ErrorName> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <alloc::vec::Vec<dbus::strings::Interface> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <alloc::vec::Vec<dbus::strings::Signature> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <dbus::strings::Path as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <dbus::strings::Member as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <dbus::strings::ErrorName as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <dbus::strings::Interface as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <dbus::strings::Signature as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <alloc::vec::Vec<alloc::string::String> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <alloc::vec::Vec<bool> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <alloc::vec::Vec<f64> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <alloc::vec::Vec<u8> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <alloc::vec::Vec<i32> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <alloc::vec::Vec<u32> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <alloc::vec::Vec<i16> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <alloc::vec::Vec<u16> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <alloc::vec::Vec<i64> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <alloc::vec::Vec<u64> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <dbus::arg::array_impl::InternalArray as dbus::arg::msgarg::RefArg>::as_f64 |
92 | | /// Try to read the argument as a str. |
93 | | /// |
94 | | /// Works for: String, ObjectPath, Signature. |
95 | | #[inline] |
96 | 0 | fn as_str(&self) -> Option<&str> { None } Unexecuted instantiation: <alloc::vec::Vec<dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <alloc::vec::Vec<std::fs::File> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<dbus::strings::Path> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<dbus::strings::Signature> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<alloc::string::String> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<bool> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<f64> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<u8> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<i32> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<u32> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<i16> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<u16> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<i64> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <dbus::arg::array_impl::InternalDict<u64> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <std::collections::hash::map::HashMap<alloc::string::String, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <std::collections::hash::map::HashMap<dbus::strings::Path, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <std::collections::hash::map::HashMap<dbus::strings::Signature, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <std::collections::hash::map::HashMap<bool, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <std::collections::hash::map::HashMap<u8, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <std::collections::hash::map::HashMap<i32, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <std::collections::hash::map::HashMap<u32, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <std::collections::hash::map::HashMap<i16, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <std::collections::hash::map::HashMap<u16, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <std::collections::hash::map::HashMap<i64, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <std::collections::hash::map::HashMap<u64, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <alloc::collections::vec_deque::VecDeque<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <std::fs::File as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <alloc::vec::Vec<dbus::strings::Path> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <alloc::vec::Vec<dbus::strings::Member> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <alloc::vec::Vec<dbus::strings::ErrorName> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <alloc::vec::Vec<dbus::strings::Interface> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <alloc::vec::Vec<dbus::strings::Signature> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <alloc::vec::Vec<alloc::string::String> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <alloc::vec::Vec<bool> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <alloc::vec::Vec<f64> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <alloc::vec::Vec<u8> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <alloc::vec::Vec<i32> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <alloc::vec::Vec<u32> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <alloc::vec::Vec<i16> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <alloc::vec::Vec<u16> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <alloc::vec::Vec<i64> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <alloc::vec::Vec<u64> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <dbus::arg::array_impl::InternalArray as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <u8 as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <i32 as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <u32 as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <i16 as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <u16 as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <i64 as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <u64 as dbus::arg::msgarg::RefArg>::as_str |
97 | | /// Try to read the argument as an iterator. |
98 | | /// |
99 | | /// Works for: Array/Dict, Struct, Variant. |
100 | | /// For Dicts, keys and values are interleaved. |
101 | | #[inline] |
102 | 0 | fn as_iter<'a>(&'a self) -> Option<Box<dyn Iterator<Item=&'a dyn RefArg> + 'a>> { None } Unexecuted instantiation: <std::fs::File as dbus::arg::msgarg::RefArg>::as_iter Unexecuted instantiation: <dbus::strings::Path as dbus::arg::msgarg::RefArg>::as_iter Unexecuted instantiation: <dbus::strings::Member as dbus::arg::msgarg::RefArg>::as_iter Unexecuted instantiation: <dbus::strings::ErrorName as dbus::arg::msgarg::RefArg>::as_iter Unexecuted instantiation: <dbus::strings::Interface as dbus::arg::msgarg::RefArg>::as_iter Unexecuted instantiation: <dbus::strings::Signature as dbus::arg::msgarg::RefArg>::as_iter Unexecuted instantiation: <alloc::string::String as dbus::arg::msgarg::RefArg>::as_iter Unexecuted instantiation: <bool as dbus::arg::msgarg::RefArg>::as_iter Unexecuted instantiation: <f64 as dbus::arg::msgarg::RefArg>::as_iter Unexecuted instantiation: <u8 as dbus::arg::msgarg::RefArg>::as_iter Unexecuted instantiation: <i32 as dbus::arg::msgarg::RefArg>::as_iter Unexecuted instantiation: <u32 as dbus::arg::msgarg::RefArg>::as_iter Unexecuted instantiation: <i16 as dbus::arg::msgarg::RefArg>::as_iter Unexecuted instantiation: <u16 as dbus::arg::msgarg::RefArg>::as_iter Unexecuted instantiation: <i64 as dbus::arg::msgarg::RefArg>::as_iter Unexecuted instantiation: <u64 as dbus::arg::msgarg::RefArg>::as_iter |
103 | | /// Try to read the inner of an argument, as another argument, specifying an index. |
104 | | /// |
105 | | /// Works for: Variant, Array, Struct, Dict. |
106 | | /// For Dicts, even indices gets a key, odd indices gets a value. |
107 | | #[inline] |
108 | 0 | fn as_static_inner(&self, _index: usize) -> Option<&(dyn RefArg + 'static)> where Self: 'static { None } Unexecuted instantiation: <std::collections::hash::map::HashMap<alloc::string::String, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_static_inner Unexecuted instantiation: <std::collections::hash::map::HashMap<dbus::strings::Path, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_static_inner Unexecuted instantiation: <std::collections::hash::map::HashMap<dbus::strings::Signature, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_static_inner Unexecuted instantiation: <std::collections::hash::map::HashMap<bool, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_static_inner Unexecuted instantiation: <std::collections::hash::map::HashMap<u8, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_static_inner Unexecuted instantiation: <std::collections::hash::map::HashMap<i32, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_static_inner Unexecuted instantiation: <std::collections::hash::map::HashMap<u32, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_static_inner Unexecuted instantiation: <std::collections::hash::map::HashMap<i16, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_static_inner Unexecuted instantiation: <std::collections::hash::map::HashMap<u16, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_static_inner Unexecuted instantiation: <std::collections::hash::map::HashMap<i64, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_static_inner Unexecuted instantiation: <std::collections::hash::map::HashMap<u64, dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>>> as dbus::arg::msgarg::RefArg>::as_static_inner Unexecuted instantiation: <std::fs::File as dbus::arg::msgarg::RefArg>::as_static_inner Unexecuted instantiation: <dbus::strings::Path as dbus::arg::msgarg::RefArg>::as_static_inner Unexecuted instantiation: <dbus::strings::Member as dbus::arg::msgarg::RefArg>::as_static_inner Unexecuted instantiation: <dbus::strings::ErrorName as dbus::arg::msgarg::RefArg>::as_static_inner Unexecuted instantiation: <dbus::strings::Interface as dbus::arg::msgarg::RefArg>::as_static_inner Unexecuted instantiation: <dbus::strings::Signature as dbus::arg::msgarg::RefArg>::as_static_inner Unexecuted instantiation: <alloc::string::String as dbus::arg::msgarg::RefArg>::as_static_inner Unexecuted instantiation: <bool as dbus::arg::msgarg::RefArg>::as_static_inner Unexecuted instantiation: <f64 as dbus::arg::msgarg::RefArg>::as_static_inner Unexecuted instantiation: <u8 as dbus::arg::msgarg::RefArg>::as_static_inner Unexecuted instantiation: <i32 as dbus::arg::msgarg::RefArg>::as_static_inner Unexecuted instantiation: <u32 as dbus::arg::msgarg::RefArg>::as_static_inner Unexecuted instantiation: <i16 as dbus::arg::msgarg::RefArg>::as_static_inner Unexecuted instantiation: <u16 as dbus::arg::msgarg::RefArg>::as_static_inner Unexecuted instantiation: <i64 as dbus::arg::msgarg::RefArg>::as_static_inner Unexecuted instantiation: <u64 as dbus::arg::msgarg::RefArg>::as_static_inner |
109 | | /// Deep clone of the RefArg, causing the result to be 'static. |
110 | | /// |
111 | | /// Usable as an escape hatch in case of lifetime problems with RefArg. |
112 | | /// |
113 | | /// In case of complex types (Array, Dict, Struct), the clone is not guaranteed |
114 | | /// to have the same internal representation as the original. |
115 | | fn box_clone(&self) -> Box<dyn RefArg + 'static>; |
116 | | |
117 | | /// Deep clone of an array. |
118 | | /// |
119 | | /// This method is used internally by box_clone. |
120 | 0 | fn array_clone(_arg: &[Self]) -> Option<Box<dyn RefArg + 'static>> where Self: Sized { None } Unexecuted instantiation: <dbus::arg::variantstruct_impl::Variant<alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg>> as dbus::arg::msgarg::RefArg>::array_clone Unexecuted instantiation: <std::fs::File as dbus::arg::msgarg::RefArg>::array_clone |
121 | | } |
122 | | |
123 | | impl<'a> Get<'a> for Box<dyn RefArg> { |
124 | 0 | fn get(i: &mut Iter<'a>) -> Option<Self> { i.get_refarg() } |
125 | | } |
126 | | |
127 | | /// Cast a RefArg as a specific type (shortcut for any + downcast) |
128 | | /// |
129 | | /// See the argument guide's reference section for which types you can cast to. |
130 | | #[inline] |
131 | 0 | pub fn cast<'a, T: 'static>(a: &'a (dyn RefArg + 'static)) -> Option<&'a T> { a.as_any().downcast_ref() } |
132 | | |
133 | | /// Cast a RefArg as a specific type (shortcut for any_mut + downcast_mut) |
134 | | /// |
135 | | /// See the argument guide's reference section for which types you can cast to. |
136 | | /// |
137 | | /// # Panic |
138 | | /// Will panic if the interior cannot be made mutable, e g, if encapsulated |
139 | | /// inside a Rc with a reference count > 1. |
140 | | #[inline] |
141 | 0 | pub fn cast_mut<'a, T: 'static>(a: &'a mut (dyn RefArg + 'static)) -> Option<&'a mut T> { a.as_any_mut().downcast_mut() } |
142 | | |
143 | | /// The type typically used for a dictionary of properties. |
144 | | pub type PropMap = HashMap<String, Variant<Box<dyn RefArg + 'static>>>; |
145 | | |
146 | | |
147 | | /// Descend into a hashmap returned by e g "Properties::get_all" to retrieve the value of a property. |
148 | | /// |
149 | | /// Shortcut for get + cast. Returns None both if the property does not exist, or if it was of a different type. |
150 | | /// See the argument guide's reference section for which types you can cast to. |
151 | 0 | pub fn prop_cast<'a, T: 'static>(map: &'a PropMap, key: &str) -> Option<&'a T> { |
152 | 0 | map.get(key).and_then(|v| cast(&v.0)) |
153 | 0 | } |
154 | | |
155 | | /// If a type implements this trait, it means the size and alignment is the same |
156 | | /// as in D-Bus. This means that you can quickly append and get slices of this type. |
157 | | /// |
158 | | /// Note: Booleans do not implement this trait because D-Bus booleans are 4 bytes and Rust booleans are 1 byte. |
159 | | pub unsafe trait FixedArray: Arg + 'static + Clone + Copy {} |
160 | | |
161 | | /// Types that can be used as keys in a dict type implement this trait. |
162 | | pub trait DictKey: Arg {} |
163 | | |
164 | | |
165 | | |
166 | | /// Simple lift over reference to value - this makes some iterators more ergonomic to use |
167 | | impl<'a, T: Arg> Arg for &'a T { |
168 | | const ARG_TYPE: ArgType = T::ARG_TYPE; |
169 | 0 | fn signature() -> Signature<'static> { T::signature() } |
170 | | } |
171 | | impl<'a, T: Append> Append for &'a T { |
172 | 0 | fn append_by_ref(&self, i: &mut IterAppend) { (&**self).append_by_ref(i) } |
173 | | } |
174 | | impl<'a, T: DictKey> DictKey for &'a T {} |
175 | | |
176 | | impl<'a, T: RefArg + ?Sized> RefArg for &'a T { |
177 | | #[inline] |
178 | 0 | fn arg_type(&self) -> ArgType { (&**self).arg_type() } |
179 | | #[inline] |
180 | 0 | fn signature(&self) -> Signature<'static> { (&**self).signature() } |
181 | | #[inline] |
182 | 0 | fn append(&self, i: &mut IterAppend) { (&**self).append(i) } |
183 | | #[inline] |
184 | 0 | fn as_any(&self) -> &dyn any::Any where T: 'static { (&**self).as_any() } |
185 | | #[inline] |
186 | 0 | fn as_any_mut(&mut self) -> &mut dyn any::Any where T: 'static { unreachable!() } |
187 | | #[inline] |
188 | 0 | fn as_i64(&self) -> Option<i64> { (&**self).as_i64() } |
189 | | #[inline] |
190 | 0 | fn as_u64(&self) -> Option<u64> { (&**self).as_u64() } |
191 | | #[inline] |
192 | 0 | fn as_f64(&self) -> Option<f64> { (&**self).as_f64() } |
193 | | #[inline] |
194 | 0 | fn as_str(&self) -> Option<&str> { (&**self).as_str() } |
195 | | #[inline] |
196 | 0 | fn as_iter<'b>(&'b self) -> Option<Box<dyn Iterator<Item=&'b dyn RefArg> + 'b>> { (&**self).as_iter() } |
197 | | #[inline] |
198 | 0 | fn as_static_inner(&self, index: usize) -> Option<&(dyn RefArg + 'static)> where Self: 'static { (&**self).as_static_inner(index) } |
199 | | #[inline] |
200 | 0 | fn box_clone(&self) -> Box<dyn RefArg + 'static> { (&**self).box_clone() } |
201 | | } |
202 | | |
203 | | |
204 | | |
205 | | macro_rules! deref_impl { |
206 | | ($t: ident, $ss: ident, $make_mut: expr) => { |
207 | | |
208 | | impl<T: RefArg + ?Sized> RefArg for $t<T> { |
209 | | #[inline] |
210 | 0 | fn arg_type(&self) -> ArgType { (&**self).arg_type() } Unexecuted instantiation: <alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg> as dbus::arg::msgarg::RefArg>::arg_type Unexecuted instantiation: <alloc::sync::Arc<_> as dbus::arg::msgarg::RefArg>::arg_type |
211 | | #[inline] |
212 | 0 | fn signature(&self) -> Signature<'static> { (&**self).signature() } Unexecuted instantiation: <alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg> as dbus::arg::msgarg::RefArg>::signature Unexecuted instantiation: <alloc::sync::Arc<_> as dbus::arg::msgarg::RefArg>::signature |
213 | | #[inline] |
214 | 0 | fn append(&self, i: &mut IterAppend) { (&**self).append(i) } Unexecuted instantiation: <alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg> as dbus::arg::msgarg::RefArg>::append Unexecuted instantiation: <alloc::sync::Arc<_> as dbus::arg::msgarg::RefArg>::append |
215 | | #[inline] |
216 | 0 | fn as_any(&self) -> &dyn any::Any where T: 'static { (&**self).as_any() } Unexecuted instantiation: <alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg> as dbus::arg::msgarg::RefArg>::as_any Unexecuted instantiation: <alloc::sync::Arc<_> as dbus::arg::msgarg::RefArg>::as_any |
217 | | #[inline] |
218 | 0 | fn as_any_mut(&mut $ss) -> &mut dyn any::Any where T: 'static { $make_mut.as_any_mut() } Unexecuted instantiation: <alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg> as dbus::arg::msgarg::RefArg>::as_any_mut Unexecuted instantiation: <alloc::sync::Arc<_> as dbus::arg::msgarg::RefArg>::as_any_mut |
219 | | #[inline] |
220 | 0 | fn as_i64(&self) -> Option<i64> { (&**self).as_i64() } Unexecuted instantiation: <alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg> as dbus::arg::msgarg::RefArg>::as_i64 Unexecuted instantiation: <alloc::sync::Arc<_> as dbus::arg::msgarg::RefArg>::as_i64 |
221 | | #[inline] |
222 | 0 | fn as_u64(&self) -> Option<u64> { (&**self).as_u64() } Unexecuted instantiation: <alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg> as dbus::arg::msgarg::RefArg>::as_u64 Unexecuted instantiation: <alloc::sync::Arc<_> as dbus::arg::msgarg::RefArg>::as_u64 |
223 | | #[inline] |
224 | 0 | fn as_f64(&self) -> Option<f64> { (&**self).as_f64() } Unexecuted instantiation: <alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg> as dbus::arg::msgarg::RefArg>::as_f64 Unexecuted instantiation: <alloc::sync::Arc<_> as dbus::arg::msgarg::RefArg>::as_f64 |
225 | | #[inline] |
226 | 0 | fn as_str(&self) -> Option<&str> { (&**self).as_str() } Unexecuted instantiation: <alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg> as dbus::arg::msgarg::RefArg>::as_str Unexecuted instantiation: <alloc::sync::Arc<_> as dbus::arg::msgarg::RefArg>::as_str |
227 | | #[inline] |
228 | 0 | fn as_iter<'a>(&'a self) -> Option<Box<dyn Iterator<Item=&'a dyn RefArg> + 'a>> { (&**self).as_iter() } Unexecuted instantiation: <alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg> as dbus::arg::msgarg::RefArg>::as_iter Unexecuted instantiation: <alloc::sync::Arc<_> as dbus::arg::msgarg::RefArg>::as_iter |
229 | | #[inline] |
230 | 0 | fn as_static_inner(&self, index: usize) -> Option<&(dyn RefArg + 'static)> where Self: 'static { (&**self).as_static_inner(index) } Unexecuted instantiation: <alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg> as dbus::arg::msgarg::RefArg>::as_static_inner Unexecuted instantiation: <alloc::sync::Arc<_> as dbus::arg::msgarg::RefArg>::as_static_inner |
231 | | #[inline] |
232 | 0 | fn box_clone(&self) -> Box<dyn RefArg + 'static> { (&**self).box_clone() } Unexecuted instantiation: <alloc::boxed::Box<dyn dbus::arg::msgarg::RefArg> as dbus::arg::msgarg::RefArg>::box_clone Unexecuted instantiation: <alloc::sync::Arc<_> as dbus::arg::msgarg::RefArg>::box_clone |
233 | | } |
234 | | impl<T: DictKey> DictKey for $t<T> {} |
235 | | |
236 | | impl<T: Arg> Arg for $t<T> { |
237 | | const ARG_TYPE: ArgType = T::ARG_TYPE; |
238 | 0 | fn signature() -> Signature<'static> { T::signature() } Unexecuted instantiation: <alloc::boxed::Box<_> as dbus::arg::msgarg::Arg>::signature Unexecuted instantiation: <alloc::sync::Arc<_> as dbus::arg::msgarg::Arg>::signature |
239 | | } |
240 | | impl<'a, T: Get<'a>> Get<'a> for $t<T> { |
241 | 0 | fn get(i: &mut Iter<'a>) -> Option<Self> { T::get(i).map($t::new) } Unexecuted instantiation: <alloc::boxed::Box<_> as dbus::arg::msgarg::Get>::get Unexecuted instantiation: <alloc::sync::Arc<_> as dbus::arg::msgarg::Get>::get |
242 | | } |
243 | | |
244 | | } |
245 | | } |
246 | | |
247 | | impl<T: Append> Append for Box<T> { |
248 | 0 | fn append_by_ref(&self, i: &mut IterAppend) { (&**self).append_by_ref(i) } |
249 | | } |
250 | | |
251 | | deref_impl!(Box, self, &mut **self ); |
252 | | // deref_impl!(Rc, self, Rc::get_mut(self).unwrap()); |
253 | | deref_impl!(Arc, self, Arc::get_mut(self).unwrap()); |
254 | | |
255 | | macro_rules! argall_impl { |
256 | | ($($n: ident $t: ident $s: ty,)+) => { |
257 | | |
258 | | impl<$($t: Arg),*> ArgAll for ($($t,)*) { |
259 | | type strs = ($(&'static $s,)*); |
260 | 0 | fn strs_sig<Q: FnMut(&'static str, Signature<'static>)>(z: Self::strs, mut q: Q) { |
261 | 0 | let ( $($n,)*) = z; |
262 | 0 | $( q($n, $t::signature()); )* |
263 | 0 | } Unexecuted instantiation: <(_,) as dbus::arg::msgarg::ArgAll>::strs_sig::<_> Unexecuted instantiation: <(_, _) as dbus::arg::msgarg::ArgAll>::strs_sig::<_> Unexecuted instantiation: <(_, _, _) as dbus::arg::msgarg::ArgAll>::strs_sig::<_> Unexecuted instantiation: <(_, _, _, _) as dbus::arg::msgarg::ArgAll>::strs_sig::<_> Unexecuted instantiation: <(_, _, _, _, _) as dbus::arg::msgarg::ArgAll>::strs_sig::<_> Unexecuted instantiation: <(_, _, _, _, _, _) as dbus::arg::msgarg::ArgAll>::strs_sig::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _) as dbus::arg::msgarg::ArgAll>::strs_sig::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _) as dbus::arg::msgarg::ArgAll>::strs_sig::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::ArgAll>::strs_sig::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::ArgAll>::strs_sig::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::ArgAll>::strs_sig::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::ArgAll>::strs_sig::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::ArgAll>::strs_sig::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::ArgAll>::strs_sig::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::ArgAll>::strs_sig::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::ArgAll>::strs_sig::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::ArgAll>::strs_sig::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::ArgAll>::strs_sig::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::ArgAll>::strs_sig::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::ArgAll>::strs_sig::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::ArgAll>::strs_sig::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::ArgAll>::strs_sig::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::ArgAll>::strs_sig::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::ArgAll>::strs_sig::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::ArgAll>::strs_sig::<_> |
264 | | } |
265 | | |
266 | | impl<$($t: Append),*> AppendAll for ($($t,)*) { |
267 | 0 | fn append(&self, ia: &mut IterAppend) { |
268 | 0 | let ( $($n,)*) = self; |
269 | 0 | $( ia.append($n); )* |
270 | 0 | } Unexecuted instantiation: <(&str,) as dbus::arg::msgarg::AppendAll>::append Unexecuted instantiation: <(_, _) as dbus::arg::msgarg::AppendAll>::append Unexecuted instantiation: <(_, _, _) as dbus::arg::msgarg::AppendAll>::append Unexecuted instantiation: <(_, _, _, _) as dbus::arg::msgarg::AppendAll>::append Unexecuted instantiation: <(_, _, _, _, _) as dbus::arg::msgarg::AppendAll>::append Unexecuted instantiation: <(_, _, _, _, _, _) as dbus::arg::msgarg::AppendAll>::append Unexecuted instantiation: <(_, _, _, _, _, _, _) as dbus::arg::msgarg::AppendAll>::append Unexecuted instantiation: <(_, _, _, _, _, _, _, _) as dbus::arg::msgarg::AppendAll>::append Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::AppendAll>::append Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::AppendAll>::append Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::AppendAll>::append Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::AppendAll>::append Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::AppendAll>::append Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::AppendAll>::append Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::AppendAll>::append Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::AppendAll>::append Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::AppendAll>::append Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::AppendAll>::append Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::AppendAll>::append Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::AppendAll>::append Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::AppendAll>::append Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::AppendAll>::append Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::AppendAll>::append Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::AppendAll>::append Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::AppendAll>::append |
271 | | } |
272 | | |
273 | | impl<$($t: Arg + for<'z> Get<'z>),*> ReadAll for ($($t,)*) { |
274 | 0 | fn read(ii: &mut Iter) -> Result<Self, TypeMismatchError> { |
275 | 0 | $( let $n = ii.read()?; )* |
276 | 0 | Ok(($( $n, )* )) |
277 | 0 | } Unexecuted instantiation: <(_,) as dbus::arg::msgarg::ReadAll>::read Unexecuted instantiation: <(_, _) as dbus::arg::msgarg::ReadAll>::read Unexecuted instantiation: <(_, _, _) as dbus::arg::msgarg::ReadAll>::read Unexecuted instantiation: <(_, _, _, _) as dbus::arg::msgarg::ReadAll>::read Unexecuted instantiation: <(_, _, _, _, _) as dbus::arg::msgarg::ReadAll>::read Unexecuted instantiation: <(_, _, _, _, _, _) as dbus::arg::msgarg::ReadAll>::read Unexecuted instantiation: <(_, _, _, _, _, _, _) as dbus::arg::msgarg::ReadAll>::read Unexecuted instantiation: <(_, _, _, _, _, _, _, _) as dbus::arg::msgarg::ReadAll>::read Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::ReadAll>::read Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::ReadAll>::read Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::ReadAll>::read Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::ReadAll>::read Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::ReadAll>::read Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::ReadAll>::read Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::ReadAll>::read Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::ReadAll>::read Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::ReadAll>::read Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::ReadAll>::read Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::ReadAll>::read Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::ReadAll>::read Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::ReadAll>::read Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::ReadAll>::read Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::ReadAll>::read Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::ReadAll>::read Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as dbus::arg::msgarg::ReadAll>::read |
278 | | } |
279 | | |
280 | | |
281 | | } |
282 | | } |
283 | | |
284 | | impl ArgAll for () { |
285 | | type strs = (); |
286 | 0 | fn strs_sig<F: FnMut(&'static str, Signature<'static>)>(_: Self::strs, _: F) {} |
287 | | } |
288 | | |
289 | | impl AppendAll for () { |
290 | 0 | fn append(&self, _: &mut IterAppend) {} |
291 | | } |
292 | | |
293 | | impl ReadAll for () { |
294 | 0 | fn read(_: &mut Iter) -> Result<Self, TypeMismatchError> { |
295 | 0 | Ok(()) |
296 | 0 | } |
297 | | } |
298 | | |
299 | | argall_impl!(a A str,); |
300 | | argall_impl!(a A str, b B str,); |
301 | | argall_impl!(a A str, b B str, c C str,); |
302 | | argall_impl!(a A str, b B str, c C str, d D str,); |
303 | | argall_impl!(a A str, b B str, c C str, d D str, e E str,); |
304 | | argall_impl!(a A str, b B str, c C str, d D str, e E str, f F str,); |
305 | | argall_impl!(a A str, b B str, c C str, d D str, e E str, f F str, g G str,); |
306 | | argall_impl!(a A str, b B str, c C str, d D str, e E str, f F str, g G str, h H str,); |
307 | | argall_impl!(a A str, b B str, c C str, d D str, e E str, f F str, g G str, h H str, i I str,); |
308 | | argall_impl!(a A str, b B str, c C str, d D str, e E str, f F str, g G str, h H str, i I str, j J str,); |
309 | | argall_impl!(a A str, b B str, c C str, d D str, e E str, f F str, g G str, h H str, i I str, j J str, k K str,); |
310 | | argall_impl!(a A str, b B str, c C str, d D str, e E str, f F str, g G str, h H str, i I str, j J str, k K str, l L str,); |
311 | | argall_impl!(a A str, b B str, c C str, d D str, e E str, f F str, g G str, h H str, i I str, j J str, k K str, l L str, m M str,); |
312 | | argall_impl!(a A str, b B str, c C str, d D str, e E str, f F str, g G str, h H str, i I str, j J str, k K str, l L str, m M str, n N str,); |
313 | | argall_impl!(a A str, b B str, c C str, d D str, e E str, f F str, g G str, h H str, i I str, j J str, k K str, l L str, m M str, n N str, o O str,); |
314 | | argall_impl!(a A str, b B str, c C str, d D str, e E str, f F str, g G str, h H str, i I str, j J str, k K str, l L str, m M str, n N str, o O str, p P str,); |
315 | | argall_impl!(a A str, b B str, c C str, d D str, e E str, f F str, g G str, h H str, i I str, j J str, k K str, l L str, m M str, n N str, o O str, p P str, r R str,); |
316 | | argall_impl!(a A str, b B str, c C str, d D str, e E str, f F str, g G str, h H str, i I str, j J str, k K str, l L str, m M str, n N str, o O str, p P str, r R str, s S str,); |
317 | | argall_impl!(a A str, b B str, c C str, d D str, e E str, f F str, g G str, h H str, i I str, j J str, k K str, l L str, m M str, n N str, o O str, p P str, r R str, s S str, t T str,); |
318 | | argall_impl!(a A str, b B str, c C str, d D str, e E str, f F str, g G str, h H str, i I str, j J str, k K str, l L str, m M str, n N str, o O str, p P str, r R str, s S str, t T str, u U str,); |
319 | | argall_impl!(a A str, b B str, c C str, d D str, e E str, f F str, g G str, h H str, i I str, j J str, k K str, l L str, m M str, n N str, o O str, p P str, r R str, s S str, t T str, u U str, v V str,); |
320 | | argall_impl!(a A str, b B str, c C str, d D str, e E str, f F str, g G str, h H str, i I str, j J str, k K str, l L str, m M str, n N str, o O str, p P str, r R str, s S str, t T str, u U str, v V str, w W str,); |
321 | | argall_impl!(a A str, b B str, c C str, d D str, e E str, f F str, g G str, h H str, i I str, j J str, k K str, l L str, m M str, n N str, o O str, p P str, r R str, s S str, t T str, u U str, v V str, w W str, x X str,); |
322 | | argall_impl!(a A str, b B str, c C str, d D str, e E str, f F str, g G str, h H str, i I str, j J str, k K str, l L str, m M str, n N str, o O str, p P str, r R str, s S str, t T str, u U str, v V str, w W str, x X str, y Y str,); |
323 | | argall_impl!(a A str, b B str, c C str, d D str, e E str, f F str, g G str, h H str, i I str, j J str, k K str, l L str, m M str, n N str, o O str, p P str, r R str, s S str, t T str, u U str, v V str, w W str, x X str, y Y str, z Z str,); |
324 | | |
325 | | |
326 | | #[cfg(test)] |
327 | | mod test { |
328 | | use crate::{channel::{Channel, BusType}, Message, Path, Signature}; |
329 | | use crate::message::MessageType; |
330 | | use crate::arg::{Array, Variant, Dict, Iter, ArgType, TypeMismatchError, RefArg, cast}; |
331 | | |
332 | | use std::collections::HashMap; |
333 | | |
334 | | #[test] |
335 | | fn refarg() { |
336 | | let c = Channel::get_private(BusType::Session).unwrap(); |
337 | | let m = Message::new_method_call(c.unique_name().unwrap(), "/mooh", "com.example.hello", "Hello").unwrap(); |
338 | | |
339 | | let mut vv: Vec<Variant<Box<dyn RefArg>>> = vec!(); |
340 | | vv.push(Variant(Box::new(5i32))); |
341 | | vv.push(Variant(Box::new(String::from("Hello world")))); |
342 | | let m = m.append_ref(&vv); |
343 | | |
344 | | let (f1, f2) = (false, 7u64); |
345 | | let mut v: Vec<&dyn RefArg> = vec!(); |
346 | | v.push(&f1); |
347 | | v.push(&f2); |
348 | | let m = m.append_ref(&v); |
349 | | let vi32 = vec![7i32, 9i32]; |
350 | | let vstr: Vec<String> = ["This", "is", "dbus", "rs"].iter().map(|&s| s.into()).collect(); |
351 | | let m = m.append_ref(&[&vi32 as &dyn RefArg, &vstr as &dyn RefArg]); |
352 | | let mut map = HashMap::new(); |
353 | | map.insert(true, String::from("Yes")); |
354 | | map.insert(false, String::from("No")); |
355 | | let m = m.append_ref(&[&map as &dyn RefArg, &1.5f64 as &dyn RefArg]); |
356 | | |
357 | | c.send(m).unwrap(); |
358 | | |
359 | | loop { |
360 | | if let Some(m) = c.blocking_pop_message(std::time::Duration::from_millis(1000)).unwrap() { |
361 | | if m.msg_type() != MessageType::MethodCall { continue; } |
362 | | |
363 | | let rv: Vec<Box<dyn RefArg + 'static>> = m.iter_init().collect(); |
364 | | println!("Receiving {:?}", rv); |
365 | | let rv0: &Variant<Box<dyn RefArg>> = cast(&rv[0]).unwrap(); |
366 | | let rv00: &i32 = cast(&rv0.0).unwrap(); |
367 | | assert_eq!(rv00, &5i32); |
368 | | assert_eq!(Some(&false), rv[2].as_any().downcast_ref::<bool>()); |
369 | | assert_eq!(Some(&vi32), rv[4].as_any().downcast_ref::<Vec<i32>>()); |
370 | | assert_eq!(Some(&vstr), rv[5].as_any().downcast_ref::<Vec<String>>()); |
371 | | let mut diter = rv[6].as_iter().unwrap(); |
372 | | { |
373 | | let mut mmap: HashMap<bool, String> = HashMap::new(); |
374 | | while let Some(k) = diter.next() { |
375 | | let x: String = diter.next().unwrap().as_str().unwrap().into(); |
376 | | mmap.insert(*cast::<bool>(&k.box_clone()).unwrap(), x); |
377 | | } |
378 | | assert_eq!(mmap[&true], "Yes"); |
379 | | } |
380 | | let mut iter = rv[6].as_iter().unwrap(); |
381 | | assert!(iter.next().unwrap().as_i64().is_some()); |
382 | | assert!(iter.next().unwrap().as_str().is_some()); |
383 | | assert!(iter.next().unwrap().as_str().is_none()); |
384 | | assert!(iter.next().unwrap().as_i64().is_none()); |
385 | | assert!(iter.next().is_none()); |
386 | | assert!(rv[7].as_f64().unwrap() > 1.0); |
387 | | assert!(rv[7].as_f64().unwrap() < 2.0); |
388 | | break; |
389 | | } |
390 | | } |
391 | | } |
392 | | |
393 | | #[test] |
394 | | fn message_types() { |
395 | | let c = Channel::get_private(BusType::Session).unwrap(); |
396 | | |
397 | | let m = Message::new_method_call(c.unique_name().unwrap(), "/hello", "com.example.hello", "Hello").unwrap(); |
398 | | let m = m.append1(2000u16); |
399 | | let m = m.append1(&Array::new(&vec![129u8, 5, 254])); |
400 | | let m = m.append2(Variant(&["Hello", "world"][..]), &[32768u16, 16u16, 12u16][..]); |
401 | | let m = m.append3(-1i32, &*format!("Hello world"), -3.14f64); |
402 | | let m = m.append1((256i16, Variant(18_446_744_073_709_551_615u64))); |
403 | | let m = m.append2(Path::new("/a/valid/path").unwrap(), &Signature::new("a{sv}").unwrap()); |
404 | | let mut z = HashMap::new(); |
405 | | z.insert(123543u32, true); |
406 | | z.insert(0u32, false); |
407 | | let m = m.append1(Dict::new(&z)); |
408 | | let sending = format!("{:?}", m.iter_init()); |
409 | | println!("Sending {}", sending); |
410 | | c.send(m).unwrap(); |
411 | | |
412 | | loop { |
413 | | if let Some(m) = c.blocking_pop_message(std::time::Duration::from_millis(1000)).unwrap() { |
414 | | if m.msg_type() != MessageType::MethodCall { continue; } |
415 | | use super::Arg; |
416 | | let receiving = format!("{:?}", m.iter_init()); |
417 | | println!("Receiving {}", receiving); |
418 | | assert_eq!(sending, receiving); |
419 | | |
420 | | assert_eq!(2000u16, m.get1().unwrap()); |
421 | | assert_eq!(m.get2(), (Some(2000u16), Some(&[129u8, 5, 254][..]))); |
422 | | assert_eq!(m.read2::<u16, bool>().unwrap_err(), |
423 | | TypeMismatchError { position: 1, found: ArgType::Array, expected: ArgType::Boolean }); |
424 | | |
425 | | let mut g = m.iter_init(); |
426 | | let e = g.read::<u32>().unwrap_err(); |
427 | | assert_eq!(e.pos(), 0); |
428 | | assert_eq!(e.expected_arg_type(), ArgType::UInt32); |
429 | | assert_eq!(e.found_arg_type(), ArgType::UInt16); |
430 | | |
431 | | assert!(g.next() && g.next()); |
432 | | let v: Variant<Iter> = g.get().unwrap(); |
433 | | let mut viter = v.0; |
434 | | assert_eq!(viter.arg_type(), Array::<&str,()>::ARG_TYPE); |
435 | | let a: Array<&str, _> = viter.get().unwrap(); |
436 | | assert_eq!(a.collect::<Vec<&str>>(), vec!["Hello", "world"]); |
437 | | |
438 | | assert!(g.next()); |
439 | | assert_eq!(g.get::<u16>(), None); // It's an array, not a single u16 |
440 | | assert!(g.next() && g.next() && g.next() && g.next()); |
441 | | |
442 | | assert_eq!(g.get(), Some((256i16, Variant(18_446_744_073_709_551_615u64)))); |
443 | | assert!(g.next()); |
444 | | assert_eq!(g.get(), Some(Path::new("/a/valid/path").unwrap())); |
445 | | assert!(g.next()); |
446 | | assert_eq!(g.get(), Some(Signature::new("a{sv}").unwrap())); |
447 | | assert!(g.next()); |
448 | | let d: Dict<u32, bool, _> = g.get().unwrap(); |
449 | | let z2: HashMap<_, _> = d.collect(); |
450 | | assert_eq!(z, z2); |
451 | | break; |
452 | | } |
453 | | } |
454 | | } |
455 | | |
456 | | #[test] |
457 | | fn cast_vecs() { |
458 | | let c = Channel::get_private(BusType::Session).unwrap(); |
459 | | |
460 | | let m = Message::new_method_call(c.unique_name().unwrap(), "/hello", "com.example.hello", "Hello").unwrap(); |
461 | | macro_rules! append_array { |
462 | | ($m:expr, $t:ty) => { |
463 | | $m.append1(Variant(&Array::<&$t, _>::new(&vec![Default::default()]))) |
464 | | }; |
465 | | } |
466 | | let m = append_array!(m, bool); |
467 | | let m = append_array!(m, u8); |
468 | | let m = append_array!(m, u16); |
469 | | let m = append_array!(m, i16); |
470 | | let m = append_array!(m, u32); |
471 | | let m = append_array!(m, i32); |
472 | | let m = append_array!(m, f64); |
473 | | let m = append_array!(m, String); |
474 | | c.send(m).unwrap(); |
475 | | loop { |
476 | | if let Some(m) = c.blocking_pop_message(std::time::Duration::from_millis(1000)).unwrap() { |
477 | | if m.msg_type() != MessageType::MethodCall { |
478 | | continue; |
479 | | } |
480 | | let mut i = m.iter_init(); |
481 | | let mut i2 = m.iter_init(); |
482 | | |
483 | | macro_rules! check_array { |
484 | | ($t:ty) => { |
485 | | let array: Variant<Box<dyn RefArg>> = i.read().unwrap(); |
486 | | assert_eq!( |
487 | | cast::<Vec<$t>>(&(array.0)), |
488 | | Some(&vec![Default::default()]), |
489 | | "a variant containing an array of {0} should be castable to a Vec<{0}>", |
490 | | std::any::type_name::<$t>() |
491 | | ); |
492 | | let refarg = i2.get_refarg().unwrap(); |
493 | | println!("refarg {:?}", refarg); |
494 | | let cloned = refarg.box_clone(); |
495 | | println!("cloned: {:?}", cloned); |
496 | | let st_inner = refarg.as_static_inner(0).unwrap(); |
497 | | println!("st_inner {:?}", st_inner); |
498 | | i2.next(); |
499 | | assert_eq!(cast::<Vec<$t>>(st_inner), Some(&vec![Default::default()])); |
500 | | let cl_inner = refarg.as_static_inner(0).unwrap(); |
501 | | assert_eq!(cast::<Vec<$t>>(cl_inner), Some(&vec![Default::default()])); |
502 | | }; |
503 | | } |
504 | | check_array!(bool); |
505 | | check_array!(u8); |
506 | | check_array!(u16); |
507 | | check_array!(i16); |
508 | | check_array!(u32); |
509 | | check_array!(i32); |
510 | | check_array!(f64); |
511 | | check_array!(String); |
512 | | break; |
513 | | } |
514 | | } |
515 | | } |
516 | | |
517 | | #[test] |
518 | | fn cast_dicts() { |
519 | | let c = Channel::get_private(BusType::Session).unwrap(); |
520 | | |
521 | | let m = Message::new_method_call( |
522 | | c.unique_name().unwrap(), |
523 | | "/hello", |
524 | | "com.example.hello", |
525 | | "Hello", |
526 | | ) |
527 | | .unwrap(); |
528 | | macro_rules! append_dict_variant { |
529 | | ($m:expr, $k:ty, $v:ty) => {{ |
530 | | let mut map: HashMap<$k, Variant<Box<dyn RefArg>>> = HashMap::new(); |
531 | | map.insert(Default::default(), Variant(Box::new(<$v>::default()))); |
532 | | $m.append1(Variant(&map)) |
533 | | }}; |
534 | | } |
535 | | let m = append_dict_variant!(m, bool, bool); |
536 | | let m = append_dict_variant!(m, u8, u8); |
537 | | let m = append_dict_variant!(m, u16, u16); |
538 | | let m = append_dict_variant!(m, i16, i16); |
539 | | let m = append_dict_variant!(m, u32, u32); |
540 | | let m = append_dict_variant!(m, i32, i32); |
541 | | let m = append_dict_variant!(m, u64, u64); |
542 | | let m = append_dict_variant!(m, i64, i64); |
543 | | let m = append_dict_variant!(m, u8, f64); |
544 | | let m = append_dict_variant!(m, String, String); |
545 | | c.send(m).unwrap(); |
546 | | loop { |
547 | | if let Some(m) = c |
548 | | .blocking_pop_message(std::time::Duration::from_millis(1000)) |
549 | | .unwrap() |
550 | | { |
551 | | if m.msg_type() != MessageType::MethodCall { |
552 | | continue; |
553 | | } |
554 | | let mut i = m.iter_init(); |
555 | | let mut i2 = m.iter_init(); |
556 | | |
557 | | macro_rules! check_dict_variant { |
558 | | ($k:ty, $v:ty) => { |
559 | | let map: Variant<Box<dyn RefArg>> = i.read().unwrap(); |
560 | | let expected_key: $k = Default::default(); |
561 | | let expected_value: $v = Default::default(); |
562 | | let cast_map = cast::<HashMap<$k, Variant<Box<dyn RefArg>>>>(&map.0); |
563 | | assert!(cast_map.is_some(), |
564 | | "a variant containing a dict of {0} to Variant({1}) should be castable to a HashMap<{0}, Variant<Box<dyn RefArg>>>", |
565 | | std::any::type_name::<$k>(), |
566 | | std::any::type_name::<$v>() |
567 | | ); |
568 | | let cast_map_value = cast_map.unwrap().get(&expected_key).unwrap(); |
569 | | assert_eq!( |
570 | | cast::<$v>(&cast_map_value.0), |
571 | | Some(&expected_value), |
572 | | "a variant {0:?} containing a {1} should be castable to {1}", |
573 | | cast_map_value, |
574 | | std::any::type_name::<$v>() |
575 | | ); |
576 | | let refarg = i2.get_refarg().unwrap(); |
577 | | println!("refarg {:?}", refarg); |
578 | | let st_inner = refarg.as_static_inner(0).unwrap(); |
579 | | println!("st_inner {:?}", st_inner); |
580 | | i2.next(); |
581 | | assert!(cast::<HashMap<$k, Variant<Box<dyn RefArg>>>>(st_inner).is_some()); |
582 | | }; |
583 | | } |
584 | | check_dict_variant!(bool, bool); |
585 | | check_dict_variant!(u8, u8); |
586 | | check_dict_variant!(u16, u16); |
587 | | check_dict_variant!(i16, i16); |
588 | | check_dict_variant!(u32, u32); |
589 | | check_dict_variant!(i32, i32); |
590 | | check_dict_variant!(u64, u64); |
591 | | check_dict_variant!(i64, i64); |
592 | | check_dict_variant!(u8, f64); |
593 | | check_dict_variant!(String, String); |
594 | | break; |
595 | | } |
596 | | } |
597 | | } |
598 | | } |