4 个版本 (破坏性更改)

0.17.0 2024 年 8 月 5 日
0.16.0 2023 年 9 月 26 日
0.15.0 2023 年 7 月 10 日
0.14.0 2022 年 8 月 3 日

#23 in #avro

Download history 2627/week @ 2024-05-02 3713/week @ 2024-05-09 3518/week @ 2024-05-16 3669/week @ 2024-05-23 4187/week @ 2024-05-30 4210/week @ 2024-06-06 5114/week @ 2024-06-13 3227/week @ 2024-06-20 4096/week @ 2024-06-27 3694/week @ 2024-07-04 4346/week @ 2024-07-11 4567/week @ 2024-07-18 3816/week @ 2024-07-25 3771/week @ 2024-08-01 4403/week @ 2024-08-08 3920/week @ 2024-08-15

17,080 个月下载量
6 个crate中使用了(通过 apache-avro

Apache-2.0

31KB
590

avro_derive

一个 proc-macro 模块,用于自动为结构体或枚举推导 avro schema。该宏生成实现类型 AvroSchema 特性的必要逻辑。

pub trait AvroSchema {
    // constructs the schema for the type
    fn get_schema() -> Schema;
}

如何使用

在 cargo.toml 中将 "derive" 功能添加到您的 apache-avro 依赖项中

apache-avro = { version = "X.Y.Z", features = ["derive"] }

添加到您的数据模型

#[derive(AvroSchema)]
struct Test {
    a: i64,
    b: String,
}

示例

use apache_avro::Writer;

#[derive(Debug, Serialize, AvroSchema)]
struct Test {
    a: i64,
    b: String,
}
// derived schema, always valid or code fails to compile with a descriptive message
let schema = Test::get_schema();

let mut writer = Writer::new(&schema, Vec::new());
let test = Test {
    a: 27,
    b: "foo".to_owned(),
};
writer.append_ser(test).unwrap();
let encoded = writer.into_inner();

兼容性说明

此模块旨在与 Serde 实现协同工作。如果您的用例需要手动将数据转换为 Value 类型以进行编码,则推导出的模式可能不正确。

依赖项

~1–2MB
~41K SLoC