|
| 1 | +use eyre::Result; |
| 2 | +use facet::Facet; |
| 3 | +use facet_msgpack::from_slice; |
| 4 | + |
| 5 | +#[test] |
| 6 | +fn msgpack_deserialize_more_types() -> Result<()> { |
| 7 | + facet_testhelpers::setup(); |
| 8 | + |
| 9 | + #[derive(Facet)] |
| 10 | + struct TestStructWithMoreTypes { |
| 11 | + u8_val: u8, |
| 12 | + u16_val: u16, |
| 13 | + i8_val: i8, |
| 14 | + i16_val: i16, |
| 15 | + u32_val: u32, |
| 16 | + i32_val: i32, |
| 17 | + u64_val: u64, |
| 18 | + i64_val: i64, |
| 19 | + f32_val: f32, |
| 20 | + f64_val: f64, |
| 21 | + } |
| 22 | + |
| 23 | + // MessagePack encoded data representing the struct with all the numeric values |
| 24 | + let data = [ |
| 25 | + 0x8a, // Map with 10 elements |
| 26 | + // u8_val: 255 |
| 27 | + 0xa6, 0x75, 0x38, 0x5f, 0x76, 0x61, 0x6c, // "u8_val" |
| 28 | + 0xcc, 0xff, // unsigned 8-bit int (255) |
| 29 | + // u16_val: 65535 |
| 30 | + 0xa8, 0x75, 0x31, 0x36, 0x5f, 0x76, 0x61, 0x6c, // "u16_val" |
| 31 | + 0xcd, 0xff, 0xff, // unsigned 16-bit int (65535) |
| 32 | + // i8_val: -128 |
| 33 | + 0xa7, 0x69, 0x38, 0x5f, 0x76, 0x61, 0x6c, // "i8_val" |
| 34 | + 0xd0, 0x80, // signed 8-bit int (-128) |
| 35 | + // i16_val: -32768 |
| 36 | + 0xa8, 0x69, 0x31, 0x36, 0x5f, 0x76, 0x61, 0x6c, // "i16_val" |
| 37 | + 0xd1, 0x80, 0x00, // signed 16-bit int (-32768) |
| 38 | + // u32_val: 4294967295 |
| 39 | + 0xa8, 0x75, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, // "u32_val" |
| 40 | + 0xce, 0xff, 0xff, 0xff, 0xff, // unsigned 32-bit int (4294967295) |
| 41 | + // i32_val: -2147483648 |
| 42 | + 0xa8, 0x69, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, // "i32_val" |
| 43 | + 0xd2, 0x80, 0x00, 0x00, 0x00, // signed 32-bit int (-2147483648) |
| 44 | + // u64_val: 18446744073709551615 |
| 45 | + 0xa8, 0x75, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, // "u64_val" |
| 46 | + 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, |
| 47 | + 0xff, // unsigned 64-bit int (18446744073709551615) |
| 48 | + // i64_val: -9223372036854775808 |
| 49 | + 0xa8, 0x69, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, // "i64_val" |
| 50 | + 0xd3, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 51 | + 0x00, // signed 64-bit int (-9223372036854775808) |
| 52 | + // f32_val: 3.14... |
| 53 | + 0xa8, 0x66, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, // "f32_val" |
| 54 | + 0xca, 0x40, 0x49, 0x0f, 0xdb, // float 32 (approx. PI) |
| 55 | + // f64_val: 3.14... |
| 56 | + 0xa8, 0x66, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, // "f64_val" |
| 57 | + 0xcb, 0x40, 0x09, 0x21, 0xfb, 0x54, 0x44, 0x2d, 0x18, // float 64 (more precise PI) |
| 58 | + ]; |
| 59 | + |
| 60 | + let test_struct: TestStructWithMoreTypes = from_slice(&data)?; |
| 61 | + |
| 62 | + assert_eq!(test_struct.u8_val, 255); |
| 63 | + assert_eq!(test_struct.u16_val, 65535); |
| 64 | + assert_eq!(test_struct.i8_val, -128); |
| 65 | + assert_eq!(test_struct.i16_val, -32768); |
| 66 | + assert_eq!(test_struct.u32_val, 4294967295); |
| 67 | + assert_eq!(test_struct.i32_val, -2147483648); |
| 68 | + assert_eq!(test_struct.u64_val, 18446744073709551615); |
| 69 | + assert_eq!(test_struct.i64_val, -9223372036854775808); |
| 70 | + assert!((test_struct.f32_val - std::f32::consts::PI).abs() < f32::EPSILON); |
| 71 | + assert!((test_struct.f64_val - std::f64::consts::PI).abs() < f64::EPSILON); |
| 72 | + |
| 73 | + Ok(()) |
| 74 | +} |
0 commit comments