1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
//! Wrapper types to enable optimized handling of `&[u8]` and `Vec<u8>`.
//!
//! Without specialization, Rust forces Serde to treat `&[u8]` just like any
//! other slice and `Vec<u8>` just like any other vector. In reality this
//! particular slice and vector can often be serialized and deserialized in a
//! more efficient, compact representation in many formats.
//!
//! When working with such a format, you can opt into specialized handling of
//! `&[u8]` by wrapping it in `serde_human_bytes::Bytes` and `Vec<u8>` by wrapping it
//! in `serde_human_bytes::ByteBuf`.
//!
//! Additionally this crate supports the Serde `with` attribute to enable
//! efficient handling of `&[u8]` and `Vec<u8>` in structs without needing a
//! wrapper type.
//!
//! ```
//! # use serde_derive::{Deserialize, Serialize};
//! use serde::{Deserialize, Serialize};
//!
//! #[derive(Deserialize, Serialize)]
//! struct Efficient<'a> {
//! #[serde(with = "serde_human_bytes")]
//! bytes: &'a [u8],
//!
//! #[serde(with = "serde_human_bytes")]
//! byte_buf: Vec<u8>,
//!
//! #[serde(with = "serde_human_bytes")]
//! byte_array: [u8; 314],
//! }
//! ```
extern crate alloc;
use ;
pub use crateByteArray;
pub use crateBytes;
pub use crate;
pub use crateDeserialize;
pub use crateSerialize;
pub use crateByteBuf;
/// Serde `serialize_with` function to serialize bytes efficiently.
///
/// This function can be used with either of the following Serde attributes:
///
/// - `#[serde(with = "serde_human_bytes")]`
/// - `#[serde(serialize_with = "serde_human_bytes::serialize")]`
///
/// ```
/// # use serde_derive::Serialize;
/// use serde::Serialize;
///
/// #[derive(Serialize)]
/// struct Efficient<'a> {
/// #[serde(with = "serde_human_bytes")]
/// bytes: &'a [u8],
///
/// #[serde(with = "serde_human_bytes")]
/// byte_buf: Vec<u8>,
///
/// #[serde(with = "serde_human_bytes")]
/// byte_array: [u8; 314],
/// }
/// ```
/// Serde `deserialize_with` function to deserialize bytes efficiently.
///
/// This function can be used with either of the following Serde attributes:
///
/// - `#[serde(with = "serde_human_bytes")]`
/// - `#[serde(deserialize_with = "serde_human_bytes::deserialize")]`
///
/// ```
/// # use serde_derive::Deserialize;
/// use serde::Deserialize;
///
/// #[derive(Deserialize)]
/// struct Packet {
/// #[serde(with = "serde_human_bytes")]
/// payload: Vec<u8>,
///
/// #[serde(with = "serde_human_bytes")]
/// byte_array: [u8; 314],
/// }
/// ```
/// UPPERCASE hex variant of the parent module.
///
/// Use as `#[serde(with = "serde_human_bytes::upper")]` when the wire format
/// requires uppercase hex (e.g. Intel SGX/TDX PCCS payloads). Identical to
/// the parent module for non-human-readable formats (still emits a compact
/// byte sequence) and for deserialization (still case-insensitive).
///
/// ```
/// # use serde_derive::{Deserialize, Serialize};
/// use serde::{Deserialize, Serialize};
///
/// #[derive(Deserialize, Serialize)]
/// struct Identity {
/// #[serde(with = "serde_human_bytes::upper")]
/// mrsigner: [u8; 32],
/// }
/// ```