1use crate::{signature::SignatureBuilder, BodyBuf, Signature, Storable};
2
3pub enum Variant<'de> {
5 String(&'de str),
7 U32(u32),
9 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}