7 个版本

0.2.0 2023年10月18日
0.1.5 2021年2月3日
0.1.3 2020年11月18日
0.1.2 2020年7月17日

#1587 in 编码

Download history • Rust 包仓库 3936/week @ 2024-04-23 • Rust 包仓库 3000/week @ 2024-04-30 • Rust 包仓库 3171/week @ 2024-05-07 • Rust 包仓库 3169/week @ 2024-05-14 • Rust 包仓库 3717/week @ 2024-05-21 • Rust 包仓库 4288/week @ 2024-05-28 • Rust 包仓库 3994/week @ 2024-06-04 • Rust 包仓库 3922/week @ 2024-06-11 • Rust 包仓库 3467/week @ 2024-06-18 • Rust 包仓库 3745/week @ 2024-06-25 • Rust 包仓库 3765/week @ 2024-07-02 • Rust 包仓库 4341/week @ 2024-07-09 • Rust 包仓库 3253/week @ 2024-07-16 • Rust 包仓库 3300/week @ 2024-07-23 • Rust 包仓库 3412/week @ 2024-07-30 • Rust 包仓库 3935/week @ 2024-08-06 • Rust 包仓库

14,707 每月下载量
10 个crate(6 个直接) 中使用

MIT 许可证

42KB
1K SLoC

Serde适配器,用于控制字节的表现形式

Build Status

人类可读的格式通常不包含表示任意二进制数据的一致方法,这意味着那些serde库最终可能会使用一种不适合所有用途的serde的"字节"类型的表示。

// [dependencies]
// serde = { version = "1.0", features = ["derive"] }
// serde_bytes = "0.11"
// serde_json = "1.0"
// serde_yaml = "0.8"
// toml = "0.5"

use serde::Serialize;

#[derive(Serialize)]
struct Demo {
    #[serde(with = "serde_bytes")]
    bytes: Vec<u8>,
}

fn main() {
    let bytes = b"testing".to_vec();
    let s = Demo { bytes };

    println!("JSON: {}", serde_json::to_string(&s).unwrap());
    println!("YAML: {}", serde_yaml::to_string(&s).unwrap());
    println!("TOML: {}", toml::to_string(&s).unwrap());
}
JSON: {"bytes":[116,101,115,116,105,110,103]}
YAML: ---
bytes:
  - 116
  - 101
  - 115
  - 116
  - 105
  - 110
  - 103
TOML: bytes = [116, 101, 115, 116, 105, 110, 103]

此适配器允许您通过包装类似于以下这样的序列化器来控制字节的表现形式

#[derive(Serialize, Deserialize)]
struct Demo {
    #[serde(with = "serde_bytes")]
    bytes: Vec<u8>,
}

fn main() {
    let bytes = b"testing".to_vec();
    let demo = Demo { bytes };

    let mut out = vec![];
    let mut ser = serde_json::Serializer::new(&mut out);
    let base64_config = base64::Config::new(base64::CharacterSet::UrlSafe, true);
    let ser = BytesRepr::base64(&mut ser, base64_config);
    demo.serialize(ser).unwrap();

    let serialized = String::from_utf8(out).unwrap();
    println!("JSON(base64): {}", serialized);
}

输出

JSON(base64): {"bytes":"dGVzdGluZw=="}

依赖项

~335–590KB
~12K SLoC