7 个版本

0.2.3 2022年1月2日
0.2.2 2021年11月14日
0.2.0 2021年10月20日
0.1.2 2021年10月11日

#805编码

Download history 100/week @ 2024-03-13 143/week @ 2024-03-20 236/week @ 2024-03-27 251/week @ 2024-04-03 152/week @ 2024-04-10 108/week @ 2024-04-17 192/week @ 2024-04-24 86/week @ 2024-05-01 113/week @ 2024-05-08 190/week @ 2024-05-15 331/week @ 2024-05-22 449/week @ 2024-05-29 320/week @ 2024-06-05 167/week @ 2024-06-12 244/week @ 2024-06-19 144/week @ 2024-06-26

963 每月下载次数
用于 timens

MIT/Apache

34KB
898

rsexp

Rust 的 S表达式库。

Build Status Latest version Documentation License

此实现旨在与 OCaml 的 sexplib 兼容。S表达式的主体类型如下

pub enum Sexp {
    Atom(Vec<u8>),
    List(Vec<Sexp>),
}

读取和写入 Sexp 文件

读取 sexp 文件可以通过首先读取整个文件内容,然后将结果切片转换为 Sexp 对象来实现,如下所示

    let contents = std::fs::read(input_filename)?;
    let sexp = rsexp::from_slice(&contents)?;

写入 sexp 文件可以通过首先将数据序列化到缓冲区,然后将此缓冲区写入。或者,可以使用 sexp.write(w)? 函数将数据直接输出到实现了 Write 特性的 w 对象。

    let data = sexp.to_bytes();
    std::fs::write(output_filename, data)?;

转换为/从本地类型

OfSexpSexpOf 特性定义了一些将给定类型从/转换为 Sexp 的函数。这些特性为大多数基本类型,包括映射实现了。可以使用两个关联的 derive 宏在结构体和枚举上定义这些特性。

#[derive(OfSexp, SexpOf)]
struct StructXYZ {
    x: i64,
    y: Option<(i32, i32)>,
    z: String,
}

#[derive(OfSexp, SexpOf)]
enum Abc {
    A(StructXYZ),
    B { x: i64, z: String },
    C,
}


    let sexp = abc.sexp_of();
    let abc: Abc = sexp.of_sexp()?;

无运行时依赖