This is an automated email from the ASF dual-hosted git repository.
kriskras99 pushed a commit to branch feat/enums
in repository https://gitbox.apache.org/repos/asf/avro-rs.git
The following commit(s) were added to refs/heads/feat/enums by this push:
new ff1ca34 better testing
ff1ca34 is described below
commit ff1ca3437c8584733c1efa732e51720e4f8d5743
Author: Kriskras99 <[email protected]>
AuthorDate: Thu Mar 5 08:12:23 2026 +0100
better testing
---
Cargo.lock | 24 +++
avro/src/serde/deser_schema/enums/union.rs | 4 +
avro/src/serde/deser_schema/identifier.rs | 4 +-
avro/src/serde/deser_schema/mod.rs | 21 ++-
avro/src/serde/deser_schema/record.rs | 27 ++-
avro/src/serde/ser_schema/mod.rs | 5 +
avro_derive/Cargo.toml | 1 +
avro_derive/src/enums/bare_union.rs | 19 +-
avro_derive/src/enums/mod.rs | 4 +-
avro_derive/src/enums/union_of_records.rs | 94 +++++++++-
avro_derive/src/lib.rs | 206 +--------------------
.../{ui/avro_rs_373_tag_enum.rs => expand.rs} | 12 +-
.../avro_3687_basic_enum_with_default.expanded.rs | 59 ++++++
.../avro_3687_basic_enum_with_default.rs} | 17 +-
.../avro_3709_record_field_attributes.expanded.rs | 192 +++++++++++++++++++
.../avro_3709_record_field_attributes.rs} | 15 +-
.../avro_rs_207_rename_all_attribute.expanded.rs | 180 ++++++++++++++++++
.../avro_rs_207_rename_all_attribute.rs} | 15 +-
...name_attr_over_rename_all_attribute.expanded.rs | 133 +++++++++++++
...s_207_rename_attr_over_rename_all_attribute.rs} | 11 +-
.../tests/expanded/avro_rs_xxx_basic.expanded.rs | 131 +++++++++++++
.../avro_rs_xxx_basic.rs} | 9 +-
.../avro_rs_373_tag_enum.rs => expanded/mod.rs} | 16 +-
.../tests/ui/avro_rs_226_skip_serializing.stderr | 2 +-
.../ui/avro_rs_226_skip_serializing_if.stderr | 2 +-
avro_derive/tests/ui/avro_rs_373_alias.stderr | 2 +-
.../tests/ui/avro_rs_373_field_rename.stderr | 2 +-
avro_derive/tests/ui/avro_rs_373_flatten.stderr | 2 +-
avro_derive/tests/ui/avro_rs_373_name.stderr | 2 +-
avro_derive/tests/ui/avro_rs_373_remote.stderr | 2 +-
avro_derive/tests/ui/avro_rs_373_rename_all.stderr | 2 +-
.../tests/ui/avro_rs_373_rename_all_fields.stderr | 5 -
avro_derive/tests/ui/avro_rs_373_skip.stderr | 2 +-
.../tests/ui/avro_rs_373_tag_content_enum.stderr | 9 -
avro_derive/tests/ui/avro_rs_373_tag_enum.stderr | 9 -
avro_derive/tests/ui/avro_rs_373_tag_struct.stderr | 2 +-
.../tests/ui/avro_rs_373_untagged_enum.stderr | 12 +-
.../tests/ui/avro_rs_373_variant_rename.stderr | 2 +-
.../ui/avro_rs_397_with_word_without_serde.stderr | 2 +-
39 files changed, 941 insertions(+), 317 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
index 670f8f6..f2b6d63 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -102,6 +102,7 @@ dependencies = [
"apache-avro",
"darling",
"hexdump",
+ "macrotest",
"pretty_assertions",
"proc-macro2",
"proptest",
@@ -544,6 +545,12 @@ version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
+[[package]]
+name = "fastrand"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
+
[[package]]
name = "find-msvc-tools"
version = "0.1.9"
@@ -801,6 +808,23 @@ version = "0.4.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
+[[package]]
+name = "macrotest"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd198afd908012e57564b66e43e7d4d19056cec7e6232e9e6d54a1798622f81d"
+dependencies = [
+ "diff",
+ "fastrand",
+ "glob",
+ "prettyplease",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "syn",
+ "toml",
+]
+
[[package]]
name = "md-5"
version = "0.10.6"
diff --git a/avro/src/serde/deser_schema/enums/union.rs
b/avro/src/serde/deser_schema/enums/union.rs
index be09d2a..8712128 100644
--- a/avro/src/serde/deser_schema/enums/union.rs
+++ b/avro/src/serde/deser_schema/enums/union.rs
@@ -101,6 +101,10 @@ impl<'de, 's, 'r, R: Read, S: Borrow<Schema>>
VariantAccess<'de>
if let Schema::Record(record) = self.schema
&& record.fields.len() == 1
&& record.fields[0].name == "field_0"
+ && record
+ .attributes
+ .get("org.apache.avro.rust.union_of_records")
+ == Some(&serde_json::Value::Bool(true))
{
// Most likely a Union of Records
seed.deserialize(SchemaAwareDeserializer::new(
diff --git a/avro/src/serde/deser_schema/identifier.rs
b/avro/src/serde/deser_schema/identifier.rs
index 1082a18..fd175c4 100644
--- a/avro/src/serde/deser_schema/identifier.rs
+++ b/avro/src/serde/deser_schema/identifier.rs
@@ -24,11 +24,11 @@ impl<'s> IdentifierDeserializer<'s> {
impl<'de, 's> Deserializer<'de> for IdentifierDeserializer<'s> {
type Error = Error;
- fn deserialize_any<V>(self, _visitor: V) -> Result<V::Value, Self::Error>
+ fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where
V: Visitor<'de>,
{
- Err(self.error("deserialize_any"))
+ self.deserialize_identifier(visitor)
}
fn deserialize_bool<V>(self, _visitor: V) -> Result<V::Value, Self::Error>
diff --git a/avro/src/serde/deser_schema/mod.rs
b/avro/src/serde/deser_schema/mod.rs
index 7e61686..8fb8bb5 100644
--- a/avro/src/serde/deser_schema/mod.rs
+++ b/avro/src/serde/deser_schema/mod.rs
@@ -712,11 +712,14 @@ impl<'de, 's, 'r, R: Read, S: Borrow<Schema>>
Deserializer<'de>
self.config.human_readable
}
- fn deserialize_identifier<V>(self, _visitor: V) -> Result<V::Value,
Self::Error>
+ fn deserialize_identifier<V>(self, visitor: V) -> Result<V::Value,
Self::Error>
where
V: serde::de::Visitor<'de>,
{
- panic!("deserialize_identifier: {:?}", self.schema);
+ match self.schema {
+ Schema::String => self.deserialize_string(visitor),
+ _ => Err(self.error("identifier", "Expected Schema::String")),
+ }
}
fn deserialize_ignored_any<V>(self, visitor: V) -> Result<V::Value,
Self::Error>
@@ -1008,11 +1011,7 @@ mod tests {
"name": "UnitInternalEnum",
"fields": [{
"name": "t",
- "type": {
- "type": "enum",
- "name": "t",
- "symbols": ["Val1", "Val2"]
- }
+ "type": "string"
}]
}
}]
@@ -1170,6 +1169,7 @@ mod tests {
{
"name": "Val3",
"type": "record",
+ "org.apache.avro.rust.union_of_records": true,
"fields": [{
"name": "field_0",
"type": "null"
@@ -1178,6 +1178,7 @@ mod tests {
{
"name": "Val4",
"type": "record",
+ "org.apache.avro.rust.union_of_records": true,
"fields": [{
"name": "field_0",
"type": {
@@ -1238,16 +1239,18 @@ mod tests {
"name": "a",
"type": [
{
- "name": "Val1",
+ "name": "Double",
"type": "record",
+ "org.apache.avro.rust.union_of_records": true,
"fields": [{
"name": "field_0",
"type": "double"
}]
},
{
- "name": "Val2",
+ "name": "String",
"type": "record",
+ "org.apache.avro.rust.union_of_records": true,
"fields": [{
"name": "field_0",
"type": "string"
diff --git a/avro/src/serde/deser_schema/record.rs
b/avro/src/serde/deser_schema/record.rs
index 86e6000..f2771f3 100644
--- a/avro/src/serde/deser_schema/record.rs
+++ b/avro/src/serde/deser_schema/record.rs
@@ -89,11 +89,28 @@ impl<'de, 's, 'r, R: Read, S: Borrow<Schema>>
MapAccess<'de> for RecordDeseriali
let State::Value(index) = self.current_field else {
panic!("`next_key_seed` and `next_value_seed` where called in the
wrong error")
};
- let v = seed.deserialize(SchemaAwareDeserializer::new(
- self.reader,
- &self.schema.fields[index].schema,
- self.config,
- )?)?;
+ let schema = &self.schema.fields[index].schema;
+ let v = if let Schema::Record(record) = schema
+ && record.fields.len() == 1
+ && record.fields[0].name == "field_0"
+ && record
+ .attributes
+ .get("org.apache.avro.rust.union_of_records")
+ == Some(&serde_json::Value::Bool(true))
+ {
+ // Most likely a Union of Records
+ seed.deserialize(SchemaAwareDeserializer::new(
+ self.reader,
+ &record.fields[0].schema,
+ self.config,
+ )?)?
+ } else {
+ seed.deserialize(SchemaAwareDeserializer::new(
+ self.reader,
+ schema,
+ self.config,
+ )?)?
+ };
self.current_field = State::Key(index + 1);
Ok(v)
}
diff --git a/avro/src/serde/ser_schema/mod.rs b/avro/src/serde/ser_schema/mod.rs
index 8a1e511..870aa14 100644
--- a/avro/src/serde/ser_schema/mod.rs
+++ b/avro/src/serde/ser_schema/mod.rs
@@ -538,6 +538,11 @@ impl<'s, 'w, W: Write> Serializer for
SchemaAwareSerializer<'s, 'w, W> {
if let Some(Schema::Record(record)) =
union.variants().get(variant_index as usize)
&& record.name.name() == variant
&& record.fields.len() == 1
+ && record.fields[0].name == "field_0"
+ && record
+ .attributes
+ .get("org.apache.avro.rust.union_of_records")
+ == Some(&serde_json::Value::Bool(true))
{
// Union of records
let mut bytes_written = encode_int(variant_index as i32,
&mut *self.writer)?;
diff --git a/avro_derive/Cargo.toml b/avro_derive/Cargo.toml
index e6bb82d..8ac3133 100644
--- a/avro_derive/Cargo.toml
+++ b/avro_derive/Cargo.toml
@@ -47,6 +47,7 @@ rustversion = "1.0.22"
serde = { workspace = true }
trybuild = "1.0.116"
hexdump = "0.1.2"
+macrotest = "1.2.1"
[build-dependencies]
rustversion = "1.0.22"
diff --git a/avro_derive/src/enums/bare_union.rs
b/avro_derive/src/enums/bare_union.rs
index a9e5c93..b0342b2 100644
--- a/avro_derive/src/enums/bare_union.rs
+++ b/avro_derive/src/enums/bare_union.rs
@@ -21,19 +21,32 @@ pub fn get_data_enum_schema_def(
});
match variant.fields {
Fields::Named(named) => {
+ let mut fields = Vec::with_capacity(named.named.len());
for field in named.named {
let ident = field_attrs
.rename_all
.or(container_attrs.rename_all_fields)
.apply_to_field(&field.ident.unwrap().to_string());
let schema_expr = type_to_schema_expr(&field.ty)?;
- variant_expr.push(quote! {
-
fields.push(::apache_avro::schema::RecordField::builder()
+ fields.push(quote! {
+ ::apache_avro::schema::RecordField::builder()
.name(#ident.to_string())
.schema(#schema_expr)
- .build())
+ .build()
});
}
+
+ let schema_expr = quote! {
+ ::apache_avro::schema::Schema::Record(
+ ::apache_avro::schema::RecordSchema::builder()
+
.name(::apache_avro::schema::Name::new_with_enclosing_namespace(#name,
enclosing_namespace).expect(&format!("Unable to parse variant record name for
schema {}", #name)[..]))
+ .fields(vec![
+ #(#fields,)*
+ ])
+ .build()
+ )
+ };
+ variant_expr.push(schema_expr);
}
Fields::Unnamed(unnamed) => {
if unnamed.unnamed.is_empty() {
diff --git a/avro_derive/src/enums/mod.rs b/avro_derive/src/enums/mod.rs
index 83af7a4..e9c2418 100644
--- a/avro_derive/src/enums/mod.rs
+++ b/avro_derive/src/enums/mod.rs
@@ -36,7 +36,7 @@ pub fn get_data_enum_schema_def(
if data_enum.variants.iter().all(|v| Fields::Unit == v.fields) {
plain::schema_def(container_attrs, data_enum, ident_span)
} else {
- union_of_records::get_data_enum_schema_def(container_attrs,
data_enum, ident_span)
+ union_of_records::get_data_enum_schema_def(container_attrs,
data_enum)
}
}
Some(EnumRepr::Enum) => plain::schema_def(container_attrs, data_enum,
ident_span),
@@ -44,7 +44,7 @@ pub fn get_data_enum_schema_def(
bare_union::get_data_enum_schema_def(container_attrs, data_enum,
ident_span)
}
Some(EnumRepr::UnionOfRecords) => {
- union_of_records::get_data_enum_schema_def(container_attrs,
data_enum, ident_span)
+ union_of_records::get_data_enum_schema_def(container_attrs,
data_enum)
}
Some(EnumRepr::RecordTagContent { tag, content }) => {
record_tag_content::get_data_enum_schema_def(container_attrs,
data_enum, tag, content)
diff --git a/avro_derive/src/enums/union_of_records.rs
b/avro_derive/src/enums/union_of_records.rs
index 7b92631..4a68a0e 100644
--- a/avro_derive/src/enums/union_of_records.rs
+++ b/avro_derive/src/enums/union_of_records.rs
@@ -1,14 +1,98 @@
-use crate::attributes::NamedTypeOptions;
-use proc_macro2::{Span, TokenStream};
+use crate::attributes::{NamedTypeOptions, VariantOptions};
+use crate::type_to_schema_expr;
+use proc_macro2::TokenStream;
use quote::quote;
-use syn::DataEnum;
+use syn::spanned::Spanned;
+use syn::{DataEnum, Fields};
pub fn get_data_enum_schema_def(
container_attrs: &NamedTypeOptions,
data_enum: DataEnum,
- ident_span: Span,
) -> Result<TokenStream, Vec<syn::Error>> {
+ let mut variant_expr = Vec::new();
+ for variant in data_enum.variants {
+ let field_attrs = VariantOptions::new(&variant.attrs, variant.span())?;
+ let name = field_attrs.rename.unwrap_or_else(|| {
+ container_attrs
+ .rename_all
+ .apply_to_variant(&variant.ident.to_string())
+ });
+ match variant.fields {
+ Fields::Named(named) => {
+ let mut fields = Vec::with_capacity(named.named.len());
+ for field in named.named {
+ let ident = field_attrs
+ .rename_all
+ .or(container_attrs.rename_all_fields)
+ .apply_to_field(&field.ident.unwrap().to_string());
+ let schema_expr = type_to_schema_expr(&field.ty)?;
+ fields.push(quote! {
+ ::apache_avro::schema::RecordField::builder()
+ .name(#ident.to_string())
+ .schema(#schema_expr)
+ .build()
+ });
+ }
+
+ let schema_expr = quote! {
+ ::apache_avro::schema::Schema::Record(
+ ::apache_avro::schema::RecordSchema::builder()
+
.name(::apache_avro::schema::Name::new_with_enclosing_namespace(#name,
enclosing_namespace).expect(&format!("Unable to parse variant record name for
schema {}", #name)[..]))
+ .fields(vec![
+ #(#fields,)*
+ ])
+ .build()
+ )
+ };
+ variant_expr.push(schema_expr);
+ }
+ Fields::Unnamed(unnamed) => {
+ let mut fields = Vec::with_capacity(unnamed.unnamed.len());
+ for (index, field) in unnamed.unnamed.iter().enumerate() {
+ let field_schema_expr = type_to_schema_expr(&field.ty)?;
+ fields.push(quote! {
+ ::apache_avro::schema::RecordField::builder()
+ .name(format!("field_{}", #index))
+ .schema(#field_schema_expr)
+ .build()
+ });
+ }
+
+ let amount_of_fields = unnamed.unnamed.len();
+
+ let schema_expr = quote! {
+ let mut builder =
::apache_avro::schema::RecordSchema::builder()
+
.name(::apache_avro::schema::Name::new_with_enclosing_namespace(#name,
enclosing_namespace).expect(&format!("Unable to parse variant record name for
schema {}", #name)[..]))
+ .fields(vec![
+ #(#fields,)*
+ ]);
+ if #amount_of_fields == 1 {
+ builder =
builder.attributes([("org.apache.avro.rust.union_of_records".to_string(),
::serde_json::value::Value::Bool(true))].into());
+ } else if #amount_of_fields > 1 {
+ builder =
builder.attributes([("org.apache.avro.rust.tuple".to_string(),
::serde_json::value::Value::Bool(true))].into());
+ }
+
+ ::apache_avro::schema::Schema::Record(builder.build())
+ };
+ variant_expr.push(schema_expr);
+ }
+ Fields::Unit => {
+ let schema_expr = quote! {
+ ::apache_avro::schema::Schema::Record(
+ ::apache_avro::schema::RecordSchema::builder()
+
.name(::apache_avro::schema::Name::new_with_enclosing_namespace(#name,
enclosing_namespace).expect(&format!("Unable to parse variant record name for
schema {}", #name)[..]))
+ .build()
+ )
+ };
+ variant_expr.push(schema_expr);
+ }
+ }
+ }
Ok(quote! {
- panic!("Hello world")
+ let mut builder = ::apache_avro::schema::UnionSchema::builder();
+
+ #(builder.variant(#variant_expr).expect("Duplicate Schema found");)*
+
+ ::apache_avro::schema::Schema::Union(builder.build())
})
}
diff --git a/avro_derive/src/lib.rs b/avro_derive/src/lib.rs
index cebfe24..a592f3a 100644
--- a/avro_derive/src/lib.rs
+++ b/avro_derive/src/lib.rs
@@ -239,7 +239,7 @@ fn get_struct_schema_def(
default: #default_value,
aliases: #aliases,
schema: #schema_expr,
- custom_attributes: Default::default(),
+ custom_attributes: ::std::collections::BTreeMap::new(),
});
});
}
@@ -268,23 +268,23 @@ fn get_struct_schema_def(
let schema_def = quote! {
{
- let mut schema_fields = Vec::with_capacity(#minimum_fields);
+ let mut schema_fields =
::std::vec::Vec::with_capacity(#minimum_fields);
#(#record_field_exprs)*
let schema_field_set: ::std::collections::HashSet<_> =
schema_fields.iter().map(|rf| &rf.name).collect();
assert_eq!(schema_fields.len(), schema_field_set.len(), "Duplicate
field names found: {schema_fields:?}");
let name =
::apache_avro::schema::Name::new(#full_schema_name).expect(&format!("Unable to
parse struct name for schema {}", #full_schema_name)[..]);
- let lookup: std::collections::BTreeMap<String, usize> =
schema_fields
+ let lookup: ::std::collections::BTreeMap<String, usize> =
schema_fields
.iter()
.enumerate()
.map(|(position, field)| (field.name.to_owned(), position))
.collect();
-
::apache_avro::schema::Schema::Record(apache_avro::schema::RecordSchema {
+
::apache_avro::schema::Schema::Record(::apache_avro::schema::RecordSchema {
name,
aliases: #record_aliases,
doc: #record_doc,
fields: schema_fields,
lookup,
- attributes: Default::default(),
+ attributes: ::std::collections::BTreeMap::new(),
})
}
};
@@ -475,8 +475,8 @@ fn to_compile_errors(errors: Vec<syn::Error>) ->
proc_macro2::TokenStream {
fn preserve_optional(op: Option<impl quote::ToTokens>) -> TokenStream {
match op {
- Some(tt) => quote! {Some(#tt.into())},
- None => quote! {None},
+ Some(tt) => quote! {::std::option::Option::Some(#tt.into())},
+ None => quote! {::std::option::Option::None},
}
}
@@ -509,25 +509,6 @@ mod tests {
use super::*;
use pretty_assertions::assert_eq;
- #[test]
- fn basic_case() {
- let test_struct = quote! {
- struct A {
- a: i32,
- b: String
- }
- };
-
- match syn::parse2::<DeriveInput>(test_struct) {
- Ok(input) => {
- assert!(derive_avro_schema(input).is_ok())
- }
- Err(error) => panic!(
- "Failed to parse as derive input when it should be able to.
Error: {error:?}"
- ),
- };
- }
-
#[test]
fn tuple_struct_unsupported() {
let test_tuple_struct = quote! {
@@ -597,70 +578,6 @@ mod tests {
};
}
- #[test]
- fn avro_3687_basic_enum_with_default() {
- let basic_enum = quote! {
- enum Basic {
- #[default]
- A,
- B,
- C,
- D
- }
- };
- match syn::parse2::<DeriveInput>(basic_enum) {
- Ok(input) => {
- let derived = derive_avro_schema(input);
- assert!(derived.is_ok());
- assert_eq!(derived.unwrap().to_string(), quote! {
- #[automatically_derived]
- impl ::apache_avro::AvroSchemaComponent for Basic {
- fn get_schema_in_ctxt(
- named_schemas: &mut
::std::collections::HashSet<::apache_avro::schema::Name>,
- enclosing_namespace:
::apache_avro::schema::NamespaceRef
- ) -> ::apache_avro::schema::Schema {
- let name =
::apache_avro::schema::Name::new_with_enclosing_namespace("Basic",
enclosing_namespace)
- .expect(concat!("Unable to parse schema name
", "Basic"));
- if named_schemas.contains(&name) {
- ::apache_avro::schema::Schema::Ref { name }
- } else {
- let enclosing_namespace = name.namespace();
- named_schemas.insert(name.clone());
-
::apache_avro::schema::Schema::Enum(apache_avro::schema::EnumSchema {
- name,
- aliases: ::std::option::Option::None,
- doc: None,
- symbols: vec![
- "A".to_owned(),
- "B".to_owned(),
- "C".to_owned(),
- "D".to_owned()
- ],
- default: Some("A".into()),
- attributes: Default::default(),
- })
- }
- }
-
- fn get_record_fields_in_ctxt(
- named_schemas: &mut
::std::collections::HashSet<::apache_avro::schema::Name>,
- enclosing_namespace:
::apache_avro::schema::NamespaceRef
- ) -> ::std::option::Option
<::std::vec::Vec<::apache_avro::schema::RecordField>> {
- None
- }
-
- fn field_default () ->
::std::option::Option<::serde_json::Value> {
- ::std::option::Option::None
- }
- }
- }.to_string());
- }
- Err(error) => panic!(
- "Failed to parse as derive input when it should be able to.
Error: {error:?}"
- ),
- };
- }
-
#[test]
fn avro_3687_basic_enum_with_default_twice() {
let non_basic_enum = quote! {
@@ -764,113 +681,4 @@ mod tests {
assert_eq!(type_to_schema_expr(&syn::parse2::<Type>(quote!{Vec<T>}).unwrap()).unwrap().to_string(),
quote!{<Vec<T> as ::
apache_avro::AvroSchemaComponent>::get_schema_in_ctxt(named_schemas,
enclosing_namespace)}.to_string());
assert_eq!(type_to_schema_expr(&syn::parse2::<Type>(quote!{AnyType}).unwrap()).unwrap().to_string(),
quote!{<AnyType as ::
apache_avro::AvroSchemaComponent>::get_schema_in_ctxt(named_schemas,
enclosing_namespace)}.to_string());
}
-
- #[test]
- fn test_avro_3709_record_field_attributes() {
- let test_struct = quote! {
- struct A {
- #[serde(alias = "a1", alias = "a2", rename = "a3")]
- #[avro(doc = "a doc", default = "123")]
- a: i32
- }
- };
-
- match syn::parse2::<DeriveInput>(test_struct) {
- Ok(input) => {
- let schema_res = derive_avro_schema(input);
- let expected_token_stream = r#"# [automatically_derived] impl
:: apache_avro :: AvroSchemaComponent for A { fn get_schema_in_ctxt
(named_schemas : & mut :: std :: collections :: HashSet < :: apache_avro ::
schema :: Name > , enclosing_namespace : :: apache_avro :: schema ::
NamespaceRef) -> :: apache_avro :: schema :: Schema { let name = :: apache_avro
:: schema :: Name :: new_with_enclosing_namespace ("A" , enclosing_namespace) .
expect (concat ! ("Unable to parse schema [...]
- let schema_token_stream = schema_res.unwrap().to_string();
- assert_eq!(schema_token_stream, expected_token_stream);
- }
- Err(error) => panic!(
- "Failed to parse as derive input when it should be able to.
Error: {error:?}"
- ),
- };
-
- let test_enum = quote! {
- enum A {
- #[serde(rename = "A3")]
- Item1,
- }
- };
-
- match syn::parse2::<DeriveInput>(test_enum) {
- Ok(input) => {
- let schema_res = derive_avro_schema(input);
- let expected_token_stream = r#"# [automatically_derived] impl
:: apache_avro :: AvroSchemaComponent for A { fn get_schema_in_ctxt
(named_schemas : & mut :: std :: collections :: HashSet < :: apache_avro ::
schema :: Name > , enclosing_namespace : :: apache_avro :: schema ::
NamespaceRef) -> :: apache_avro :: schema :: Schema { let name = :: apache_avro
:: schema :: Name :: new_with_enclosing_namespace ("A" , enclosing_namespace) .
expect (concat ! ("Unable to parse schema [...]
- let schema_token_stream = schema_res.unwrap().to_string();
- assert_eq!(schema_token_stream, expected_token_stream);
- }
- Err(error) => panic!(
- "Failed to parse as derive input when it should be able to.
Error: {error:?}"
- ),
- };
- }
-
- #[test]
- fn test_avro_rs_207_rename_all_attribute() {
- let test_struct = quote! {
- #[serde(rename_all="SCREAMING_SNAKE_CASE")]
- struct A {
- item: i32,
- double_item: i32
- }
- };
-
- match syn::parse2::<DeriveInput>(test_struct) {
- Ok(input) => {
- let schema_res = derive_avro_schema(input);
- let expected_token_stream = r#"# [automatically_derived] impl
:: apache_avro :: AvroSchemaComponent for A { fn get_schema_in_ctxt
(named_schemas : & mut :: std :: collections :: HashSet < :: apache_avro ::
schema :: Name > , enclosing_namespace : :: apache_avro :: schema ::
NamespaceRef) -> :: apache_avro :: schema :: Schema { let name = :: apache_avro
:: schema :: Name :: new_with_enclosing_namespace ("A" , enclosing_namespace) .
expect (concat ! ("Unable to parse schema [...]
- let schema_token_stream = schema_res.unwrap().to_string();
- assert_eq!(schema_token_stream, expected_token_stream);
- }
- Err(error) => panic!(
- "Failed to parse as derive input when it should be able to.
Error: {error:?}"
- ),
- };
-
- let test_enum = quote! {
- #[serde(rename_all="SCREAMING_SNAKE_CASE")]
- enum B {
- Item,
- DoubleItem,
- }
- };
-
- match syn::parse2::<DeriveInput>(test_enum) {
- Ok(input) => {
- let schema_res = derive_avro_schema(input);
- let expected_token_stream = r#"# [automatically_derived] impl
:: apache_avro :: AvroSchemaComponent for B { fn get_schema_in_ctxt
(named_schemas : & mut :: std :: collections :: HashSet < :: apache_avro ::
schema :: Name > , enclosing_namespace : :: apache_avro :: schema ::
NamespaceRef) -> :: apache_avro :: schema :: Schema { let name = :: apache_avro
:: schema :: Name :: new_with_enclosing_namespace ("B" , enclosing_namespace) .
expect (concat ! ("Unable to parse schema [...]
- let schema_token_stream = schema_res.unwrap().to_string();
- assert_eq!(schema_token_stream, expected_token_stream);
- }
- Err(error) => panic!(
- "Failed to parse as derive input when it should be able to.
Error: {error:?}"
- ),
- };
- }
-
- #[test]
- fn test_avro_rs_207_rename_attr_has_priority_over_rename_all_attribute() {
- let test_struct = quote! {
- #[serde(rename_all="SCREAMING_SNAKE_CASE")]
- struct A {
- item: i32,
- #[serde(rename="DoubleItem")]
- double_item: i32
- }
- };
-
- match syn::parse2::<DeriveInput>(test_struct) {
- Ok(input) => {
- let schema_res = derive_avro_schema(input);
- let expected_token_stream = r#"# [automatically_derived] impl
:: apache_avro :: AvroSchemaComponent for A { fn get_schema_in_ctxt
(named_schemas : & mut :: std :: collections :: HashSet < :: apache_avro ::
schema :: Name > , enclosing_namespace : :: apache_avro :: schema ::
NamespaceRef) -> :: apache_avro :: schema :: Schema { let name = :: apache_avro
:: schema :: Name :: new_with_enclosing_namespace ("A" , enclosing_namespace) .
expect (concat ! ("Unable to parse schema [...]
- let schema_token_stream = schema_res.unwrap().to_string();
- assert_eq!(schema_token_stream, expected_token_stream);
- }
- Err(error) => panic!(
- "Failed to parse as derive input when it should be able to.
Error: {error:?}"
- ),
- };
- }
}
diff --git a/avro_derive/tests/ui/avro_rs_373_tag_enum.rs
b/avro_derive/tests/expand.rs
similarity index 87%
copy from avro_derive/tests/ui/avro_rs_373_tag_enum.rs
copy to avro_derive/tests/expand.rs
index 1c5e46a..d972743 100644
--- a/avro_derive/tests/ui/avro_rs_373_tag_enum.rs
+++ b/avro_derive/tests/expand.rs
@@ -15,13 +15,9 @@
// specific language governing permissions and limitations
// under the License.
-use apache_avro::AvroSchema;
+mod expanded;
-#[derive(AvroSchema)]
-#[serde(tag = "bar")]
-enum Foo {
- One,
- Two,
+#[test]
+pub fn expand() {
+ macrotest::expand("tests/expanded/avro_*.rs");
}
-
-pub fn main() {}
diff --git
a/avro_derive/tests/expanded/avro_3687_basic_enum_with_default.expanded.rs
b/avro_derive/tests/expanded/avro_3687_basic_enum_with_default.expanded.rs
new file mode 100644
index 0000000..dc355c1
--- /dev/null
+++ b/avro_derive/tests/expanded/avro_3687_basic_enum_with_default.expanded.rs
@@ -0,0 +1,59 @@
+use apache_avro::AvroSchema;
+#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
+enum Basic {
+ #[default]
+ A,
+ B,
+ C,
+ D,
+}
+#[automatically_derived]
+impl ::apache_avro::AvroSchemaComponent for Basic {
+ fn get_schema_in_ctxt(
+ named_schemas: &mut
::std::collections::HashSet<::apache_avro::schema::Name>,
+ enclosing_namespace: ::apache_avro::schema::NamespaceRef,
+ ) -> ::apache_avro::schema::Schema {
+ let name = ::apache_avro::schema::Name::new_with_enclosing_namespace(
+ "Basic",
+ enclosing_namespace,
+ )
+ .expect("Unable to parse schema name Basic");
+ if named_schemas.contains(&name) {
+ ::apache_avro::schema::Schema::Ref {
+ name,
+ }
+ } else {
+ let enclosing_namespace = name.namespace();
+ named_schemas.insert(name.clone());
+
::apache_avro::schema::Schema::Enum(apache_avro::schema::EnumSchema {
+ name,
+ aliases: ::std::option::Option::None,
+ doc: ::std::option::Option::None,
+ symbols: ::alloc::boxed::box_assume_init_into_vec_unsafe(
+ ::alloc::intrinsics::write_box_via_move(
+ ::alloc::boxed::Box::new_uninit(),
+ ["A".to_owned(), "B".to_owned(), "C".to_owned(),
"D".to_owned()],
+ ),
+ ),
+ default: ::std::option::Option::Some("A".into()),
+ attributes: Default::default(),
+ })
+ }
+ }
+ fn get_record_fields_in_ctxt(
+ named_schemas: &mut
::std::collections::HashSet<::apache_avro::schema::Name>,
+ enclosing_namespace: ::apache_avro::schema::NamespaceRef,
+ ) ->
::std::option::Option<::std::vec::Vec<::apache_avro::schema::RecordField>> {
+ None
+ }
+ fn field_default() -> ::std::option::Option<::serde_json::Value> {
+ ::std::option::Option::None
+ }
+}
+#[automatically_derived]
+impl ::core::default::Default for Basic {
+ #[inline]
+ fn default() -> Basic {
+ Self::A
+ }
+}
diff --git a/avro_derive/tests/ui/avro_rs_373_rename_all_fields.rs
b/avro_derive/tests/expanded/avro_3687_basic_enum_with_default.rs
similarity index 85%
rename from avro_derive/tests/ui/avro_rs_373_rename_all_fields.rs
rename to avro_derive/tests/expanded/avro_3687_basic_enum_with_default.rs
index e705461..21f2617 100644
--- a/avro_derive/tests/ui/avro_rs_373_rename_all_fields.rs
+++ b/avro_derive/tests/expanded/avro_3687_basic_enum_with_default.rs
@@ -17,13 +17,12 @@
use apache_avro::AvroSchema;
-#[derive(AvroSchema)]
-#[serde(rename_all_fields = "UPPERCASE")]
-enum Foo {
- Bar {
- a: String,
- b: i32,
- }
+#[derive(AvroSchema, Default)]
+#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
+enum Basic {
+ #[default]
+ A,
+ B,
+ C,
+ D,
}
-
-pub fn main() {}
diff --git
a/avro_derive/tests/expanded/avro_3709_record_field_attributes.expanded.rs
b/avro_derive/tests/expanded/avro_3709_record_field_attributes.expanded.rs
new file mode 100644
index 0000000..e0e46b5
--- /dev/null
+++ b/avro_derive/tests/expanded/avro_3709_record_field_attributes.expanded.rs
@@ -0,0 +1,192 @@
+use apache_avro::AvroSchema;
+#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
+struct A {
+ #[serde(alias = "a1", alias = "a2", rename = "a3")]
+ #[avro(doc = "a doc", default = "123")]
+ a: i32,
+}
+#[automatically_derived]
+impl ::apache_avro::AvroSchemaComponent for A {
+ fn get_schema_in_ctxt(
+ named_schemas: &mut
::std::collections::HashSet<::apache_avro::schema::Name>,
+ enclosing_namespace: ::apache_avro::schema::NamespaceRef,
+ ) -> ::apache_avro::schema::Schema {
+ let name = ::apache_avro::schema::Name::new_with_enclosing_namespace(
+ "A",
+ enclosing_namespace,
+ )
+ .expect("Unable to parse schema name A");
+ if named_schemas.contains(&name) {
+ ::apache_avro::schema::Schema::Ref {
+ name,
+ }
+ } else {
+ let enclosing_namespace = name.namespace();
+ named_schemas.insert(name.clone());
+ {
+ let mut schema_fields = ::std::vec::Vec::with_capacity(1usize);
+ schema_fields
+ .push(::apache_avro::schema::RecordField {
+ name: "a3".to_string(),
+ doc: ::std::option::Option::Some("a doc".into()),
+ default: Some(
+ ::serde_json::from_str("123")
+ .expect(
+ ::alloc::__export::must_use({
+ ::alloc::fmt::format(
+ format_args!("Invalid JSON:
{0:?}", "123"),
+ )
+ })
+ .as_str(),
+ ),
+ ),
+ aliases:
::alloc::boxed::box_assume_init_into_vec_unsafe(
+ ::alloc::intrinsics::write_box_via_move(
+ ::alloc::boxed::Box::new_uninit(),
+ [
+ "a1".try_into().expect("Alias is invalid"),
+ "a2".try_into().expect("Alias is invalid"),
+ ],
+ ),
+ ),
+ schema: <i32 as
::apache_avro::AvroSchemaComponent>::get_schema_in_ctxt(
+ named_schemas,
+ enclosing_namespace,
+ ),
+ custom_attributes: ::std::collections::BTreeMap::new(),
+ });
+ let schema_field_set: ::std::collections::HashSet<_> =
schema_fields
+ .iter()
+ .map(|rf| &rf.name)
+ .collect();
+ match (&schema_fields.len(), &schema_field_set.len()) {
+ (left_val, right_val) => {
+ if !(*left_val == *right_val) {
+ let kind = ::core::panicking::AssertKind::Eq;
+ ::core::panicking::assert_failed(
+ kind,
+ &*left_val,
+ &*right_val,
+ ::core::option::Option::Some(
+ format_args!(
+ "Duplicate field names found: {0:?}",
schema_fields,
+ ),
+ ),
+ );
+ }
+ }
+ };
+ let name = ::apache_avro::schema::Name::new("A")
+ .expect(
+ &::alloc::__export::must_use({
+ ::alloc::fmt::format(
+ format_args!(
+ "Unable to parse struct name for schema
{0}", "A",
+ ),
+ )
+ })[..],
+ );
+ let lookup: ::std::collections::BTreeMap<String, usize> =
schema_fields
+ .iter()
+ .enumerate()
+ .map(|(position, field)| (field.name.to_owned(), position))
+ .collect();
+
::apache_avro::schema::Schema::Record(::apache_avro::schema::RecordSchema {
+ name,
+ aliases: ::std::option::Option::None,
+ doc: ::std::option::Option::None,
+ fields: schema_fields,
+ lookup,
+ attributes: ::std::collections::BTreeMap::new(),
+ })
+ }
+ }
+ }
+ fn get_record_fields_in_ctxt(
+ named_schemas: &mut
::std::collections::HashSet<::apache_avro::schema::Name>,
+ enclosing_namespace: ::apache_avro::schema::NamespaceRef,
+ ) ->
::std::option::Option<::std::vec::Vec<::apache_avro::schema::RecordField>> {
+ let mut schema_fields = Vec::with_capacity(1usize);
+ schema_fields
+ .push(::apache_avro::schema::RecordField {
+ name: "a3".to_string(),
+ doc: ::std::option::Option::Some("a doc".into()),
+ default: Some(
+ ::serde_json::from_str("123")
+ .expect(
+ ::alloc::__export::must_use({
+ ::alloc::fmt::format(
+ format_args!("Invalid JSON: {0:?}",
"123"),
+ )
+ })
+ .as_str(),
+ ),
+ ),
+ aliases: ::alloc::boxed::box_assume_init_into_vec_unsafe(
+ ::alloc::intrinsics::write_box_via_move(
+ ::alloc::boxed::Box::new_uninit(),
+ [
+ "a1".try_into().expect("Alias is invalid"),
+ "a2".try_into().expect("Alias is invalid"),
+ ],
+ ),
+ ),
+ schema: <i32 as
::apache_avro::AvroSchemaComponent>::get_schema_in_ctxt(
+ named_schemas,
+ enclosing_namespace,
+ ),
+ custom_attributes: ::std::collections::BTreeMap::new(),
+ });
+ Some(schema_fields)
+ }
+ fn field_default() -> ::std::option::Option<::serde_json::Value> {
+ ::std::option::Option::None
+ }
+}
+enum B {
+ #[serde(rename = "A3")]
+ Item1,
+}
+#[automatically_derived]
+impl ::apache_avro::AvroSchemaComponent for B {
+ fn get_schema_in_ctxt(
+ named_schemas: &mut
::std::collections::HashSet<::apache_avro::schema::Name>,
+ enclosing_namespace: ::apache_avro::schema::NamespaceRef,
+ ) -> ::apache_avro::schema::Schema {
+ let name = ::apache_avro::schema::Name::new_with_enclosing_namespace(
+ "B",
+ enclosing_namespace,
+ )
+ .expect("Unable to parse schema name B");
+ if named_schemas.contains(&name) {
+ ::apache_avro::schema::Schema::Ref {
+ name,
+ }
+ } else {
+ let enclosing_namespace = name.namespace();
+ named_schemas.insert(name.clone());
+
::apache_avro::schema::Schema::Enum(apache_avro::schema::EnumSchema {
+ name,
+ aliases: ::std::option::Option::None,
+ doc: ::std::option::Option::None,
+ symbols: ::alloc::boxed::box_assume_init_into_vec_unsafe(
+ ::alloc::intrinsics::write_box_via_move(
+ ::alloc::boxed::Box::new_uninit(),
+ ["A3".to_owned()],
+ ),
+ ),
+ default: ::std::option::Option::None,
+ attributes: Default::default(),
+ })
+ }
+ }
+ fn get_record_fields_in_ctxt(
+ named_schemas: &mut
::std::collections::HashSet<::apache_avro::schema::Name>,
+ enclosing_namespace: ::apache_avro::schema::NamespaceRef,
+ ) ->
::std::option::Option<::std::vec::Vec<::apache_avro::schema::RecordField>> {
+ None
+ }
+ fn field_default() -> ::std::option::Option<::serde_json::Value> {
+ ::std::option::Option::None
+ }
+}
diff --git a/avro_derive/tests/ui/avro_rs_373_tag_content_enum.rs
b/avro_derive/tests/expanded/avro_3709_record_field_attributes.rs
similarity index 78%
copy from avro_derive/tests/ui/avro_rs_373_tag_content_enum.rs
copy to avro_derive/tests/expanded/avro_3709_record_field_attributes.rs
index 2efee54..240d71a 100644
--- a/avro_derive/tests/ui/avro_rs_373_tag_content_enum.rs
+++ b/avro_derive/tests/expanded/avro_3709_record_field_attributes.rs
@@ -18,10 +18,15 @@
use apache_avro::AvroSchema;
#[derive(AvroSchema)]
-#[serde(tag = "bar", content = "spam")]
-enum Foo {
- One,
- Two,
+#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
+struct A {
+ #[serde(alias = "a1", alias = "a2", rename = "a3")]
+ #[avro(doc = "a doc", default = "123")]
+ a: i32,
}
-pub fn main() {}
+#[derive(AvroSchema)]
+enum B {
+ #[serde(rename = "A3")]
+ Item1,
+}
diff --git
a/avro_derive/tests/expanded/avro_rs_207_rename_all_attribute.expanded.rs
b/avro_derive/tests/expanded/avro_rs_207_rename_all_attribute.expanded.rs
new file mode 100644
index 0000000..3da7be9
--- /dev/null
+++ b/avro_derive/tests/expanded/avro_rs_207_rename_all_attribute.expanded.rs
@@ -0,0 +1,180 @@
+use apache_avro::AvroSchema;
+#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
+struct A {
+ item: i32,
+ double_item: i32,
+}
+#[automatically_derived]
+impl ::apache_avro::AvroSchemaComponent for A {
+ fn get_schema_in_ctxt(
+ named_schemas: &mut
::std::collections::HashSet<::apache_avro::schema::Name>,
+ enclosing_namespace: ::apache_avro::schema::NamespaceRef,
+ ) -> ::apache_avro::schema::Schema {
+ let name = ::apache_avro::schema::Name::new_with_enclosing_namespace(
+ "A",
+ enclosing_namespace,
+ )
+ .expect("Unable to parse schema name A");
+ if named_schemas.contains(&name) {
+ ::apache_avro::schema::Schema::Ref {
+ name,
+ }
+ } else {
+ let enclosing_namespace = name.namespace();
+ named_schemas.insert(name.clone());
+ {
+ let mut schema_fields = ::std::vec::Vec::with_capacity(2usize);
+ schema_fields
+ .push(::apache_avro::schema::RecordField {
+ name: "ITEM".to_string(),
+ doc: ::std::option::Option::None,
+ default: <i32 as
::apache_avro::AvroSchemaComponent>::field_default(),
+ aliases: ::std::vec::Vec::new(),
+ schema: <i32 as
::apache_avro::AvroSchemaComponent>::get_schema_in_ctxt(
+ named_schemas,
+ enclosing_namespace,
+ ),
+ custom_attributes: ::std::collections::BTreeMap::new(),
+ });
+ schema_fields
+ .push(::apache_avro::schema::RecordField {
+ name: "DOUBLE_ITEM".to_string(),
+ doc: ::std::option::Option::None,
+ default: <i32 as
::apache_avro::AvroSchemaComponent>::field_default(),
+ aliases: ::std::vec::Vec::new(),
+ schema: <i32 as
::apache_avro::AvroSchemaComponent>::get_schema_in_ctxt(
+ named_schemas,
+ enclosing_namespace,
+ ),
+ custom_attributes: ::std::collections::BTreeMap::new(),
+ });
+ let schema_field_set: ::std::collections::HashSet<_> =
schema_fields
+ .iter()
+ .map(|rf| &rf.name)
+ .collect();
+ match (&schema_fields.len(), &schema_field_set.len()) {
+ (left_val, right_val) => {
+ if !(*left_val == *right_val) {
+ let kind = ::core::panicking::AssertKind::Eq;
+ ::core::panicking::assert_failed(
+ kind,
+ &*left_val,
+ &*right_val,
+ ::core::option::Option::Some(
+ format_args!(
+ "Duplicate field names found: {0:?}",
schema_fields,
+ ),
+ ),
+ );
+ }
+ }
+ };
+ let name = ::apache_avro::schema::Name::new("A")
+ .expect(
+ &::alloc::__export::must_use({
+ ::alloc::fmt::format(
+ format_args!(
+ "Unable to parse struct name for schema
{0}", "A",
+ ),
+ )
+ })[..],
+ );
+ let lookup: ::std::collections::BTreeMap<String, usize> =
schema_fields
+ .iter()
+ .enumerate()
+ .map(|(position, field)| (field.name.to_owned(), position))
+ .collect();
+
::apache_avro::schema::Schema::Record(::apache_avro::schema::RecordSchema {
+ name,
+ aliases: ::std::option::Option::None,
+ doc: ::std::option::Option::None,
+ fields: schema_fields,
+ lookup,
+ attributes: ::std::collections::BTreeMap::new(),
+ })
+ }
+ }
+ }
+ fn get_record_fields_in_ctxt(
+ named_schemas: &mut
::std::collections::HashSet<::apache_avro::schema::Name>,
+ enclosing_namespace: ::apache_avro::schema::NamespaceRef,
+ ) ->
::std::option::Option<::std::vec::Vec<::apache_avro::schema::RecordField>> {
+ let mut schema_fields = Vec::with_capacity(2usize);
+ schema_fields
+ .push(::apache_avro::schema::RecordField {
+ name: "ITEM".to_string(),
+ doc: ::std::option::Option::None,
+ default: <i32 as
::apache_avro::AvroSchemaComponent>::field_default(),
+ aliases: ::std::vec::Vec::new(),
+ schema: <i32 as
::apache_avro::AvroSchemaComponent>::get_schema_in_ctxt(
+ named_schemas,
+ enclosing_namespace,
+ ),
+ custom_attributes: ::std::collections::BTreeMap::new(),
+ });
+ schema_fields
+ .push(::apache_avro::schema::RecordField {
+ name: "DOUBLE_ITEM".to_string(),
+ doc: ::std::option::Option::None,
+ default: <i32 as
::apache_avro::AvroSchemaComponent>::field_default(),
+ aliases: ::std::vec::Vec::new(),
+ schema: <i32 as
::apache_avro::AvroSchemaComponent>::get_schema_in_ctxt(
+ named_schemas,
+ enclosing_namespace,
+ ),
+ custom_attributes: ::std::collections::BTreeMap::new(),
+ });
+ Some(schema_fields)
+ }
+ fn field_default() -> ::std::option::Option<::serde_json::Value> {
+ ::std::option::Option::None
+ }
+}
+#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
+enum B {
+ Item,
+ DoubleItem,
+}
+#[automatically_derived]
+impl ::apache_avro::AvroSchemaComponent for B {
+ fn get_schema_in_ctxt(
+ named_schemas: &mut
::std::collections::HashSet<::apache_avro::schema::Name>,
+ enclosing_namespace: ::apache_avro::schema::NamespaceRef,
+ ) -> ::apache_avro::schema::Schema {
+ let name = ::apache_avro::schema::Name::new_with_enclosing_namespace(
+ "B",
+ enclosing_namespace,
+ )
+ .expect("Unable to parse schema name B");
+ if named_schemas.contains(&name) {
+ ::apache_avro::schema::Schema::Ref {
+ name,
+ }
+ } else {
+ let enclosing_namespace = name.namespace();
+ named_schemas.insert(name.clone());
+
::apache_avro::schema::Schema::Enum(apache_avro::schema::EnumSchema {
+ name,
+ aliases: ::std::option::Option::None,
+ doc: ::std::option::Option::None,
+ symbols: ::alloc::boxed::box_assume_init_into_vec_unsafe(
+ ::alloc::intrinsics::write_box_via_move(
+ ::alloc::boxed::Box::new_uninit(),
+ ["ITEM".to_owned(), "DOUBLE_ITEM".to_owned()],
+ ),
+ ),
+ default: ::std::option::Option::None,
+ attributes: Default::default(),
+ })
+ }
+ }
+ fn get_record_fields_in_ctxt(
+ named_schemas: &mut
::std::collections::HashSet<::apache_avro::schema::Name>,
+ enclosing_namespace: ::apache_avro::schema::NamespaceRef,
+ ) ->
::std::option::Option<::std::vec::Vec<::apache_avro::schema::RecordField>> {
+ None
+ }
+ fn field_default() -> ::std::option::Option<::serde_json::Value> {
+ ::std::option::Option::None
+ }
+}
diff --git a/avro_derive/tests/ui/avro_rs_373_tag_content_enum.rs
b/avro_derive/tests/expanded/avro_rs_207_rename_all_attribute.rs
similarity index 81%
copy from avro_derive/tests/ui/avro_rs_373_tag_content_enum.rs
copy to avro_derive/tests/expanded/avro_rs_207_rename_all_attribute.rs
index 2efee54..6657f60 100644
--- a/avro_derive/tests/ui/avro_rs_373_tag_content_enum.rs
+++ b/avro_derive/tests/expanded/avro_rs_207_rename_all_attribute.rs
@@ -18,10 +18,15 @@
use apache_avro::AvroSchema;
#[derive(AvroSchema)]
-#[serde(tag = "bar", content = "spam")]
-enum Foo {
- One,
- Two,
+#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
+struct A {
+ item: i32,
+ double_item: i32,
}
-pub fn main() {}
+#[derive(AvroSchema)]
+#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
+enum B {
+ Item,
+ DoubleItem,
+}
diff --git
a/avro_derive/tests/expanded/avro_rs_207_rename_attr_over_rename_all_attribute.expanded.rs
b/avro_derive/tests/expanded/avro_rs_207_rename_attr_over_rename_all_attribute.expanded.rs
new file mode 100644
index 0000000..6568d95
--- /dev/null
+++
b/avro_derive/tests/expanded/avro_rs_207_rename_attr_over_rename_all_attribute.expanded.rs
@@ -0,0 +1,133 @@
+use apache_avro::AvroSchema;
+#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
+struct A {
+ item: i32,
+ #[serde(rename = "DoubleItem")]
+ double_item: i32,
+}
+#[automatically_derived]
+impl ::apache_avro::AvroSchemaComponent for A {
+ fn get_schema_in_ctxt(
+ named_schemas: &mut
::std::collections::HashSet<::apache_avro::schema::Name>,
+ enclosing_namespace: ::apache_avro::schema::NamespaceRef,
+ ) -> ::apache_avro::schema::Schema {
+ let name = ::apache_avro::schema::Name::new_with_enclosing_namespace(
+ "A",
+ enclosing_namespace,
+ )
+ .expect("Unable to parse schema name A");
+ if named_schemas.contains(&name) {
+ ::apache_avro::schema::Schema::Ref {
+ name,
+ }
+ } else {
+ let enclosing_namespace = name.namespace();
+ named_schemas.insert(name.clone());
+ {
+ let mut schema_fields = ::std::vec::Vec::with_capacity(2usize);
+ schema_fields
+ .push(::apache_avro::schema::RecordField {
+ name: "ITEM".to_string(),
+ doc: ::std::option::Option::None,
+ default: <i32 as
::apache_avro::AvroSchemaComponent>::field_default(),
+ aliases: ::std::vec::Vec::new(),
+ schema: <i32 as
::apache_avro::AvroSchemaComponent>::get_schema_in_ctxt(
+ named_schemas,
+ enclosing_namespace,
+ ),
+ custom_attributes: ::std::collections::BTreeMap::new(),
+ });
+ schema_fields
+ .push(::apache_avro::schema::RecordField {
+ name: "DoubleItem".to_string(),
+ doc: ::std::option::Option::None,
+ default: <i32 as
::apache_avro::AvroSchemaComponent>::field_default(),
+ aliases: ::std::vec::Vec::new(),
+ schema: <i32 as
::apache_avro::AvroSchemaComponent>::get_schema_in_ctxt(
+ named_schemas,
+ enclosing_namespace,
+ ),
+ custom_attributes: ::std::collections::BTreeMap::new(),
+ });
+ let schema_field_set: ::std::collections::HashSet<_> =
schema_fields
+ .iter()
+ .map(|rf| &rf.name)
+ .collect();
+ match (&schema_fields.len(), &schema_field_set.len()) {
+ (left_val, right_val) => {
+ if !(*left_val == *right_val) {
+ let kind = ::core::panicking::AssertKind::Eq;
+ ::core::panicking::assert_failed(
+ kind,
+ &*left_val,
+ &*right_val,
+ ::core::option::Option::Some(
+ format_args!(
+ "Duplicate field names found: {0:?}",
schema_fields,
+ ),
+ ),
+ );
+ }
+ }
+ };
+ let name = ::apache_avro::schema::Name::new("A")
+ .expect(
+ &::alloc::__export::must_use({
+ ::alloc::fmt::format(
+ format_args!(
+ "Unable to parse struct name for schema
{0}", "A",
+ ),
+ )
+ })[..],
+ );
+ let lookup: ::std::collections::BTreeMap<String, usize> =
schema_fields
+ .iter()
+ .enumerate()
+ .map(|(position, field)| (field.name.to_owned(), position))
+ .collect();
+
::apache_avro::schema::Schema::Record(::apache_avro::schema::RecordSchema {
+ name,
+ aliases: ::std::option::Option::None,
+ doc: ::std::option::Option::None,
+ fields: schema_fields,
+ lookup,
+ attributes: ::std::collections::BTreeMap::new(),
+ })
+ }
+ }
+ }
+ fn get_record_fields_in_ctxt(
+ named_schemas: &mut
::std::collections::HashSet<::apache_avro::schema::Name>,
+ enclosing_namespace: ::apache_avro::schema::NamespaceRef,
+ ) ->
::std::option::Option<::std::vec::Vec<::apache_avro::schema::RecordField>> {
+ let mut schema_fields = Vec::with_capacity(2usize);
+ schema_fields
+ .push(::apache_avro::schema::RecordField {
+ name: "ITEM".to_string(),
+ doc: ::std::option::Option::None,
+ default: <i32 as
::apache_avro::AvroSchemaComponent>::field_default(),
+ aliases: ::std::vec::Vec::new(),
+ schema: <i32 as
::apache_avro::AvroSchemaComponent>::get_schema_in_ctxt(
+ named_schemas,
+ enclosing_namespace,
+ ),
+ custom_attributes: ::std::collections::BTreeMap::new(),
+ });
+ schema_fields
+ .push(::apache_avro::schema::RecordField {
+ name: "DoubleItem".to_string(),
+ doc: ::std::option::Option::None,
+ default: <i32 as
::apache_avro::AvroSchemaComponent>::field_default(),
+ aliases: ::std::vec::Vec::new(),
+ schema: <i32 as
::apache_avro::AvroSchemaComponent>::get_schema_in_ctxt(
+ named_schemas,
+ enclosing_namespace,
+ ),
+ custom_attributes: ::std::collections::BTreeMap::new(),
+ });
+ Some(schema_fields)
+ }
+ fn field_default() -> ::std::option::Option<::serde_json::Value> {
+ ::std::option::Option::None
+ }
+}
diff --git a/avro_derive/tests/ui/avro_rs_373_tag_content_enum.rs
b/avro_derive/tests/expanded/avro_rs_207_rename_attr_over_rename_all_attribute.rs
similarity index 86%
rename from avro_derive/tests/ui/avro_rs_373_tag_content_enum.rs
rename to
avro_derive/tests/expanded/avro_rs_207_rename_attr_over_rename_all_attribute.rs
index 2efee54..283b223 100644
--- a/avro_derive/tests/ui/avro_rs_373_tag_content_enum.rs
+++
b/avro_derive/tests/expanded/avro_rs_207_rename_attr_over_rename_all_attribute.rs
@@ -18,10 +18,9 @@
use apache_avro::AvroSchema;
#[derive(AvroSchema)]
-#[serde(tag = "bar", content = "spam")]
-enum Foo {
- One,
- Two,
+#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
+struct A {
+ item: i32,
+ #[serde(rename = "DoubleItem")]
+ double_item: i32,
}
-
-pub fn main() {}
diff --git a/avro_derive/tests/expanded/avro_rs_xxx_basic.expanded.rs
b/avro_derive/tests/expanded/avro_rs_xxx_basic.expanded.rs
new file mode 100644
index 0000000..11d4cc5
--- /dev/null
+++ b/avro_derive/tests/expanded/avro_rs_xxx_basic.expanded.rs
@@ -0,0 +1,131 @@
+use apache_avro::AvroSchema;
+struct A {
+ a: i32,
+ b: String,
+}
+#[automatically_derived]
+impl ::apache_avro::AvroSchemaComponent for A {
+ fn get_schema_in_ctxt(
+ named_schemas: &mut
::std::collections::HashSet<::apache_avro::schema::Name>,
+ enclosing_namespace: ::apache_avro::schema::NamespaceRef,
+ ) -> ::apache_avro::schema::Schema {
+ let name = ::apache_avro::schema::Name::new_with_enclosing_namespace(
+ "A",
+ enclosing_namespace,
+ )
+ .expect("Unable to parse schema name A");
+ if named_schemas.contains(&name) {
+ ::apache_avro::schema::Schema::Ref {
+ name,
+ }
+ } else {
+ let enclosing_namespace = name.namespace();
+ named_schemas.insert(name.clone());
+ {
+ let mut schema_fields = ::std::vec::Vec::with_capacity(2usize);
+ schema_fields
+ .push(::apache_avro::schema::RecordField {
+ name: "a".to_string(),
+ doc: ::std::option::Option::None,
+ default: <i32 as
::apache_avro::AvroSchemaComponent>::field_default(),
+ aliases: ::std::vec::Vec::new(),
+ schema: <i32 as
::apache_avro::AvroSchemaComponent>::get_schema_in_ctxt(
+ named_schemas,
+ enclosing_namespace,
+ ),
+ custom_attributes: ::std::collections::BTreeMap::new(),
+ });
+ schema_fields
+ .push(::apache_avro::schema::RecordField {
+ name: "b".to_string(),
+ doc: ::std::option::Option::None,
+ default: <String as
::apache_avro::AvroSchemaComponent>::field_default(),
+ aliases: ::std::vec::Vec::new(),
+ schema: <String as
::apache_avro::AvroSchemaComponent>::get_schema_in_ctxt(
+ named_schemas,
+ enclosing_namespace,
+ ),
+ custom_attributes: ::std::collections::BTreeMap::new(),
+ });
+ let schema_field_set: ::std::collections::HashSet<_> =
schema_fields
+ .iter()
+ .map(|rf| &rf.name)
+ .collect();
+ match (&schema_fields.len(), &schema_field_set.len()) {
+ (left_val, right_val) => {
+ if !(*left_val == *right_val) {
+ let kind = ::core::panicking::AssertKind::Eq;
+ ::core::panicking::assert_failed(
+ kind,
+ &*left_val,
+ &*right_val,
+ ::core::option::Option::Some(
+ format_args!(
+ "Duplicate field names found: {0:?}",
schema_fields,
+ ),
+ ),
+ );
+ }
+ }
+ };
+ let name = ::apache_avro::schema::Name::new("A")
+ .expect(
+ &::alloc::__export::must_use({
+ ::alloc::fmt::format(
+ format_args!(
+ "Unable to parse struct name for schema
{0}", "A",
+ ),
+ )
+ })[..],
+ );
+ let lookup: ::std::collections::BTreeMap<String, usize> =
schema_fields
+ .iter()
+ .enumerate()
+ .map(|(position, field)| (field.name.to_owned(), position))
+ .collect();
+
::apache_avro::schema::Schema::Record(::apache_avro::schema::RecordSchema {
+ name,
+ aliases: ::std::option::Option::None,
+ doc: ::std::option::Option::None,
+ fields: schema_fields,
+ lookup,
+ attributes: ::std::collections::BTreeMap::new(),
+ })
+ }
+ }
+ }
+ fn get_record_fields_in_ctxt(
+ named_schemas: &mut
::std::collections::HashSet<::apache_avro::schema::Name>,
+ enclosing_namespace: ::apache_avro::schema::NamespaceRef,
+ ) ->
::std::option::Option<::std::vec::Vec<::apache_avro::schema::RecordField>> {
+ let mut schema_fields = Vec::with_capacity(2usize);
+ schema_fields
+ .push(::apache_avro::schema::RecordField {
+ name: "a".to_string(),
+ doc: ::std::option::Option::None,
+ default: <i32 as
::apache_avro::AvroSchemaComponent>::field_default(),
+ aliases: ::std::vec::Vec::new(),
+ schema: <i32 as
::apache_avro::AvroSchemaComponent>::get_schema_in_ctxt(
+ named_schemas,
+ enclosing_namespace,
+ ),
+ custom_attributes: ::std::collections::BTreeMap::new(),
+ });
+ schema_fields
+ .push(::apache_avro::schema::RecordField {
+ name: "b".to_string(),
+ doc: ::std::option::Option::None,
+ default: <String as
::apache_avro::AvroSchemaComponent>::field_default(),
+ aliases: ::std::vec::Vec::new(),
+ schema: <String as
::apache_avro::AvroSchemaComponent>::get_schema_in_ctxt(
+ named_schemas,
+ enclosing_namespace,
+ ),
+ custom_attributes: ::std::collections::BTreeMap::new(),
+ });
+ Some(schema_fields)
+ }
+ fn field_default() -> ::std::option::Option<::serde_json::Value> {
+ ::std::option::Option::None
+ }
+}
diff --git a/avro_derive/tests/ui/avro_rs_373_tag_enum.rs
b/avro_derive/tests/expanded/avro_rs_xxx_basic.rs
similarity index 92%
copy from avro_derive/tests/ui/avro_rs_373_tag_enum.rs
copy to avro_derive/tests/expanded/avro_rs_xxx_basic.rs
index 1c5e46a..05c4fbd 100644
--- a/avro_derive/tests/ui/avro_rs_373_tag_enum.rs
+++ b/avro_derive/tests/expanded/avro_rs_xxx_basic.rs
@@ -18,10 +18,7 @@
use apache_avro::AvroSchema;
#[derive(AvroSchema)]
-#[serde(tag = "bar")]
-enum Foo {
- One,
- Two,
+struct A {
+ a: i32,
+ b: String,
}
-
-pub fn main() {}
diff --git a/avro_derive/tests/ui/avro_rs_373_tag_enum.rs
b/avro_derive/tests/expanded/mod.rs
similarity index 74%
rename from avro_derive/tests/ui/avro_rs_373_tag_enum.rs
rename to avro_derive/tests/expanded/mod.rs
index 1c5e46a..5715bfd 100644
--- a/avro_derive/tests/ui/avro_rs_373_tag_enum.rs
+++ b/avro_derive/tests/expanded/mod.rs
@@ -1,4 +1,3 @@
-// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
@@ -15,13 +14,10 @@
// specific language governing permissions and limitations
// under the License.
-use apache_avro::AvroSchema;
+#![expect(dead_code, reason = "Only code generation is tested")]
-#[derive(AvroSchema)]
-#[serde(tag = "bar")]
-enum Foo {
- One,
- Two,
-}
-
-pub fn main() {}
+mod avro_3687_basic_enum_with_default;
+mod avro_3709_record_field_attributes;
+mod avro_rs_207_rename_all_attribute;
+mod avro_rs_207_rename_attr_over_rename_all_attribute;
+mod avro_rs_xxx_basic;
diff --git a/avro_derive/tests/ui/avro_rs_226_skip_serializing.stderr
b/avro_derive/tests/ui/avro_rs_226_skip_serializing.stderr
index d5316b5..858fbe4 100644
--- a/avro_derive/tests/ui/avro_rs_226_skip_serializing.stderr
+++ b/avro_derive/tests/ui/avro_rs_226_skip_serializing.stderr
@@ -1,4 +1,4 @@
-error: `#[serde(skip_serializing)]` and `#[serde(skip_serializing_if)]` are
incompatible with `#[avro(default = false)]`
+error: AvroSchema: `#[serde(skip_serializing)]` and
`#[serde(skip_serializing_if)]` are incompatible with `#[avro(default = false)]`
--> tests/ui/avro_rs_226_skip_serializing.rs:24:5
|
24 | / #[serde(skip_serializing)]
diff --git a/avro_derive/tests/ui/avro_rs_226_skip_serializing_if.stderr
b/avro_derive/tests/ui/avro_rs_226_skip_serializing_if.stderr
index f3094d0..1cb8322 100644
--- a/avro_derive/tests/ui/avro_rs_226_skip_serializing_if.stderr
+++ b/avro_derive/tests/ui/avro_rs_226_skip_serializing_if.stderr
@@ -1,4 +1,4 @@
-error: `#[serde(skip_serializing)]` and `#[serde(skip_serializing_if)]` are
incompatible with `#[avro(default = false)]`
+error: AvroSchema: `#[serde(skip_serializing)]` and
`#[serde(skip_serializing_if)]` are incompatible with `#[avro(default = false)]`
--> tests/ui/avro_rs_226_skip_serializing_if.rs:23:5
|
23 | / #[serde(skip_serializing_if = "Option::is_none")]
diff --git a/avro_derive/tests/ui/avro_rs_373_alias.stderr
b/avro_derive/tests/ui/avro_rs_373_alias.stderr
index 3c741f2..87d2e94 100644
--- a/avro_derive/tests/ui/avro_rs_373_alias.stderr
+++ b/avro_derive/tests/ui/avro_rs_373_alias.stderr
@@ -7,7 +7,7 @@ warning: `#[avro(alias = "..")]` is deprecated
|
= help: Use `#[serde(alias = "..")]` instead
-error: `#[avro(alias = "..")]` must match `#[serde(alias = "..")]`, it's also
deprecated. Please use only `#[serde(alias = "..")]`
+error: AvroSchema: `#[avro(alias = "..")]` must match `#[serde(alias =
"..")]`, it's also deprecated. Please use only `#[serde(alias = "..")]`
--> tests/ui/avro_rs_373_alias.rs:22:5
|
22 | / #[avro(alias = "c")]
diff --git a/avro_derive/tests/ui/avro_rs_373_field_rename.stderr
b/avro_derive/tests/ui/avro_rs_373_field_rename.stderr
index 2429447..68147c7 100644
--- a/avro_derive/tests/ui/avro_rs_373_field_rename.stderr
+++ b/avro_derive/tests/ui/avro_rs_373_field_rename.stderr
@@ -7,7 +7,7 @@ warning: `#[avro(rename = "..")]` is deprecated
|
= help: Use `#[serde(rename = "..")]` instead
-error: `#[avro(rename = "..")]` must match `#[serde(rename = "..")]`, it's
also deprecated. Please use only `#[serde(rename = "..")]`
+error: AvroSchema: `#[avro(rename = "..")]` must match `#[serde(rename =
"..")]`, it's also deprecated. Please use only `#[serde(rename = "..")]`
--> tests/ui/avro_rs_373_field_rename.rs:22:5
|
22 | / #[avro(rename = "c")]
diff --git a/avro_derive/tests/ui/avro_rs_373_flatten.stderr
b/avro_derive/tests/ui/avro_rs_373_flatten.stderr
index f9f14e1..12c181f 100644
--- a/avro_derive/tests/ui/avro_rs_373_flatten.stderr
+++ b/avro_derive/tests/ui/avro_rs_373_flatten.stderr
@@ -7,7 +7,7 @@ warning: `#[avro(flatten)]` is deprecated
|
= help: Use `#[serde(flatten)]` instead
-error: `#[avro(flatten)]` requires `#[serde(flatten)]`, it's also deprecated.
Please use only `#[serde(flatten)]`
+error: AvroSchema: `#[avro(flatten)]` requires `#[serde(flatten)]`, it's also
deprecated. Please use only `#[serde(flatten)]`
--> tests/ui/avro_rs_373_flatten.rs:22:5
|
22 | / #[avro(flatten)]
diff --git a/avro_derive/tests/ui/avro_rs_373_name.stderr
b/avro_derive/tests/ui/avro_rs_373_name.stderr
index 26d6a0a..f6de093 100644
--- a/avro_derive/tests/ui/avro_rs_373_name.stderr
+++ b/avro_derive/tests/ui/avro_rs_373_name.stderr
@@ -10,7 +10,7 @@ warning: `#[avro(name = "...")]` is deprecated.
|
= help: Use `#[serde(rename = "...")]` instead.
-error: #[avro(name = "..")] must match #[serde(rename = "..")], it's also
deprecated. Please use only `#[serde(rename = "..")]`
+error: AvroSchema: #[avro(name = "..")] must match #[serde(rename = "..")],
it's also deprecated. Please use only `#[serde(rename = "..")]`
--> tests/ui/avro_rs_373_name.rs:21:1
|
21 | / #[avro(name = "Something")]
diff --git a/avro_derive/tests/ui/avro_rs_373_remote.stderr
b/avro_derive/tests/ui/avro_rs_373_remote.stderr
index fe4fd10..8dbb630 100644
--- a/avro_derive/tests/ui/avro_rs_373_remote.stderr
+++ b/avro_derive/tests/ui/avro_rs_373_remote.stderr
@@ -1,4 +1,4 @@
-error: AvroSchema derive does not support the Serde `remote` attribute
+error: AvroSchema: `#[serde(remote = "..")]` is not supported
--> tests/ui/avro_rs_373_remote.rs:27:1
|
27 | / #[serde(remote = "Foo")]
diff --git a/avro_derive/tests/ui/avro_rs_373_rename_all.stderr
b/avro_derive/tests/ui/avro_rs_373_rename_all.stderr
index 26a8233..4379747 100644
--- a/avro_derive/tests/ui/avro_rs_373_rename_all.stderr
+++ b/avro_derive/tests/ui/avro_rs_373_rename_all.stderr
@@ -10,7 +10,7 @@ warning: `#[avro(rename_all = "..")]` is deprecated
|
= help: Use `#[serde(rename_all = "..")]` instead
-error: #[avro(rename_all = "..")] must match #[serde(rename_all = "..")], it's
also deprecated. Please use only `#[serde(rename_all = "..")]`
+error: AvroSchema: #[avro(rename_all = "..")] must match #[serde(rename_all =
"..")], it's also deprecated. Please use only `#[serde(rename_all = "..")]`
--> tests/ui/avro_rs_373_rename_all.rs:21:1
|
21 | / #[avro(rename_all = "snake_case")]
diff --git a/avro_derive/tests/ui/avro_rs_373_rename_all_fields.stderr
b/avro_derive/tests/ui/avro_rs_373_rename_all_fields.stderr
deleted file mode 100644
index 7a5a531..0000000
--- a/avro_derive/tests/ui/avro_rs_373_rename_all_fields.stderr
+++ /dev/null
@@ -1,5 +0,0 @@
-error: AvroSchema: derive does not work for enums with non unit structs
- --> tests/ui/avro_rs_373_rename_all_fields.rs:22:6
- |
-22 | enum Foo {
- | ^^^
diff --git a/avro_derive/tests/ui/avro_rs_373_skip.stderr
b/avro_derive/tests/ui/avro_rs_373_skip.stderr
index 1f3cfb3..cc5707c 100644
--- a/avro_derive/tests/ui/avro_rs_373_skip.stderr
+++ b/avro_derive/tests/ui/avro_rs_373_skip.stderr
@@ -7,7 +7,7 @@ warning: `#[avro(skip)]` is deprecated
|
= help: Use `#[serde(skip)]` instead
-error: `#[avro(skip)]` requires `#[serde(skip)]`, it's also deprecated. Please
use only `#[serde(skip)]`
+error: AvroSchema: `#[avro(skip)]` requires `#[serde(skip)]`, it's also
deprecated. Please use only `#[serde(skip)]`
--> tests/ui/avro_rs_373_skip.rs:22:5
|
22 | / #[avro(skip)]
diff --git a/avro_derive/tests/ui/avro_rs_373_tag_content_enum.stderr
b/avro_derive/tests/ui/avro_rs_373_tag_content_enum.stderr
deleted file mode 100644
index f3850b6..0000000
--- a/avro_derive/tests/ui/avro_rs_373_tag_content_enum.stderr
+++ /dev/null
@@ -1,9 +0,0 @@
-error: AvroSchema derive does not support changing the tagging Serde generates
(`tag`, `content`, `untagged`, `variant_identifier`, `field_identifier`)
- --> tests/ui/avro_rs_373_tag_content_enum.rs:21:1
- |
-21 | / #[serde(tag = "bar", content = "spam")]
-22 | | enum Foo {
-23 | | One,
-24 | | Two,
-25 | | }
- | |_^
diff --git a/avro_derive/tests/ui/avro_rs_373_tag_enum.stderr
b/avro_derive/tests/ui/avro_rs_373_tag_enum.stderr
deleted file mode 100644
index 3c4bb50..0000000
--- a/avro_derive/tests/ui/avro_rs_373_tag_enum.stderr
+++ /dev/null
@@ -1,9 +0,0 @@
-error: AvroSchema derive does not support changing the tagging Serde generates
(`tag`, `content`, `untagged`, `variant_identifier`, `field_identifier`)
- --> tests/ui/avro_rs_373_tag_enum.rs:21:1
- |
-21 | / #[serde(tag = "bar")]
-22 | | enum Foo {
-23 | | One,
-24 | | Two,
-25 | | }
- | |_^
diff --git a/avro_derive/tests/ui/avro_rs_373_tag_struct.stderr
b/avro_derive/tests/ui/avro_rs_373_tag_struct.stderr
index 5c34abb..9f359c4 100644
--- a/avro_derive/tests/ui/avro_rs_373_tag_struct.stderr
+++ b/avro_derive/tests/ui/avro_rs_373_tag_struct.stderr
@@ -1,4 +1,4 @@
-error: AvroSchema derive does not support changing the tagging Serde generates
(`tag`, `content`, `untagged`, `variant_identifier`, `field_identifier`)
+error: AvroSchema: `#[avro(repr = "..")]`, `#[serde(tag = "..")]`,
`#[serde(content = "..")]`, and `#[serde(untagged)]` are only supported on enums
--> tests/ui/avro_rs_373_tag_struct.rs:21:1
|
21 | / #[serde(tag = "bar")]
diff --git a/avro_derive/tests/ui/avro_rs_373_untagged_enum.stderr
b/avro_derive/tests/ui/avro_rs_373_untagged_enum.stderr
index b3f7e62..fd0b34f 100644
--- a/avro_derive/tests/ui/avro_rs_373_untagged_enum.stderr
+++ b/avro_derive/tests/ui/avro_rs_373_untagged_enum.stderr
@@ -1,9 +1,5 @@
-error: AvroSchema derive does not support changing the tagging Serde generates
(`tag`, `content`, `untagged`, `variant_identifier`, `field_identifier`)
- --> tests/ui/avro_rs_373_untagged_enum.rs:21:1
+error: More than one variant maps to Schema::Null, this is not supported for
bare unions
+ --> tests/ui/avro_rs_373_untagged_enum.rs:22:6
|
-21 | / #[serde(untagged)]
-22 | | enum Foo {
-23 | | One,
-24 | | Two,
-25 | | }
- | |_^
+22 | enum Foo {
+ | ^^^
diff --git a/avro_derive/tests/ui/avro_rs_373_variant_rename.stderr
b/avro_derive/tests/ui/avro_rs_373_variant_rename.stderr
index 4774685..46d055e 100644
--- a/avro_derive/tests/ui/avro_rs_373_variant_rename.stderr
+++ b/avro_derive/tests/ui/avro_rs_373_variant_rename.stderr
@@ -7,7 +7,7 @@ warning: `#[avro(rename = "..")]` is deprecated
|
= help: Use `#[serde(rename = "..")]` instead
-error: `#[avro(rename = "..")]` must match `#[serde(rename = "..")]`, it's
also deprecated. Please use only `#[serde(rename = "..")]`
+error: AvroSchema: `#[avro(rename = "..")]` must match `#[serde(rename =
"..")]`, it's also deprecated. Please use only `#[serde(rename = "..")]`
--> tests/ui/avro_rs_373_variant_rename.rs:23:5
|
23 | / #[avro(rename = "Scam")]
diff --git a/avro_derive/tests/ui/avro_rs_397_with_word_without_serde.stderr
b/avro_derive/tests/ui/avro_rs_397_with_word_without_serde.stderr
index febd45e..b72e923 100644
--- a/avro_derive/tests/ui/avro_rs_397_with_word_without_serde.stderr
+++ b/avro_derive/tests/ui/avro_rs_397_with_word_without_serde.stderr
@@ -1,4 +1,4 @@
-error: `#[avro(with)]` requires `#[serde(with = "some_module")]` or provide a
function to call `#[avro(with = some_fn)]`
+error: AvroSchema: `#[avro(with)]` requires `#[serde(with = "some_module")]`
or provide a function to call `#[avro(with = some_fn)]`
--> tests/ui/avro_rs_397_with_word_without_serde.rs:22:5
|
22 | / #[avro(with)]