tokio_dbus/
variant.rs

1use crate::{signature::SignatureBuilder, BodyBuf, Signature, Storable};
2
3/// A variant.
4pub enum Variant<'de> {
5    /// A string variant.
6    String(&'de str),
7    /// A u32 variant.
8    U32(u32),
9    /// A stored signature.
10    Signature(&'de Signature),
11}
12
13impl crate::storable::sealed::Sealed for Variant<'_> {}
14
15impl Storable for Variant<'_> {
16    #[inline]
17    fn store_to(self, buf: &mut BodyBuf) {
18        match self {
19            Variant::String(string) => {
20                buf.write_only(Signature::STRING);
21                buf.write_only(string);
22            }
23            Variant::Signature(signature) => {
24                buf.write_only(Signature::SIGNATURE);
25                buf.write_only(signature);
26            }
27            Variant::U32(number) => {
28                buf.write_only(Signature::UINT32);
29                buf.store_frame(number);
30            }
31        }
32    }
33
34    #[inline]
35    fn write_signature(builder: &mut SignatureBuilder) -> bool {
36        builder.extend_from_signature(Signature::VARIANT)
37    }
38}