Enum zvariant::Value [−][src]
pub enum Value<'a> {
}
Expand description
A generic container, in the form of an enum that holds exactly one value of any of the other types.
Note that this type corresponds to the VARIANT
data type defined by the D-Bus specification
and as such, its encoding is not the same as that of the enclosed value.
Examples
use std::convert::TryFrom;
use zvariant::{from_slice, to_bytes, EncodingContext, Value};
// Create a Value from an i16
let v = Value::new(i16::max_value());
// Encode it
let ctxt = EncodingContext::<byteorder::LE>::new_dbus(0);
let encoding = to_bytes(ctxt, &v).unwrap();
// Decode it back
let v: Value = from_slice(&encoding, ctxt).unwrap();
// Check everything is as expected
assert_eq!(i16::try_from(&v).unwrap(), i16::max_value());
Now let’s try a more complicated example:
use std::convert::TryFrom;
use zvariant::{from_slice, to_bytes, EncodingContext};
use zvariant::{Structure, Value, Str};
// Create a Value from a tuple this time
let v = Value::new((i16::max_value(), "hello", true));
// Same drill as previous example
let ctxt = EncodingContext::<byteorder::LE>::new_dbus(0);
let encoding = to_bytes(ctxt, &v).unwrap();
let v: Value = from_slice(&encoding, ctxt).unwrap();
// Check everything is as expected
let s = Structure::try_from(v).unwrap();
assert_eq!(
<(i16, Str, bool)>::try_from(s).unwrap(),
(i16::max_value(), Str::from("hello"), true),
);
Variants
U8(u8)
Tuple Fields of U8
0: u8
Bool(bool)
Tuple Fields of Bool
0: bool
I16(i16)
Tuple Fields of I16
0: i16
U16(u16)
Tuple Fields of U16
0: u16
I32(i32)
Tuple Fields of I32
0: i32
U32(u32)
Tuple Fields of U32
0: u32
I64(i64)
Tuple Fields of I64
0: i64
U64(u64)
Tuple Fields of U64
0: u64
F64(f64)
Tuple Fields of F64
0: f64
Str(Str<'a>)
Tuple Fields of Str
0: Str<'a>
Signature(Signature<'a>)
Tuple Fields of Signature
0: Signature<'a>
ObjectPath(ObjectPath<'a>)
Tuple Fields of ObjectPath
0: ObjectPath<'a>
Array(Array<'a>)
Tuple Fields of Array
0: Array<'a>
Dict(Dict<'a, 'a>)
Tuple Fields of Dict
0: Dict<'a, 'a>
Structure(Structure<'a>)
Tuple Fields of Structure
0: Structure<'a>
Maybe(Maybe<'a>)
Tuple Fields of Maybe
0: Maybe<'a>
Fd(Fd)
Tuple Fields of Fd
0: Fd
Implementations
Get the signature of the enclosed value.
Try to get the underlying type T
.
Note that TryFrom<Value>
is implemented for various types, and it’s usually best to use
that instead. However, in generic code where you also want to unwrap Value::Value
,
you should use this function (because TryFrom<Value>
can not be implemented for Value
itself as From<Value>
is implicitly implemented for Value
).
Examples
use std::convert::TryFrom;
use zvariant::{Result, Value};
fn value_vec_to_type_vec<'a, T>(values: Vec<Value<'a>>) -> Result<Vec<T>>
where
T: TryFrom<Value<'a>>,
{
let mut res = vec![];
for value in values.into_iter() {
res.push(value.downcast().unwrap());
}
Ok(res)
}
// Let's try u32 values first
let v = vec![Value::U32(42), Value::U32(43)];
let v = value_vec_to_type_vec::<u32>(v).unwrap();
assert_eq!(v[0], 42);
assert_eq!(v[1], 43);
// Now try Value values
let v = vec![Value::new(Value::U32(42)), Value::new(Value::U32(43))];
let v = value_vec_to_type_vec::<Value>(v).unwrap();
assert_eq!(v[0], Value::U32(42));
assert_eq!(v[1], Value::U32(43));
Try to get a reference to the underlying type T
.
Same as downcast
except it doesn’t consume self
and get a reference to the underlying
value.
Examples
use std::convert::TryFrom;
use zvariant::{Result, Value};
fn value_vec_to_type_vec<'a, T>(values: &'a Vec<Value<'a>>) -> Result<Vec<&'a T>>
where
&'a T: TryFrom<&'a Value<'a>>,
{
let mut res = vec![];
for value in values.into_iter() {
res.push(value.downcast_ref().unwrap());
}
Ok(res)
}
// Let's try u32 values first
let v = vec![Value::U32(42), Value::U32(43)];
let v = value_vec_to_type_vec::<u32>(&v).unwrap();
assert_eq!(*v[0], 42);
assert_eq!(*v[1], 43);
// Now try Value values
let v = vec![Value::new(Value::U32(42)), Value::new(Value::U32(43))];
let v = value_vec_to_type_vec::<Value>(&v).unwrap();
assert_eq!(*v[0], Value::U32(42));
assert_eq!(*v[1], Value::U32(43));
Trait Implementations
Deserialize this value from the given Serde deserializer. Read more
Performs the conversion.
Performs the conversion.
Performs the conversion.
Performs the conversion.
Performs the conversion.
impl<'a, E, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> TryFrom<Value<'a>> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) where
T0: TryFrom<Value<'a>, Error = E>,
T1: TryFrom<Value<'a>, Error = E>,
T2: TryFrom<Value<'a>, Error = E>,
T3: TryFrom<Value<'a>, Error = E>,
T4: TryFrom<Value<'a>, Error = E>,
T5: TryFrom<Value<'a>, Error = E>,
T6: TryFrom<Value<'a>, Error = E>,
T7: TryFrom<Value<'a>, Error = E>,
T8: TryFrom<Value<'a>, Error = E>,
T9: TryFrom<Value<'a>, Error = E>,
T10: TryFrom<Value<'a>, Error = E>,
Error: From<E>,
impl<'a, E, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> TryFrom<Value<'a>> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) where
T0: TryFrom<Value<'a>, Error = E>,
T1: TryFrom<Value<'a>, Error = E>,
T2: TryFrom<Value<'a>, Error = E>,
T3: TryFrom<Value<'a>, Error = E>,
T4: TryFrom<Value<'a>, Error = E>,
T5: TryFrom<Value<'a>, Error = E>,
T6: TryFrom<Value<'a>, Error = E>,
T7: TryFrom<Value<'a>, Error = E>,
T8: TryFrom<Value<'a>, Error = E>,
T9: TryFrom<Value<'a>, Error = E>,
T10: TryFrom<Value<'a>, Error = E>,
Error: From<E>,
impl<'a, E, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> TryFrom<Value<'a>> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) where
T0: TryFrom<Value<'a>, Error = E>,
T1: TryFrom<Value<'a>, Error = E>,
T2: TryFrom<Value<'a>, Error = E>,
T3: TryFrom<Value<'a>, Error = E>,
T4: TryFrom<Value<'a>, Error = E>,
T5: TryFrom<Value<'a>, Error = E>,
T6: TryFrom<Value<'a>, Error = E>,
T7: TryFrom<Value<'a>, Error = E>,
T8: TryFrom<Value<'a>, Error = E>,
T9: TryFrom<Value<'a>, Error = E>,
T10: TryFrom<Value<'a>, Error = E>,
T11: TryFrom<Value<'a>, Error = E>,
Error: From<E>,
impl<'a, E, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> TryFrom<Value<'a>> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) where
T0: TryFrom<Value<'a>, Error = E>,
T1: TryFrom<Value<'a>, Error = E>,
T2: TryFrom<Value<'a>, Error = E>,
T3: TryFrom<Value<'a>, Error = E>,
T4: TryFrom<Value<'a>, Error = E>,
T5: TryFrom<Value<'a>, Error = E>,
T6: TryFrom<Value<'a>, Error = E>,
T7: TryFrom<Value<'a>, Error = E>,
T8: TryFrom<Value<'a>, Error = E>,
T9: TryFrom<Value<'a>, Error = E>,
T10: TryFrom<Value<'a>, Error = E>,
T11: TryFrom<Value<'a>, Error = E>,
Error: From<E>,
impl<'a, E, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> TryFrom<Value<'a>> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) where
T0: TryFrom<Value<'a>, Error = E>,
T1: TryFrom<Value<'a>, Error = E>,
T2: TryFrom<Value<'a>, Error = E>,
T3: TryFrom<Value<'a>, Error = E>,
T4: TryFrom<Value<'a>, Error = E>,
T5: TryFrom<Value<'a>, Error = E>,
T6: TryFrom<Value<'a>, Error = E>,
T7: TryFrom<Value<'a>, Error = E>,
T8: TryFrom<Value<'a>, Error = E>,
T9: TryFrom<Value<'a>, Error = E>,
T10: TryFrom<Value<'a>, Error = E>,
T11: TryFrom<Value<'a>, Error = E>,
T12: TryFrom<Value<'a>, Error = E>,
Error: From<E>,
impl<'a, E, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> TryFrom<Value<'a>> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) where
T0: TryFrom<Value<'a>, Error = E>,
T1: TryFrom<Value<'a>, Error = E>,
T2: TryFrom<Value<'a>, Error = E>,
T3: TryFrom<Value<'a>, Error = E>,
T4: TryFrom<Value<'a>, Error = E>,
T5: TryFrom<Value<'a>, Error = E>,
T6: TryFrom<Value<'a>, Error = E>,
T7: TryFrom<Value<'a>, Error = E>,
T8: TryFrom<Value<'a>, Error = E>,
T9: TryFrom<Value<'a>, Error = E>,
T10: TryFrom<Value<'a>, Error = E>,
T11: TryFrom<Value<'a>, Error = E>,
T12: TryFrom<Value<'a>, Error = E>,
Error: From<E>,
impl<'a, E, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> TryFrom<Value<'a>> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) where
T0: TryFrom<Value<'a>, Error = E>,
T1: TryFrom<Value<'a>, Error = E>,
T2: TryFrom<Value<'a>, Error = E>,
T3: TryFrom<Value<'a>, Error = E>,
T4: TryFrom<Value<'a>, Error = E>,
T5: TryFrom<Value<'a>, Error = E>,
T6: TryFrom<Value<'a>, Error = E>,
T7: TryFrom<Value<'a>, Error = E>,
T8: TryFrom<Value<'a>, Error = E>,
T9: TryFrom<Value<'a>, Error = E>,
T10: TryFrom<Value<'a>, Error = E>,
T11: TryFrom<Value<'a>, Error = E>,
T12: TryFrom<Value<'a>, Error = E>,
T13: TryFrom<Value<'a>, Error = E>,
Error: From<E>,
impl<'a, E, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> TryFrom<Value<'a>> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) where
T0: TryFrom<Value<'a>, Error = E>,
T1: TryFrom<Value<'a>, Error = E>,
T2: TryFrom<Value<'a>, Error = E>,
T3: TryFrom<Value<'a>, Error = E>,
T4: TryFrom<Value<'a>, Error = E>,
T5: TryFrom<Value<'a>, Error = E>,
T6: TryFrom<Value<'a>, Error = E>,
T7: TryFrom<Value<'a>, Error = E>,
T8: TryFrom<Value<'a>, Error = E>,
T9: TryFrom<Value<'a>, Error = E>,
T10: TryFrom<Value<'a>, Error = E>,
T11: TryFrom<Value<'a>, Error = E>,
T12: TryFrom<Value<'a>, Error = E>,
T13: TryFrom<Value<'a>, Error = E>,
Error: From<E>,
impl<'a, E, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> TryFrom<Value<'a>> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) where
T0: TryFrom<Value<'a>, Error = E>,
T1: TryFrom<Value<'a>, Error = E>,
T2: TryFrom<Value<'a>, Error = E>,
T3: TryFrom<Value<'a>, Error = E>,
T4: TryFrom<Value<'a>, Error = E>,
T5: TryFrom<Value<'a>, Error = E>,
T6: TryFrom<Value<'a>, Error = E>,
T7: TryFrom<Value<'a>, Error = E>,
T8: TryFrom<Value<'a>, Error = E>,
T9: TryFrom<Value<'a>, Error = E>,
T10: TryFrom<Value<'a>, Error = E>,
T11: TryFrom<Value<'a>, Error = E>,
T12: TryFrom<Value<'a>, Error = E>,
T13: TryFrom<Value<'a>, Error = E>,
T14: TryFrom<Value<'a>, Error = E>,
Error: From<E>,
impl<'a, E, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> TryFrom<Value<'a>> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) where
T0: TryFrom<Value<'a>, Error = E>,
T1: TryFrom<Value<'a>, Error = E>,
T2: TryFrom<Value<'a>, Error = E>,
T3: TryFrom<Value<'a>, Error = E>,
T4: TryFrom<Value<'a>, Error = E>,
T5: TryFrom<Value<'a>, Error = E>,
T6: TryFrom<Value<'a>, Error = E>,
T7: TryFrom<Value<'a>, Error = E>,
T8: TryFrom<Value<'a>, Error = E>,
T9: TryFrom<Value<'a>, Error = E>,
T10: TryFrom<Value<'a>, Error = E>,
T11: TryFrom<Value<'a>, Error = E>,
T12: TryFrom<Value<'a>, Error = E>,
T13: TryFrom<Value<'a>, Error = E>,
T14: TryFrom<Value<'a>, Error = E>,
Error: From<E>,
impl<'a, E, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> TryFrom<Value<'a>> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) where
T0: TryFrom<Value<'a>, Error = E>,
T1: TryFrom<Value<'a>, Error = E>,
T2: TryFrom<Value<'a>, Error = E>,
T3: TryFrom<Value<'a>, Error = E>,
T4: TryFrom<Value<'a>, Error = E>,
T5: TryFrom<Value<'a>, Error = E>,
T6: TryFrom<Value<'a>, Error = E>,
T7: TryFrom<Value<'a>, Error = E>,
T8: TryFrom<Value<'a>, Error = E>,
T9: TryFrom<Value<'a>, Error = E>,
T10: TryFrom<Value<'a>, Error = E>,
T11: TryFrom<Value<'a>, Error = E>,
T12: TryFrom<Value<'a>, Error = E>,
T13: TryFrom<Value<'a>, Error = E>,
T14: TryFrom<Value<'a>, Error = E>,
T15: TryFrom<Value<'a>, Error = E>,
Error: From<E>,
impl<'a, E, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> TryFrom<Value<'a>> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) where
T0: TryFrom<Value<'a>, Error = E>,
T1: TryFrom<Value<'a>, Error = E>,
T2: TryFrom<Value<'a>, Error = E>,
T3: TryFrom<Value<'a>, Error = E>,
T4: TryFrom<Value<'a>, Error = E>,
T5: TryFrom<Value<'a>, Error = E>,
T6: TryFrom<Value<'a>, Error = E>,
T7: TryFrom<Value<'a>, Error = E>,
T8: TryFrom<Value<'a>, Error = E>,
T9: TryFrom<Value<'a>, Error = E>,
T10: TryFrom<Value<'a>, Error = E>,
T11: TryFrom<Value<'a>, Error = E>,
T12: TryFrom<Value<'a>, Error = E>,
T13: TryFrom<Value<'a>, Error = E>,
T14: TryFrom<Value<'a>, Error = E>,
T15: TryFrom<Value<'a>, Error = E>,
Error: From<E>,
impl<'a, E, T0, T1, T2, T3, T4, T5> TryFrom<Value<'a>> for (T0, T1, T2, T3, T4, T5) where
T0: TryFrom<Value<'a>, Error = E>,
T1: TryFrom<Value<'a>, Error = E>,
T2: TryFrom<Value<'a>, Error = E>,
T3: TryFrom<Value<'a>, Error = E>,
T4: TryFrom<Value<'a>, Error = E>,
T5: TryFrom<Value<'a>, Error = E>,
Error: From<E>,
impl<'a, E, T0, T1, T2, T3, T4, T5> TryFrom<Value<'a>> for (T0, T1, T2, T3, T4, T5) where
T0: TryFrom<Value<'a>, Error = E>,
T1: TryFrom<Value<'a>, Error = E>,
T2: TryFrom<Value<'a>, Error = E>,
T3: TryFrom<Value<'a>, Error = E>,
T4: TryFrom<Value<'a>, Error = E>,
T5: TryFrom<Value<'a>, Error = E>,
Error: From<E>,
impl<'a, E, T0, T1, T2, T3, T4, T5, T6> TryFrom<Value<'a>> for (T0, T1, T2, T3, T4, T5, T6) where
T0: TryFrom<Value<'a>, Error = E>,
T1: TryFrom<Value<'a>, Error = E>,
T2: TryFrom<Value<'a>, Error = E>,
T3: TryFrom<Value<'a>, Error = E>,
T4: TryFrom<Value<'a>, Error = E>,
T5: TryFrom<Value<'a>, Error = E>,
T6: TryFrom<Value<'a>, Error = E>,
Error: From<E>,
impl<'a, E, T0, T1, T2, T3, T4, T5, T6> TryFrom<Value<'a>> for (T0, T1, T2, T3, T4, T5, T6) where
T0: TryFrom<Value<'a>, Error = E>,
T1: TryFrom<Value<'a>, Error = E>,
T2: TryFrom<Value<'a>, Error = E>,
T3: TryFrom<Value<'a>, Error = E>,
T4: TryFrom<Value<'a>, Error = E>,
T5: TryFrom<Value<'a>, Error = E>,
T6: TryFrom<Value<'a>, Error = E>,
Error: From<E>,
impl<'a, E, T0, T1, T2, T3, T4, T5, T6, T7> TryFrom<Value<'a>> for (T0, T1, T2, T3, T4, T5, T6, T7) where
T0: TryFrom<Value<'a>, Error = E>,
T1: TryFrom<Value<'a>, Error = E>,
T2: TryFrom<Value<'a>, Error = E>,
T3: TryFrom<Value<'a>, Error = E>,
T4: TryFrom<Value<'a>, Error = E>,
T5: TryFrom<Value<'a>, Error = E>,
T6: TryFrom<Value<'a>, Error = E>,
T7: TryFrom<Value<'a>, Error = E>,
Error: From<E>,
impl<'a, E, T0, T1, T2, T3, T4, T5, T6, T7> TryFrom<Value<'a>> for (T0, T1, T2, T3, T4, T5, T6, T7) where
T0: TryFrom<Value<'a>, Error = E>,
T1: TryFrom<Value<'a>, Error = E>,
T2: TryFrom<Value<'a>, Error = E>,
T3: TryFrom<Value<'a>, Error = E>,
T4: TryFrom<Value<'a>, Error = E>,
T5: TryFrom<Value<'a>, Error = E>,
T6: TryFrom<Value<'a>, Error = E>,
T7: TryFrom<Value<'a>, Error = E>,
Error: From<E>,
impl<'a, E, T0, T1, T2, T3, T4, T5, T6, T7, T8> TryFrom<Value<'a>> for (T0, T1, T2, T3, T4, T5, T6, T7, T8) where
T0: TryFrom<Value<'a>, Error = E>,
T1: TryFrom<Value<'a>, Error = E>,
T2: TryFrom<Value<'a>, Error = E>,
T3: TryFrom<Value<'a>, Error = E>,
T4: TryFrom<Value<'a>, Error = E>,
T5: TryFrom<Value<'a>, Error = E>,
T6: TryFrom<Value<'a>, Error = E>,
T7: TryFrom<Value<'a>, Error = E>,
T8: TryFrom<Value<'a>, Error = E>,
Error: From<E>,
impl<'a, E, T0, T1, T2, T3, T4, T5, T6, T7, T8> TryFrom<Value<'a>> for (T0, T1, T2, T3, T4, T5, T6, T7, T8) where
T0: TryFrom<Value<'a>, Error = E>,
T1: TryFrom<Value<'a>, Error = E>,
T2: TryFrom<Value<'a>, Error = E>,
T3: TryFrom<Value<'a>, Error = E>,
T4: TryFrom<Value<'a>, Error = E>,
T5: TryFrom<Value<'a>, Error = E>,
T6: TryFrom<Value<'a>, Error = E>,
T7: TryFrom<Value<'a>, Error = E>,
T8: TryFrom<Value<'a>, Error = E>,
Error: From<E>,
impl<'a, E, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> TryFrom<Value<'a>> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9) where
T0: TryFrom<Value<'a>, Error = E>,
T1: TryFrom<Value<'a>, Error = E>,
T2: TryFrom<Value<'a>, Error = E>,
T3: TryFrom<Value<'a>, Error = E>,
T4: TryFrom<Value<'a>, Error = E>,
T5: TryFrom<Value<'a>, Error = E>,
T6: TryFrom<Value<'a>, Error = E>,
T7: TryFrom<Value<'a>, Error = E>,
T8: TryFrom<Value<'a>, Error = E>,
T9: TryFrom<Value<'a>, Error = E>,
Error: From<E>,
impl<'a, E, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> TryFrom<Value<'a>> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9) where
T0: TryFrom<Value<'a>, Error = E>,
T1: TryFrom<Value<'a>, Error = E>,
T2: TryFrom<Value<'a>, Error = E>,
T3: TryFrom<Value<'a>, Error = E>,
T4: TryFrom<Value<'a>, Error = E>,
T5: TryFrom<Value<'a>, Error = E>,
T6: TryFrom<Value<'a>, Error = E>,
T7: TryFrom<Value<'a>, Error = E>,
T8: TryFrom<Value<'a>, Error = E>,
T9: TryFrom<Value<'a>, Error = E>,
Error: From<E>,
Auto Trait Implementations
impl<'a> RefUnwindSafe for Value<'a>
impl<'a> UnwindSafe for Value<'a>
Blanket Implementations
Mutably borrows from an owned value. Read more