aldrin_core/
unknown_variant.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
use crate::error::DeserializeError;
use crate::generic_value::Enum;
use crate::serialized_value::{SerializedValue, SerializedValueSlice};
use crate::value_deserializer::Deserialize;

#[derive(Debug, Clone, PartialEq, Eq)]
pub struct UnknownVariant {
    id: u32,
    value: SerializedValue,
}

impl UnknownVariant {
    pub fn new(id: u32, value: SerializedValue) -> Self {
        Self { id, value }
    }

    pub fn id(&self) -> u32 {
        self.id
    }

    pub fn value(&self) -> &SerializedValueSlice {
        &self.value
    }

    pub fn into_value(self) -> SerializedValue {
        self.value
    }

    pub fn deserialize<T: Deserialize>(&self) -> Result<T, DeserializeError> {
        self.value.deserialize()
    }

    pub fn deserialize_as_value(&self) -> Result<Enum, DeserializeError> {
        self.value
            .deserialize_as_value()
            .map(|value| Enum::new(self.id, value))
    }
}