aldrin_core/
unknown_variant.rs

1use crate::error::DeserializeError;
2use crate::generic_value::Enum;
3use crate::serialized_value::{SerializedValue, SerializedValueSlice};
4use crate::value_deserializer::Deserialize;
5
6#[derive(Debug, Clone, PartialEq, Eq)]
7pub struct UnknownVariant {
8    id: u32,
9    value: SerializedValue,
10}
11
12impl UnknownVariant {
13    pub fn new(id: u32, value: SerializedValue) -> Self {
14        Self { id, value }
15    }
16
17    pub fn id(&self) -> u32 {
18        self.id
19    }
20
21    pub fn value(&self) -> &SerializedValueSlice {
22        &self.value
23    }
24
25    pub fn into_value(self) -> SerializedValue {
26        self.value
27    }
28
29    pub fn deserialize<T: Deserialize>(&self) -> Result<T, DeserializeError> {
30        self.value.deserialize()
31    }
32
33    pub fn deserialize_as_value(&self) -> Result<Enum, DeserializeError> {
34        self.value
35            .deserialize_as_value()
36            .map(|value| Enum::new(self.id, value))
37    }
38}