29 个版本 (17 个重大更新)

1.0.0-rc.7 2024 年 8 月 23 日
1.0.0-rc.62024 年 6 月 6 日
1.0.0-rc.42024 年 5 月 31 日
1.0.0-rc.32024 年 2 月 26 日
0.1.2 2020 年 10 月 19 日

#85 in 编码

Download history 1508/week @ 2024-05-03 1760/week @ 2024-05-10 1412/week @ 2024-05-17 1206/week @ 2024-05-24 2265/week @ 2024-05-31 2005/week @ 2024-06-07 1471/week @ 2024-06-14 2261/week @ 2024-06-21 3371/week @ 2024-06-28 3345/week @ 2024-07-05 1488/week @ 2024-07-12 1780/week @ 2024-07-19 2711/week @ 2024-07-26 2865/week @ 2024-08-02 4010/week @ 2024-08-09 3687/week @ 2024-08-16

每月下载量 13,722
用于 23 个 crate (16 直接)

Apache-2.0

2MB
44K SLoC

Amazon Ion Rust

Crate Docs License CI Build codecov

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 不稳定,且在库的次要版本之间可能会不通知而更改。

  1. experimental-reader-writer,一个流式读取器和写入器 API。
  2. experimental-tooling-apis,用于访问流编码级别细节的 API。
  3. experimental-serde,一个 serde 序列化和反序列化器。
  4. 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