|
@@ -373,6 +373,7 @@ mod test {
|
|
|
Signature,
|
|
|
EnvelopedKey
|
|
|
};
|
|
|
+ use serde::Serialize;
|
|
|
|
|
|
#[test]
|
|
|
fn serialize_bool() -> Result<()> {
|
|
@@ -533,4 +534,108 @@ mod test {
|
|
|
assert_eq!(vec![10, 0, 0, 0, 118, 97, 112, 105, 100, 32, 240, 159, 152, 145], buffer);
|
|
|
Ok(())
|
|
|
}
|
|
|
+
|
|
|
+ #[test]
|
|
|
+ fn serialize_none() -> Result<()> {
|
|
|
+ let none: Option<i32> = Option::None;
|
|
|
+ let buffer = super::to_vec(&none)?;
|
|
|
+ assert_eq!(vec![0], buffer);
|
|
|
+ Ok(())
|
|
|
+ }
|
|
|
+
|
|
|
+ #[test]
|
|
|
+ fn serialize_some() -> Result<()> {
|
|
|
+ // Sometimes I use decimal sometimes I use hex. So what, what to fight about it?
|
|
|
+ let some: Option<i32> = Option::Some(0x02D8);
|
|
|
+ let buffer = super::to_vec(&some)?;
|
|
|
+ assert_eq!(vec![0xD8, 0x02, 0x00, 0x00], buffer);
|
|
|
+ Ok(())
|
|
|
+ }
|
|
|
+
|
|
|
+ #[test]
|
|
|
+ fn serialize_unit() -> Result<()> {
|
|
|
+ let buffer = super::to_vec(&())?;
|
|
|
+ let expected: Vec<u8> = Vec::new();
|
|
|
+ assert_eq!(expected, buffer);
|
|
|
+ Ok(())
|
|
|
+ }
|
|
|
+
|
|
|
+ #[test]
|
|
|
+ fn serialize_unit_struct() -> Result<()> {
|
|
|
+ #[derive(Serialize)]
|
|
|
+ struct UnitStruct;
|
|
|
+
|
|
|
+ let test = UnitStruct {};
|
|
|
+ let buffer = super::to_vec(&test)?;
|
|
|
+ let expected: Vec<u8> = Vec::new();
|
|
|
+ assert_eq!(expected, buffer);
|
|
|
+ Ok(())
|
|
|
+ }
|
|
|
+
|
|
|
+ #[test]
|
|
|
+ fn serialize_unit_struct_variant() -> Result<()> {
|
|
|
+ #[derive(Serialize)]
|
|
|
+ enum UnitStructVariant {
|
|
|
+ Zeroth {},
|
|
|
+ First {},
|
|
|
+ Second {},
|
|
|
+ Third {}
|
|
|
+ }
|
|
|
+ let test = UnitStructVariant::Second {};
|
|
|
+ let buffer = super::to_vec(&test)?;
|
|
|
+ assert_eq!(vec![2, 0, 0, 0], buffer);
|
|
|
+ Ok(())
|
|
|
+ }
|
|
|
+
|
|
|
+ #[test]
|
|
|
+ fn serialize_newtype_struct() -> Result<()> {
|
|
|
+ #[derive(Serialize)]
|
|
|
+ struct Score(u16);
|
|
|
+ let score = Score(512);
|
|
|
+ let buffer = super::to_vec(&score)?;
|
|
|
+ assert_eq!(vec![0x00, 0x02], buffer);
|
|
|
+ Ok(())
|
|
|
+ }
|
|
|
+
|
|
|
+ #[test]
|
|
|
+ fn serialize_newtype_variant() -> Result<()> {
|
|
|
+ #[derive(Serialize)]
|
|
|
+ enum Currency {
|
|
|
+ Usd(i32),
|
|
|
+ Btc(i32),
|
|
|
+ Fil(i32),
|
|
|
+ Eth(i32)
|
|
|
+ }
|
|
|
+ let value = Currency::Fil(1024);
|
|
|
+ let buffer = super::to_vec(&value)?;
|
|
|
+ let expected = vec![
|
|
|
+ 0x02, 0x00, 0x00, 0x00, // The variant index.
|
|
|
+ 0x00, 0x04, 0x00, 0x00 // The value contained within.
|
|
|
+ ];
|
|
|
+ assert_eq!(expected, buffer);
|
|
|
+ Ok(())
|
|
|
+ }
|
|
|
+
|
|
|
+ #[test]
|
|
|
+ fn serialize_tuple() -> Result<()> {
|
|
|
+ let value = (5u16, -1i8);
|
|
|
+ let buffer = super::to_vec(&value)?;
|
|
|
+ assert_eq!(vec![0x05, 0x00, 0xFF], buffer);
|
|
|
+ Ok(())
|
|
|
+ }
|
|
|
+
|
|
|
+ #[test]
|
|
|
+ fn serialize_tuple_struct() -> Result<()> {
|
|
|
+ #[derive(Serialize)]
|
|
|
+ struct Contrived(i8, String);
|
|
|
+ let value = Contrived(-2, "-2".to_string());
|
|
|
+ let buffer = super::to_vec(&value)?;
|
|
|
+ let expected = vec![
|
|
|
+ 0xFE, // The value -2.
|
|
|
+ 0x02, 0x00, 0x00, 0x00, // The length of the string.
|
|
|
+ 0x2D, 0x32 // The characters '-' and '2'.
|
|
|
+ ];
|
|
|
+ assert_eq!(expected, buffer);
|
|
|
+ Ok(())
|
|
|
+ }
|
|
|
}
|