byte-wrapper
Newtype wrappers for byte arrays and vectors with hex and base64 formatting.
This crate provides wrapper types that display byte data in
human-readable encodings. HexArray<N> encodes fixed-length byte
arrays as hex strings, and Base64Vec encodes variable-length
byte vectors as base64 strings.
With the serde feature, this crate’s types implement Serialize and
Deserialize, encoding as human-readable strings (hex or base64) in text
formats like JSON, and as efficient raw bytes in binary formats like CBOR.
You do not have to use the newtypes in your own type definitions; you can
refer to them via #[serde(with = "...")] instead.
With the schemars08 feature, this crate’s types implement JsonSchema,
including automatic opt-in replacement with
typify and
progenitor.
Types
HexArray<N>encodes a fixed-length byte array as a hex string. (Requires thehexfeature.)HexSliceencodes a borrowed byte slice as a hex string. (Requires thehexfeature.)HexVecencodes a variable-length byte vector as a hex string. (Requires thehexandallocfeatures.)Base64Vecencodes a variable-length byte vector as a base64 string. (Requires thebase64andallocfeatures.)Base64Sliceencodes a borrowed byte slice as a base64 string. (Requires thebase64feature.)
Examples
use HexArray;
let h = new;
assert_eq!;
let parsed: = "0102abff".parse.unwrap;
assert_eq!;
With the serde feature:
use HexArray;
use ;
Using #[serde(with = "...")] on an existing byte array:
use HexArray;
use ;
Alternatives
Several crates solve parts of this problem, often using slightly
different approaches from byte-wrapper.
| feature | byte-wrapper |
serde-human-bytes 0.1.2 |
serde-encoded-bytes 0.2.1 |
serde_with 3.17.0 |
hex-buffer-serde 0.4.0 |
hexutil 0.1.0 |
serde-bytes-repr 0.3.0 |
|---|---|---|---|---|---|---|---|
| newtype wrappers | yes | yes (hex only) | no | no | no | no | no |
is_human_readable() switch |
yes | yes | yes | no | yes | yes | no |
Display / FromStr / Deref |
yes | Deref only |
no | no | no | Display / FromStr via macro |
no |
| hex encoding | yes | yes | yes | yes | yes | yes | yes |
| base64 encoding | yes | yes | yes | yes | no | no | yes |
[u8; N] support |
yes | yes | yes | yes | yes | via macros | no |
no_std |
yes | yes | yes | yes | yes | yes | no |
JsonSchema (schemars) |
yes | no | no | yes | no | no | no |
#[serde(with)] support |
yes | yes | yes | yes | yes | no | no |
The closest alternatives are:
-
serde-human-bytes, which provides newtypes withDeref,is_human_readable()switching, and both hex and base64 encoding, but lacksDisplay/FromStrandJsonSchemasupport. -
serde-encoded-bytes, which provides most of the features of this crate, and is more general in some ways, but doesn’t provide newtype or schemars support. -
serde_with, which offers schemars integration but does not checkis_human_readable()by default.
Features
hex: enablesHexArrayandHexSlice, andHexVectogether withalloc. Enabled by default.base64: enablesBase64Slice, andBase64Vectogether withalloc. Enabled by default.alloc: enablesallocsupport (required byBase64VecandHexVec). Enabled by default.serde: implementsSerializeandDeserializefor enabled types. Not enabled by default.schemars08: derivesJsonSchemafor enabled types. Requiresstd. Not enabled by default.
All features other than schemars08 are compatible with no_std.
License
Licensed under either of Apache License, Version 2.0 or MIT license at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.