1use crate::Value;
2
3use bincode::enc::Encode;
4use bincode::enc::Encoder;
5use bincode::error::EncodeError;
6
7impl Encode for Value {
8 fn encode<E: Encoder>(&self, encoder: &mut E) -> Result<(), EncodeError> {
9 let discriminant = self.discriminant() as u8;
10 discriminant.encode(encoder)?;
11 match self {
12 Value::U8(v) => v.to_owned().encode(encoder),
13 Value::U16(v) => v.to_owned().encode(encoder),
14 Value::U32(v) => v.to_owned().encode(encoder),
15 Value::U64(v) => v.to_owned().encode(encoder),
16 Value::I8(v) => v.to_owned().encode(encoder),
17 Value::I16(v) => v.to_owned().encode(encoder),
18 Value::I32(v) => v.to_owned().encode(encoder),
19 Value::I64(v) => v.to_owned().encode(encoder),
20 Value::F32(v) => v.to_owned().encode(encoder),
21 Value::F64(v) => v.to_owned().encode(encoder),
22 Value::Bool(v) => v.to_owned().encode(encoder),
23 Value::Char(v) => v.to_owned().encode(encoder),
24 Value::String(v) => v.to_owned().encode(encoder),
25 Value::Bytes(v) => v.to_owned().encode(encoder),
26 Value::Unit => ().encode(encoder),
27 Value::Seq(v) => v.to_owned().encode(encoder),
28 Value::Map(v) => v.to_owned().encode(encoder),
29 Value::Option(v) => v.to_owned().encode(encoder),
30 Value::CuTime(v) => v.to_owned().encode(encoder),
31 Value::Newtype(v) => v.to_owned().encode(encoder),
32 }
33 }
34}