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