This is an automated email from the ASF dual-hosted git repository. mgrigorov pushed a commit to branch avro-3962-docs-for-fields in repository https://gitbox.apache.org/repos/asf/avro.git
commit 74d1857705f31966752b4080ae7bb35e4930f489 Author: Martin Tzvetanov Grigorov <[email protected]> AuthorDate: Tue Mar 19 15:28:30 2024 +0200 AVRO-3962: [Rust] Add support for field attribute Rustdoc to AvroSchema Signed-off-by: Martin Tzvetanov Grigorov <[email protected]> --- lang/rust/avro_derive/src/lib.rs | 3 ++- lang/rust/avro_derive/tests/derive.rs | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/lang/rust/avro_derive/src/lib.rs b/lang/rust/avro_derive/src/lib.rs index 419f34cab..8f0138823 100644 --- a/lang/rust/avro_derive/src/lib.rs +++ b/lang/rust/avro_derive/src/lib.rs @@ -126,7 +126,8 @@ fn get_data_struct_schema_def( } let field_attrs = FieldOptions::from_attributes(&field.attrs[..]).map_err(darling_to_syn)?; - let doc = preserve_optional(field_attrs.doc); + let doc = + preserve_optional(field_attrs.doc.or_else(|| extract_outer_doc(&field.attrs))); if let Some(rename) = field_attrs.rename { name = rename } diff --git a/lang/rust/avro_derive/tests/derive.rs b/lang/rust/avro_derive/tests/derive.rs index 1fab03203..ec7a96d75 100644 --- a/lang/rust/avro_derive/tests/derive.rs +++ b/lang/rust/avro_derive/tests/derive.rs @@ -1571,4 +1571,28 @@ mod test_derive { panic!("Unexpected schema type for {derived_schema:?}") } } + + #[test] + fn avro_3962_fields_documentation() { + /// Foo docs + #[derive(AvroSchema)] + #[allow(dead_code)] + struct Foo { + /// a's Rustdoc + a: i32, + /// b's Rustdoc + #[avro(doc = "attribute doc has priority over Rustdoc")] + b: i32, + } + + if let Schema::Record(RecordSchema { fields, .. }) = Foo::get_schema() { + assert_eq!(fields[0].doc, Some("a's Rustdoc".to_string())); + assert_eq!( + fields[1].doc, + Some("attribute doc has priority over Rustdoc".to_string()) + ); + } else { + panic!("Unexpected schema type for Foo") + } + } }
