| Crates.io | apache-avro-derive |
| lib.rs | apache-avro-derive |
| version | 0.20.0 |
| created_at | 2022-08-03 18:43:19.319616+00 |
| updated_at | 2025-08-25 06:17:37.223784+00 |
| description | A library for deriving Avro schemata from Rust structs and enums |
| homepage | |
| repository | https://github.com/apache/avro-rs |
| max_upload_size | |
| id | 638259 |
| size | 121,357 |
A proc-macro module for automatically deriving the avro schema for structs or enums. The macro produces the logic necessary to implement the AvroSchema trait for the type.
pub trait AvroSchema {
// constructs the schema for the type
fn get_schema() -> Schema;
}
Add the "derive" feature to your apache-avro dependency inside cargo.toml
apache-avro = { version = "X.Y.Z", features = ["derive"] }
Add to your data model
#[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();
This module is designed to work in concert with the Serde implementation. If your use case dictates needing to manually convert to a Value type in order to encode then the derived schema may not be correct.