zvariant/
serialize_value.rs
1use serde::ser::{Serialize, SerializeStruct, Serializer};
2use static_assertions::assert_impl_all;
3
4use crate::{Signature, Type, Value};
5
6pub struct SerializeValue<'a, T: Type + Serialize>(pub &'a T);
20
21assert_impl_all!(SerializeValue<'_, i32>: Send, Sync, Unpin);
22
23impl<'a, T: Type + Serialize> Serialize for SerializeValue<'a, T> {
24 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
25 where
26 S: Serializer,
27 {
28 let mut structure = serializer.serialize_struct("zvariant::Value", 2)?;
30
31 let signature = T::signature();
32 structure.serialize_field("zvariant::Value::Signature", &signature)?;
33 structure.serialize_field("zvariant::Value::Value", self.0)?;
34
35 structure.end()
36 }
37}
38
39impl<'a, T: Type + Serialize> Type for SerializeValue<'a, T> {
40 fn signature() -> Signature<'static> {
41 Value::signature()
42 }
43}