You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@avro.apache.org by mg...@apache.org on 2022/10/12 07:07:40 UTC
[avro] branch master updated: AVRO-3634: Implement AvroSchemaComponent for bool (#1906)
This is an automated email from the ASF dual-hosted git repository.
mgrigorov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/avro.git
The following commit(s) were added to refs/heads/master by this push:
new 3c4f5adcc AVRO-3634: Implement AvroSchemaComponent for bool (#1906)
3c4f5adcc is described below
commit 3c4f5adccffd894c106e81132f39d96cab4c20b3
Author: Martin Grigorov <ma...@users.noreply.github.com>
AuthorDate: Wed Oct 12 10:07:32 2022 +0300
AVRO-3634: Implement AvroSchemaComponent for bool (#1906)
* AVRO-3634: Add a test for deriving a schema for boolean field
Signed-off-by: Martin Tzvetanov Grigorov <mg...@apache.org>
* AVRO-3634: Define AvroSchemaComponent for bool
Signed-off-by: Martin Tzvetanov Grigorov <mg...@apache.org>
Signed-off-by: Martin Tzvetanov Grigorov <mg...@apache.org>
---
lang/rust/avro/src/schema.rs | 1 +
lang/rust/avro_derive/src/lib.rs | 3 +--
lang/rust/avro_derive/tests/derive.rs | 38 +++++++++++++++++++++++++++++++++++
3 files changed, 40 insertions(+), 2 deletions(-)
diff --git a/lang/rust/avro/src/schema.rs b/lang/rust/avro/src/schema.rs
index f29406ffd..51ef7d96d 100644
--- a/lang/rust/avro/src/schema.rs
+++ b/lang/rust/avro/src/schema.rs
@@ -1860,6 +1860,7 @@ pub mod derive {
);
);
+ impl_schema!(bool, Schema::Boolean);
impl_schema!(i8, Schema::Int);
impl_schema!(i16, Schema::Int);
impl_schema!(i32, Schema::Int);
diff --git a/lang/rust/avro_derive/src/lib.rs b/lang/rust/avro_derive/src/lib.rs
index a1d9fa097..3c20b8095 100644
--- a/lang/rust/avro_derive/src/lib.rs
+++ b/lang/rust/avro_derive/src/lib.rs
@@ -92,7 +92,6 @@ fn derive_avro_schema(input: &mut DeriveInput) -> Result<TokenStream, Vec<syn::E
)])
}
};
-
let ident = &input.ident;
let (impl_generics, ty_generics, where_clause) = input.generics.split_for_impl();
Ok(quote! {
@@ -237,7 +236,7 @@ fn type_to_schema_expr(ty: &Type) -> Result<TokenStream, Vec<syn::Error>> {
let schema = match &type_string[..] {
"bool" => quote! {apache_avro::schema::Schema::Boolean},
"i8" | "i16" | "i32" | "u8" | "u16" => quote! {apache_avro::schema::Schema::Int},
- "i64" => quote! {apache_avro::schema::Schema::Long},
+ "u32" | "i64" => quote! {apache_avro::schema::Schema::Long},
"f32" => quote! {apache_avro::schema::Schema::Float},
"f64" => quote! {apache_avro::schema::Schema::Double},
"String" | "str" => quote! {apache_avro::schema::Schema::String},
diff --git a/lang/rust/avro_derive/tests/derive.rs b/lang/rust/avro_derive/tests/derive.rs
index 36b46bd33..cfbd30a44 100644
--- a/lang/rust/avro_derive/tests/derive.rs
+++ b/lang/rust/avro_derive/tests/derive.rs
@@ -1040,6 +1040,44 @@ mod test_derive {
assert_eq!(schema, TestBasicWithLargeDoc::get_schema());
}
+ #[derive(Debug, Serialize, Deserialize, AvroSchema, Clone, PartialEq)]
+ struct TestBasicWithBool {
+ a: bool,
+ b: Option<bool>,
+ }
+
+ proptest! {
+ #[test]
+ fn avro_3634_test_basic_with_bool(a in any::<bool>(), b in any::<Option<bool>>()) {
+ let schema = r#"
+ {
+ "type":"record",
+ "name":"TestBasicWithBool",
+ "fields":[
+ {
+ "name":"a",
+ "type":"boolean"
+ },
+ {
+ "name":"b",
+ "type":["null","boolean"]
+ }
+ ]
+ }
+ "#;
+ let schema = Schema::parse_str(schema).unwrap();
+ let derived_schema = TestBasicWithBool::get_schema();
+
+ if let Schema::Record { name, .. } = derived_schema {
+ assert_eq!("TestBasicWithBool", name.fullname(None))
+ } else {
+ panic!("TestBasicWithBool schema must be a record schema")
+ }
+ assert_eq!(schema, TestBasicWithBool::get_schema());
+
+ serde_assert(TestBasicWithBool { a, b });
+ }}
+
#[derive(Debug, Serialize, Deserialize, AvroSchema, Clone, PartialEq)]
struct TestBasicWithU32 {
a: u32,