29 个版本 (17 个重大更新)
新 1.0.0-rc.7 | 2024 年 8 月 23 日 |
---|---|
1.0.0-rc.6 | 2024 年 6 月 6 日 |
1.0.0-rc.4 | 2024 年 5 月 31 日 |
1.0.0-rc.3 | 2024 年 2 月 26 日 |
0.1.2 | 2020 年 10 月 19 日 |
#85 in 编码
每月下载量 13,722
用于 23 个 crate (16 直接)
2MB
44K SLoC
Amazon Ion Rust
Amazon Ion 数据格式的 Rust 实现。
示例
更多信息,请参阅 文档。
use crate::{ion_seq, Element, IonResult, Timestamp};
fn main() -> IonResult<()> {
// Read a single value from a string/slice/Vec
let element = Element::read_one("\"Hello, world!\"")?;
let text = element.expect_string()?;
assert_eq!(text, "Hello, world!");
// Read a series of values from a string/slice/Vec
let elements = Element::read_all("1 2 3")?;
let mut sum = 0;
for element in elements {
sum += element.expect_i64()?;
}
assert_eq!(sum, 6);
// Iterate over values in a file
let ion_file = std::fs::File::open("/foo/bar/baz.ion").unwrap();
for element in Element::iter(ion_file)? {
println!("{}", element?)
}
// Construct a sequence of Ion elements from Rust values
let values = ion_seq!(
"foo",
Timestamp::with_ymd(2016, 5, 11).build()?,
3.1416f64,
true
);
// Write values to a String using generously-spaced text
let text_ion: String = values.encode_as(v1_0::Text.with_format(TextFormat::Pretty))?;
assert_eq!(values, Element::read_all(text_ion)?);
// Write values to a buffer in compact binary
let binary_buffer: Vec<u8> = values.encode_as(v1_0::Binary)?;
assert_eq!(values, Element::read_all(binary_buffer)?);
Ok(())
}
实验性功能
ion_rs
库具有一些用户可以选择的功能。虽然以下功能已完整并经过良好测试,但其 API 不稳定,且在库的次要版本之间可能会不通知而更改。
experimental-reader-writer
,一个流式读取器和写入器 API。experimental-tooling-apis
,用于访问流编码级别细节的 API。experimental-serde
,一个serde
序列化和反序列化器。experimental-ion-hash
,Ion Hash 的实现。
开发
本项目使用子模块来引入 Ion 测试 和 Ion Hash 测试。引入所有内容的最佳方式是递归地克隆仓库
$ git clone --recursive https://github.com/amazon-ion/ion-rust
您还可以按以下方式初始化子模块
$ git submodule update --init --recursive
构建项目
$ cargo build --all-features
运行 ion-rust
的所有测试
$ cargo test --all-features
我们的持续集成构建/测试、检查格式、构建所有 API 文档(包括私有)和 clippy 代码质量检查,您可能希望检查其中大部分,以避免等待 CI 检测到它
$ ./clean-rebuild.sh
依赖项
~2.9–9.5MB
~77K SLoC