serdect/lib.rs
1#![no_std]
2#![cfg_attr(docsrs, feature(doc_cfg))]
3#![doc = include_str!("../README.md")]
4#![doc(
5 html_logo_url = "https://raw.githubusercontent.com/RustCrypto/media/6ee8e381/logo.svg",
6 html_favicon_url = "https://raw.githubusercontent.com/RustCrypto/media/6ee8e381/logo.svg"
7)]
8#![forbid(unsafe_code)]
9#![warn(
10 clippy::mod_module_files,
11 clippy::unwrap_used,
12 missing_docs,
13 rust_2018_idioms,
14 unused_lifetimes,
15 unused_qualifications
16)]
17
18//! ## Usage
19//!
20//! ### Implementing `Deserialize` and `Serialize` for arrays.
21//!
22#![cfg_attr(feature = "alloc", doc = " ```")]
23#![cfg_attr(not(feature = "alloc"), doc = " ```ignore")]
24//! # use serde::{Deserialize, Deserializer, Serialize, Serializer};
25//! #
26//! # #[derive(Debug, PartialEq)]
27//! struct SecretData([u8; 32]);
28//!
29//! impl<'de> Deserialize<'de> for SecretData {
30//! fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
31//! where
32//! D: Deserializer<'de>,
33//! {
34//! let mut buffer = [0; 32];
35//! serdect::array::deserialize_hex_or_bin(&mut buffer, deserializer)?;
36//! Ok(Self(buffer))
37//! }
38//! }
39//!
40//! impl Serialize for SecretData {
41//! fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
42//! where
43//! S: Serializer,
44//! {
45//! serdect::array::serialize_hex_lower_or_bin(&self.0, serializer)
46//! }
47//! }
48//!
49//! let data = SecretData([42; 32]);
50//!
51//! // postcard: an embedded-friendly binary serialization format
52//! let serialized = postcard::to_stdvec(&data).unwrap();
53//! let deserialized: SecretData = postcard::from_bytes(&serialized).unwrap();
54//! assert_eq!(deserialized, data);
55//!
56//! let serialized = serde_json::to_string(&data).unwrap();
57//! // JSON, a human-readable serialization format, is serialized into lower-case HEX.
58//! assert_eq!(
59//! serialized,
60//! "\"2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a\""
61//! );
62//! # let deserialized: SecretData = serde_json::from_str(&serialized).unwrap();
63//! # assert_eq!(deserialized, data);
64//! ```
65//!
66//! ### Implementing `Deserialize` and `Serialize` for slices.
67//!
68#![cfg_attr(feature = "alloc", doc = " ```")]
69#![cfg_attr(not(feature = "alloc"), doc = " ```ignore")]
70//! # use serde::{Deserialize, Deserializer, Serialize, Serializer};
71//! #
72//! # #[derive(Debug, PartialEq)]
73//! struct SecretData(Vec<u8>);
74//!
75//! impl<'de> Deserialize<'de> for SecretData {
76//! fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
77//! where
78//! D: Deserializer<'de>,
79//! {
80//! serdect::slice::deserialize_hex_or_bin_vec(deserializer).map(Self)
81//! }
82//! }
83//!
84//! impl Serialize for SecretData {
85//! fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
86//! where
87//! S: Serializer,
88//! {
89//! serdect::slice::serialize_hex_lower_or_bin(&self.0, serializer)
90//! }
91//! }
92//!
93//! let data = SecretData(vec![42; 32]);
94//!
95//! // postcard: an embedded-friendly binary serialization format
96//! let serialized = postcard::to_stdvec(&data).unwrap();
97//! let deserialized: SecretData = postcard::from_bytes(&serialized).unwrap();
98//! assert_eq!(deserialized, data);
99//!
100//! let serialized = serde_json::to_string(&data).unwrap();
101//! // JSON, a human-readable serialization format is serialized into lower-case HEX.
102//! assert_eq!(
103//! serialized,
104//! "\"2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a\""
105//! );
106//! # let deserialized: SecretData = serde_json::from_str(&serialized).unwrap();
107//! # assert_eq!(deserialized, data);
108//! ```
109
110#[cfg(feature = "alloc")]
111extern crate alloc;
112
113pub mod array;
114mod common;
115pub mod slice;
116
117pub use serde;