postcard2/
lib.rs

1#![cfg_attr(not(any(test, feature = "std")), no_std)]
2#![warn(missing_docs)]
3#![cfg_attr(not(doctest), doc = include_str!("../README.md"))]
4#![cfg_attr(docsrs, feature(doc_cfg))]
5
6mod de;
7
8pub mod fixint;
9mod ser;
10// todo: keep public?
11pub mod varint;
12
13pub use de::deserializer::{Deserializer, DeserializerError};
14pub use de::flavors::{self as de_flavors, UnexpectedEnd};
15pub use de::{from_bytes, take_from_bytes};
16pub use ser::flavors::{self as ser_flavors, BufferFull};
17pub use ser::{
18    serialize_with_flavor, serialized_size,
19    serializer::{Serializer, SerializerError},
20    to_extend, to_slice,
21};
22
23#[cfg(feature = "std")]
24pub use ser::to_io;
25
26#[cfg(feature = "std")]
27pub use de::from_io;
28
29#[cfg(any(feature = "alloc", feature = "std"))]
30pub use ser::to_vec;
31
32#[cfg(test)]
33mod test {
34    #[test]
35    fn varint_boundary_canon() {
36        let x = u32::MAX;
37        let mut buf = [0u8; 5];
38        let used = crate::to_slice(&x, &mut buf).unwrap();
39        let deser: u32 = crate::from_bytes(used).unwrap();
40        assert_eq!(deser, u32::MAX);
41        assert_eq!(used, &mut [0xFF, 0xFF, 0xFF, 0xFF, 0x0F]);
42        let deser: Result<u32, crate::de::deserializer::DeserializerError<_, _>> =
43            crate::from_bytes(&[0xFF, 0xFF, 0xFF, 0xFF, 0x1F]);
44        assert_eq!(
45            deser,
46            Err(crate::de::deserializer::DeserializerError::BadVarint)
47        );
48    }
49
50    #[test]
51    fn signed_int128() {
52        let x = -19490127978232325886905073712831_i128;
53        let mut buf = [0u8; 32];
54        let used = crate::to_slice(&x, &mut buf).unwrap();
55        let deser: i128 = crate::from_bytes(used).unwrap();
56        assert_eq!(deser, x);
57    }
58}