A command line tool and library for generating serde-compatible Rust types from Avro schemas. The avro-rs crate provides a way to read and write Avro data with such types.
Install with:
sh
cargo install rsgen-avro
Available options:
```
Usage:
rsgen-avro [options]
Options:
--fmt Run rustfmt on the resulting
As a libray, the basic usage is:
```rust extern crate rsgen_avro;
use std::io::{stdout, Write}; use avrors::Schema; use rsgenavro::{Source, Generator};
let raw_schema = r#" { "type": "record", "name": "test", "fields": [ {"name": "a", "type": "long", "default": 42}, {"name": "b", "type": "string"} ] } "#;
let schema = Schema::parsestr(&rawschema).unwrap(); let source = Source::Schema(&schema);
let mut out: Box
let g = Generator::new().unwrap(); g.gen(&source, &mut out).unwrap(); ```
This will generate the following output:
```text use serde::{Deserialize, Serialize};
pub struct Test { pub a: i64, pub b: String, }
impl Default for Test { fn default() -> Test { Test { a: 42, b: String::default(), } } } ```
Various Schema
sources can be used with Generator
's .gen(..)
method:
rust
pub enum Source<'a> {
Schema(&'a Schema),
SchemaStr(&'a str),
FilePath(&'a Path),
DirPath(&'a Path),
}
Note also that the Generator
can be customized with a builder:
rust
let g = Generator::builder().precision(2).build().unwrap();
namespace
fields are ignored, therefore names from a single schema must no clash.union
of the form ["null", "some-type"]
are supported and treated as Option<_>
.map
and record
fields are ignored, and default empty values are enforced instead.Some tests capture stdout
and must be run with only one thread:
sh
cargo test -- --test-threads=1