将一种格式转码为另一种格式

serde-transcode crate提供了一种功能,可以从任意Serde Deserializer 转码到任意Serde Serializer,而无需将整个输入收集到内存中作为中间形式。这提供了一种完全通用的方式,以内存高效的流式方式将任何自描述的 Serde 数据格式转换为任何其他 Serde 数据格式。

例如,您可以将一个 JSON 数据流转码为一个 CBOR 数据流,或者将未格式化的 JSON 转码为其漂亮打印的形式。

这个示例实现了Go的 json.Compact 函数的等效功能,该函数以流式方式从JSON字符串中移除无关的空格。

use std::io;

fn main() {
    // 具有大量空格的 JSON 输入。
    let input = r#"
      {
        "a boolean": true,
        "an array": [3, 2, 1]
      }
    "#;

    // JSON 反序列化器。您可以在这里使用任何 Serde Deserializer。
    let mut deserializer = serde_json::Deserializer::from_str(input);

    // 一个紧凑的 JSON 序列化器。您可以在这里使用任何 Serde Serializer。
    let mut serializer = serde_json::Serializer::new(io::stdout());

    // 将 `{"a boolean":true,"an array":[3,2,1]}` 打印到标准输出。
    // 该行适用于任何自描述的 Deserializer 和任何 Serializer。
    serde_transcode::transcode(&mut deserializer, &mut serializer).unwrap();
}