aldrin_core/
unknown_variant.rs1use 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}