ser_write_json/lib.rs
1//! A JSON (compact) serde serializer for [`ser-write`](`ser_write`) and a JSON deserializer for convenience.
2/*!
3
4[`Serializer`] types:
5
6| Serde type -> | JSON type
7|-------------------|--------------------
8| `()` | `null`
9| `Unit` struct | `null`
10| `bool` | `boolean`
11| `NewType(T)` | `T` -> `JSON`
12| `None` | `null`
13| `Some(T)` | `T` -> `JSON`
14| `u8`-`u64` | `number`
15| `i8`-`i64` | `number`
16| `f23`,`f64` | `number`
17| `str` | `string`
18| `bytes` | (configurable)
19| `array`, `tuple` | `array`
20| `seq`-like | `array`
21| `map`-like | `object`
22| `struct` | `object`
23| `unit variant` | `string`
24| `newtype variant` | `{"Name":T -> JSON}`
25| `tuple variant` | `{"Name": array}`
26| `struct variant` | `{"Name": object}`
27
28* [`Serializer`] supports serializing map keys as JSON strings from integers, chars, bools
29 and C-like enums.
30
31[`Deserializer`] types:
32
33| JSON type -> | Serde type (depending on context)
34|-------------------|----------------------------------------
35| `null` | `unit`,`none`,`NaN`
36| `boolean` | `bool`
37| `number` | `f64`,`f32`,`u8`-`u64`,`i8`-`i64`
38| `string` | `str`,`bytes` (configurable),`enum variant`
39| `array` | `array`,`tuple`,`tuple struct`,`typle variant`,`seq-like`,`struct`
40| `object` | `enum variant`,`struct variant`,`map-like`,`struct`
41| `T` | `NewType(JSON -> T)`, `Some(JSON -> T)`
42
43* [`Deserializer`] supports self-describing formats ([`deserialize_any`]).
44* [`Deserializer`] deserializes structs from both JSON objects or arrays.
45* [`Deserializer`] deserializes maps with integer, char, bool or C-like enum keys
46 from JSON object's string keys.
47
48[`Serializer`]: ser::Serializer
49[`Deserializer`]: de::Deserializer
50[`deserialize_any`]: serde::de::Deserializer::deserialize_any
51*/
52#![no_std]
53#![cfg_attr(docsrs, feature(doc_cfg))]
54
55#[cfg(feature = "std")]
56extern crate std;
57
58#[cfg(all(feature = "alloc",not(feature = "std")))]
59extern crate alloc;
60
61pub mod base64;
62pub mod ser;
63pub mod de;
64
65pub use ser_write;
66pub use ser_write::SerWrite;
67
68#[cfg(any(feature = "std", feature = "alloc"))]
69pub use ser::{
70 to_string,
71 to_string_hex_bytes,
72 to_string_base64_bytes,
73 to_string_pass_bytes
74};
75pub use ser::{
76 to_writer_with_encoder,
77 to_writer,
78 to_writer_hex_bytes,
79 to_writer_base64_bytes,
80 to_writer_pass_bytes
81};
82pub use de::{
83 from_mut_slice_with_decoder,
84 from_mut_slice,
85 from_mut_slice_hex_bytes,
86 from_mut_slice_base64_bytes
87};