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};