Hi Rajiv, There are 0 known issues for the Rust SDK! :-)
Do you want to contribute the code as a failing unit test in a Pull Request ? With a fix would be awesome! Thanks! Martin On Mon, Aug 29, 2022 at 12:11 PM Rajiv M Ranganath < rajiv.rangan...@gmail.com> wrote: > Hi Martin, > > On Mon, Aug 29, 2022 at 1:43 PM Martin Grigorov <mgrigo...@apache.org> > wrote: > > [...] > > > I'd recommend you this nice tool for generating Rust structs from Avro > > schema: https://github.com/lerouxrgd/rsgen-avro > > Thanks for the reply and the pointer to `rsgen-avro`. :-) > > It looks like there seems to be an issue in the way Serde is serializing > the schema. > > Here is the example: > > ```main.rs > use apache_avro::types::{Record, Value}; > use apache_avro::Schema; > > #[derive(Debug, PartialEq, Eq, Clone, serde::Deserialize, > serde::Serialize)] > #[serde(default)] > pub struct Abcd { > pub b: Option<Vec<u8>>, > } > > #[inline(always)] > fn default_abcd_b() -> Option<Vec<u8>> { > None > } > > impl Default for Abcd { > fn default() -> Abcd { > Abcd { > b: default_abcd_b(), > } > } > } > > fn main() { > let writers_schema = Schema::parse_str( > r#" > { > "type": "record", > "name": "Abcd", > "fields": [ > {"name": "b", "type": ["null", "bytes"], "default": null} > ] > } > "#, > ) > .unwrap(); > > let mut abcd_manual = Record::new(&writers_schema).unwrap(); > abcd_manual.put( > "b", > Value::Union(1, > Box::new(Value::Bytes("hello_world".as_bytes().to_vec()))), > ); > > println!("{:?}", abcd_manual); > > let abcd_manual_bytes = > apache_avro::to_avro_datum(&writers_schema, abcd_manual).unwrap(); > println!("{:?}", abcd_manual_bytes); > > let abcd_serde_value = apache_avro::to_value(Abcd { > b: Some("hello_world".as_bytes().to_vec()), > }).unwrap(); > > println!("{:?}", abcd_serde_value); > > let abcd_serde_bytes = apache_avro::to_avro_datum(&writers_schema, > abcd_serde_value); > > println!("{:?}", abcd_serde_bytes); > } > ``` > > Rather than creating an Avro Value of the form, > > ``` > Record { fields: [("b", Union(1, Bytes([104, 101, 108, 108, 111, 95, > 119, 111, 114, 108, 100])))], schema_lookup: {"b": 0} } > ``` > > Serde seems to be generating an Avro Value, > > ``` > Record([("b", Union(1, Array([Int(104), Int(101), Int(108), Int(108), > Int(111), Int(95), Int(119), Int(111), Int(114), Int(108), > Int(100)])))]) > ``` > > which is causing the subsequent conversion to bytes to fail. > > I was wondering if this is a known issue? > > Best, > Rajiv >