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 在 编码
963 每月下载次数
用于 timens
34KB
898 行
rsexp
Rust 的 S表达式库。
此实现旨在与 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)?;
转换为/从本地类型
OfSexp
和 SexpOf
特性定义了一些将给定类型从/转换为 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()?;