#serde #serialization #jce

serde_jce

Jce格式对serde-rs的支持

1 个不稳定版本

0.1.0 2022年4月22日

#904#serde

MIT 许可证

62KB
1.5K SLoC

serde_jce

Jce格式对serde-rs的支持


lib.rs:

serde-rs的Jce格式支持

该crate基于serde。如果您尚未使用过serde,建议首先阅读serde_json的文档。

公共成员

  • to_bytes - 将对象序列化为Jce格式
  • to_bytes_with_tag - 使用特定标记将对象序列化为Jce格式
  • from_bytes - 将Jce格式反序列化为对象
  • Jcebuilder - 构建Jce格式的工具
  • JceParser - 解析Jce格式的工具
  • Value - 一个递归枚举,可能能够表示所有合法的Jce数据

强类型数据结构

use serde::{Deserialize, Serialize}; // with serde_derive

#[derive(PartialEq, Debug, Serialize, Deserialize)]
struct Struct {
    #[serde(rename = "0")]
    v0: i8,
    #[serde(rename = "1")]
    v1: i16,
}

let val = Struct {
    v0: 0x12,
    v1: 0x3456,
};
let bytes = vec![0x0a, 0x00, 0x12, 0x11, 0x34, 0x56, 0x0b];

assert_eq!(serde_jce::to_bytes(&val), Ok(bytes.clone()));
assert_eq!(serde_jce::from_bytes(&bytes), Ok(val));

与字节一起

如果您想将&[u8]/Vec<u8>字段作为Jce格式中的bytes进行序列化和反序列化。

请使用由serde_bytes提供的标记#[serde(with = "serde_bytes")]标记字段。

serde_jce::Value

use std::collections::BTreeMap as Map;

enum Value {
    Zero,
    Int(i64),
    Float(f32),
    Double(f64),
    String(String),
    Bytes(Vec<u8>),
    List(Vec<Value>),
    Map(Map<Value, Value>), // std::collections::BTreeMap
    Object(Map<u8, Value>), // std::collections::BTreeMap
}

依赖关系

~330–580KB
~12K SLoC