1use crate::Value;
2use bincode::BorrowDecode;
3use std::collections::BTreeMap;
4
5use bincode::de::Decoder;
6use bincode::de::{BorrowDecoder, Decode};
7use bincode::error::DecodeError;
8use cu29_clock::CuTime;
9
10impl<Context> Decode<Context> for Value {
12 fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> {
13 match u8::decode(decoder)? {
14 0 => Ok(Value::Bool(bool::decode(decoder)?)),
15 1 => Ok(Value::U8(u8::decode(decoder)?)),
16 2 => Ok(Value::U16(u16::decode(decoder)?)),
17 3 => Ok(Value::U32(u32::decode(decoder)?)),
18 4 => Ok(Value::U64(u64::decode(decoder)?)),
19 5 => Ok(Value::I8(i8::decode(decoder)?)),
20 6 => Ok(Value::I16(i16::decode(decoder)?)),
21 7 => Ok(Value::I32(i32::decode(decoder)?)),
22 8 => Ok(Value::I64(i64::decode(decoder)?)),
23 9 => Ok(Value::F32(f32::decode(decoder)?)),
24 10 => Ok(Value::F64(f64::decode(decoder)?)),
25 11 => Ok(Value::Char(char::decode(decoder)?)),
26 12 => Ok(Value::String(String::decode(decoder)?)),
27 13 => Ok(Value::Unit),
28 14 => Ok(Value::Option(Option::<Box<Value>>::decode(decoder)?)),
29 15 => Ok(Value::Newtype(Box::<Value>::decode(decoder)?)),
30 16 => Ok(Value::Seq(Vec::<Value>::decode(decoder)?)),
31 17 => Ok(Value::Map(BTreeMap::<Value, Value>::decode(decoder)?)),
32 18 => Ok(Value::Bytes(Vec::<u8>::decode(decoder)?)),
33 32 => Ok(Value::CuTime(CuTime::decode(decoder)?)),
34 r => Err(DecodeError::OtherString(format!(
35 "Unknown Value variant: {}",
36 r
37 ))),
38 }
39 }
40}
41
42impl<'de, Context> BorrowDecode<'de, Context> for Value {
43 fn borrow_decode<D: BorrowDecoder<'de>>(decoder: &mut D) -> Result<Self, DecodeError> {
44 match u8::borrow_decode(decoder)? {
45 0 => Ok(Value::U8(u8::borrow_decode(decoder)?)),
46 1 => Ok(Value::U16(u16::borrow_decode(decoder)?)),
47 2 => Ok(Value::U32(u32::borrow_decode(decoder)?)),
48 3 => Ok(Value::U64(u64::borrow_decode(decoder)?)),
49 4 => Ok(Value::I8(i8::borrow_decode(decoder)?)),
50 5 => Ok(Value::I16(i16::borrow_decode(decoder)?)),
51 6 => Ok(Value::I32(i32::borrow_decode(decoder)?)),
52 7 => Ok(Value::I64(i64::borrow_decode(decoder)?)),
53 8 => Ok(Value::F32(f32::borrow_decode(decoder)?)),
54 9 => Ok(Value::F64(f64::borrow_decode(decoder)?)),
55 10 => Ok(Value::Bool(bool::borrow_decode(decoder)?)),
56 11 => Ok(Value::Char(char::borrow_decode(decoder)?)),
57 12 => Ok(Value::String(String::borrow_decode(decoder)?)),
58 13 => Ok(Value::Bytes(Vec::<u8>::borrow_decode(decoder)?)),
59 14 => Ok(Value::Unit),
60 15 => Ok(Value::Seq(Vec::<Value>::borrow_decode(decoder)?)),
61 16 => Ok(Value::Map(BTreeMap::<Value, Value>::borrow_decode(
62 decoder,
63 )?)),
64 17 => Ok(Value::Option(Option::<Box<Value>>::borrow_decode(decoder)?)),
65 18 => Ok(Value::Newtype(Box::<Value>::borrow_decode(decoder)?)),
66 r => Err(DecodeError::OtherString(format!(
67 "Unknown Value variant: {}",
68 r
69 ))),
70 }
71 }
72}