let name = apache_avro::schema::Name::new(#full_schema_name).expect(&format!("Unable to parse schema name {}", #full_schema_name)[..]).fully_qualified_name(enclosing_namespace);
let name = apache_avro::schema::Name::new(#full_schema_name).expect(&format!("Unable to parse schema name {}", #full_schema_name)[..]).fully_qualified_name(enclosing_namespace);
"Failed to parse as derive input when it should be able to. Error: {:?}",
"Failed to parse as derive input when it should be able to. Error: {:?}",
error
error
),
),
};
};
}
}
#[test]
#[test]
fn tuple_struct_unsupported() {
fn tuple_struct_unsupported() {
let test_tuple_struct = quote! {
let test_tuple_struct = quote! {
struct B (i32, String);
struct B (i32, String);
};
};
match syn::parse2::<DeriveInput>(test_tuple_struct) {
match syn::parse2::<DeriveInput>(test_tuple_struct) {
Ok(mut input) => {
Ok(mut input) => {
assert!(derive_avro_schema(&mut input).is_err())
assert!(derive_avro_schema(&mut input).is_err())
}
}
Err(error) => panic!(
Err(error) => panic!(
"Failed to parse as derive input when it should be able to. Error: {:?}",
"Failed to parse as derive input when it should be able to. Error: {:?}",
error
error
),
),
};
};
}
}
#[test]
#[test]
fn unit_struct_unsupported() {
fn unit_struct_unsupported() {
let test_tuple_struct = quote! {
let test_tuple_struct = quote! {
struct AbsoluteUnit;
struct AbsoluteUnit;
};
};
match syn::parse2::<DeriveInput>(test_tuple_struct) {
match syn::parse2::<DeriveInput>(test_tuple_struct) {
Ok(mut input) => {
Ok(mut input) => {
assert!(derive_avro_schema(&mut input).is_err())
assert!(derive_avro_schema(&mut input).is_err())
}
}
Err(error) => panic!(
Err(error) => panic!(
"Failed to parse as derive input when it should be able to. Error: {:?}",
"Failed to parse as derive input when it should be able to. Error: {:?}",
error
error
),
),
};
};
}
}
#[test]
#[test]
fn struct_with_optional() {
fn struct_with_optional() {
let struct_with_optional = quote! {
let struct_with_optional = quote! {
struct Test4 {
struct Test4 {
a : Option<i32>
a : Option<i32>
}
}
};
};
match syn::parse2::<DeriveInput>(struct_with_optional) {
match syn::parse2::<DeriveInput>(struct_with_optional) {
Ok(mut input) => {
Ok(mut input) => {
assert!(derive_avro_schema(&mut input).is_ok())
assert!(derive_avro_schema(&mut input).is_ok())
}
}
Err(error) => panic!(
Err(error) => panic!(
"Failed to parse as derive input when it should be able to. Error: {:?}",
"Failed to parse as derive input when it should be able to. Error: {:?}",
error
error
),
),
};
};
}
}
#[test]
#[test]
fn test_basic_enum() {
fn test_basic_enum() {
let basic_enum = quote! {
let basic_enum = quote! {
enum Basic {
enum Basic {
A,
A,
B,
B,
C,
C,
D
D
}
}
};
};
match syn::parse2::<DeriveInput>(basic_enum) {
match syn::parse2::<DeriveInput>(basic_enum) {
Ok(mut input) => {
Ok(mut input) => {
assert!(derive_avro_schema(&mut input).is_ok())
assert!(derive_avro_schema(&mut input).is_ok())
}
}
Err(error) => panic!(
Err(error) => panic!(
"Failed to parse as derive input when it should be able to. Error: {:?}",
"Failed to parse as derive input when it should be able to. Error: {:?}",
error
error
),
),
};
};
}
}
#[test]
#[test]
fn test_non_basic_enum() {
fn test_non_basic_enum() {
let non_basic_enum = quote! {
let non_basic_enum = quote! {
enum Basic {
enum Basic {
A(i32),
A(i32),
B,
B,
C,
C,
D
D
}
}
};
};
match syn::parse2::<DeriveInput>(non_basic_enum) {
match syn::parse2::<DeriveInput>(non_basic_enum) {
Ok(mut input) => {
Ok(mut input) => {
assert!(derive_avro_schema(&mut input).is_err())
assert!(derive_avro_schema(&mut input).is_err())
}
}
Err(error) => panic!(
Err(error) => panic!(
"Failed to parse as derive input when it should be able to. Error: {:?}",
"Failed to parse as derive input when it should be able to. Error: {:?}",
error
error
),
),
};
};
}
}
#[test]
#[test]
fn test_namespace() {
fn test_namespace() {
let test_struct = quote! {
let test_struct = quote! {
#[avro(namespace = "namespace.testing")]
#[avro(namespace = "namespace.testing")]
struct A {
struct A {
a: i32,
a: i32,
b: String
b: String
}
}
};
};
match syn::parse2::<DeriveInput>(test_struct) {
match syn::parse2::<DeriveInput>(test_struct) {
Ok(mut input) => {
Ok(mut input) => {
assert!(derive_avro_schema(&mut input).is_ok());
assert!(derive_avro_schema(&mut input).is_ok());
assert!(derive_avro_schema(&mut input)
assert!(derive_avro_schema(&mut input)
.unwrap()
.unwrap()
.to_string()
.to_string()
.contains("namespace.testing"))
.contains("namespace.testing"))
}
}
Err(error) => panic!(
Err(error) => panic!(
"Failed to parse as derive input when it should be able to. Error: {:?}",
"Failed to parse as derive input when it should be able to. Error: {:?}",
error
error
),
),
};
};
}
}
#[test]
#[test]
fn test_reference() {
fn test_reference() {
let test_reference_struct = quote! {
let test_reference_struct = quote! {
struct A<'a> {
struct A<'a> {
a: &'a Vec<i32>,
a: &'a Vec<i32>,
b: &'static str
b: &'static str
}
}
};
};
match syn::parse2::<DeriveInput>(test_reference_struct) {
match syn::parse2::<DeriveInput>(test_reference_struct) {
Ok(mut input) => {
Ok(mut input) => {
assert!(derive_avro_schema(&mut input).is_ok())
assert!(derive_avro_schema(&mut input).is_ok())
}
}
Err(error) => panic!(
Err(error) => panic!(
"Failed to parse as derive input when it should be able to. Error: {:?}",
"Failed to parse as derive input when it should be able to. Error: {:?}",
error
error
),
),
};
};
}
}
#[test]
#[test]
fn test_trait_cast() {
fn test_trait_cast() {
assert_eq!(type_path_schema_expr(&syn::parse2::<TypePath>(quote!{i32}).unwrap()).to_string(), quote!{<i32 as apache_avro::schema::derive::AvroSchemaComponent>::get_schema_in_ctxt(named_schemas, enclosing_namespace)}.to_string());
assert_eq!(type_path_schema_expr(&syn::parse2::<TypePath>(quote!{i32}).unwrap()).to_string(), quote!{<i32 as apache_avro::schema::derive::AvroSchemaComponent>::get_schema_in_ctxt(named_schemas, enclosing_namespace)}.to_string());
assert_eq!(type_path_schema_expr(&syn::parse2::<TypePath>(quote!{Vec<T>}).unwrap()).to_string(), quote!{<Vec<T> as apache_avro::schema::derive::AvroSchemaComponent>::get_schema_in_ctxt(named_schemas, enclosing_namespace)}.to_string());
assert_eq!(type_path_schema_expr(&syn::parse2::<TypePath>(quote!{Vec<T>}).unwrap()).to_string(), quote!{<Vec<T> as apache_avro::schema::derive::AvroSchemaComponent>::get_schema_in_ctxt(named_schemas, enclosing_namespace)}.to_string());
assert_eq!(type_path_schema_expr(&syn::parse2::<TypePath>(quote!{AnyType}).unwrap()).to_string(), quote!{<AnyType as apache_avro::schema::derive::AvroSchemaComponent>::get_schema_in_ctxt(named_schemas, enclosing_namespace)}.to_string());
assert_eq!(type_path_schema_expr(&syn::parse2::<TypePath>(quote!{AnyType}).unwrap()).to_string(), quote!{<AnyType as apache_avro::schema::derive::AvroSchemaComponent>::get_schema_in_ctxt(named_schemas, enclosing_namespace)}.to_string());