#序列化 #Erlang #term-to-binary

bert

BERT (二进制ERlang术语)序列化器

1个不稳定版本

使用旧的Rust 2015

0.1.0 2016年11月11日

#61 in #erlang

BSD-3-Clause

43KB
1.5K SLoC

bert-rs

BERT (二进制ERlang术语)序列化器

这个crate提供了一种将数据序列化为特殊二进制数据格式的方法,该格式可以被发送到您的Erlang程序中。实现依赖于BERTErlang外部术语格式规范。

依赖项

[dependencies]
serde = "0.8.7"
num = "0.1.34"
byteorder = "0.5.3"

[dev-dependencies]
serde_macros = "0.8.*"

使用

在您开始使用此库之前,您需要在Cargo.toml文件中添加对bert-rs库的链接

[dependencies]
bert = "0.1.0"

许可协议

bert-rs在BSD许可协议下发布。有关更多详细信息,请阅读LICENSE文件。

使用示例

bert-rs crate提供了对默认Rust类型和一些BERT文档中指定的附加类型的支持。对于任何需要序列化的支持数据类型,您需要将其传递给term_to_binary函数。

#![feature(proc_macro)]

extern crate bert;
extern crate serde;


#[derive(Debug, PartialEq, Serialize)]
struct Point2D(i32, i32);


fn main() {
    let point = Point2D(1, 2);

    // serialized to {point2d, 1, 2} in BERT format
    let serialized_point_2d = bert::term_to_binary(&point).unwrap(); 
    assert_eq!(
        serialized_point_2d
        vec![
            131u8,
            105,                                          // tuple
            0, 0, 0, 3,                                   // length
            100, 0, 7, 112, 111, 105, 110, 116, 50, 100,  // "point2d" as atom
            98, 0, 0, 0, 1,                               // 1
            98, 0, 0, 0, 2                                // 2
        ]   
    );
}

注意:目前bert-rs只提供序列化功能。但bert-rs有serder-rs-deserializer分支,其中这个库提供了反序列化功能。部分必需功能尚未实现(因为反序列化方法过于复杂):列表、元组、BertBigInteger和特殊类型的元组,这些元组以{bert, ...}的形式表示。如果您想进一步帮助开发,请随时提出pull请求和issue。

用于开发

  • rustup工具链
  • 稳定版 rustc 1.11.0 (9b21dcd6a 2016-08-15)用于构建发布版本
  • 不稳定版 rustc 1.13.0-nightly (3c5a0fa45 2016-08-22)用于测试

依赖项

~1MB
~17K SLoC