zvariant Enum Value Copy item path
Summary Source pub enum Value<'a> {
Show 17 variants U8(u8 ),
Bool(bool ),
I16(i16 ),
U16(u16 ),
I32(i32 ),
U32(u32 ),
I64(i64 ),
U64(u64 ),
F64(f64 ),
Str(Str <'a>),
Signature(Signature <'a>),
ObjectPath(ObjectPath <'a>),
Value(Box <Value <'a>>),
Array(Array <'a>),
Dict(Dict <'a, 'a>),
Structure(Structure <'a>),
Fd(Fd ),
}
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};
let v = Value::new(i16::max_value());
let ctxt = EncodingContext::<byteorder::LE>::new_dbus(0 );
let encoding = to_bytes(ctxt, & v).unwrap();
let v: Value = from_slice(& encoding, ctxt).unwrap();
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};
let v = Value::new((i16::max_value(), "hello" , true ));
let ctxt = EncodingContext::<byteorder::LE>::new_dbus(0 );
let encoding = to_bytes(ctxt, & v).unwrap();
let v: Value = from_slice(& encoding, ctxt).unwrap();
let s = Structure::try_from(v).unwrap();
assert_eq! (
<(i16, Str, bool)>::try_from(s).unwrap(),
(i16::max_value(), Str::from("hello" ), true ),
);
Make a Value
for a given value.
In general, you can use Into
trait on basic types, except
when you explicitly need to wrap Value
itself, in which
case this constructor comes handy.
§ Examples
use zvariant::Value;
let s = Value::new("hello" );
let u: Value = 51 .into();
assert_ne! (s, u);
Create an owned version of self
.
Ideally, we should implement std::borrow::ToOwned
trait for Value
, but that’s
implemented generically for us through impl<T: Clone> ToOwned for T
and it’s not what we
need/want.
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 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 );
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 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 );
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 ));
Performs copy-assignment from
source
.
Read more Formats the value using the given formatter.
Read more Deserialize this value from the given Serde deserializer.
Read more Formats the value using the given formatter.
Read more Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Tests for self
and other
values to be equal, and is used by ==
.
Tests for !=
. The default implementation is almost always sufficient,
and should not be overridden without very good reason.
Serialize this value into the given Serde serializer.
Read more The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
Get the signature for the implementing type.
Read more Immutably borrows from an owned value.
Read more Mutably borrows from an owned value.
Read more 🔬 This is a nightly-only experimental API. (clone_to_uninit
)
Performs copy-assignment from
self
to
dst
.
Read more Get a deserializer compatible with this signature.
Get the signature for the implementing type.
Read more Returns the argument unchanged.
Calls U::from(self)
.
That is, this conversion is whatever the implementation of
From <T> for U
chooses to do.
The resulting type after obtaining ownership.
Creates owned data from borrowed data, usually by cloning.
Read more Uses borrowed data to replace owned data, usually by cloning.
Read more Converts the given value to a
String
.
Read more The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.