# avro_derive 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. ```rust pub trait AvroSchema { // constructs the schema for the type fn get_schema() -> Schema; } ``` ## How-to use 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 ```rust #[derive(AvroSchema)] struct Test { a: i64, b: String, } ``` ### Example ```rust 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(); ``` ### Compatibility Notes 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.