diff --git a/openapi_type/tests/fail/tuple_struct.rs b/openapi_type/tests/fail/tuple_struct.rs new file mode 100644 index 0000000..146a236 --- /dev/null +++ b/openapi_type/tests/fail/tuple_struct.rs @@ -0,0 +1,6 @@ +use openapi_type::OpenapiType; + +#[derive(OpenapiType)] +struct Foo(i64, i64); + +fn main() {} diff --git a/openapi_type/tests/fail/tuple_struct.stderr b/openapi_type/tests/fail/tuple_struct.stderr new file mode 100644 index 0000000..b5ceb01 --- /dev/null +++ b/openapi_type/tests/fail/tuple_struct.stderr @@ -0,0 +1,5 @@ +error: #[derive(OpenapiType)] does not support tuple structs + --> $DIR/tuple_struct.rs:4:11 + | +4 | struct Foo(i64, i64); + | ^^^^^^^^^^ diff --git a/openapi_type/tests/fail/tuple_variant.rs b/openapi_type/tests/fail/tuple_variant.rs new file mode 100644 index 0000000..92aa8d7 --- /dev/null +++ b/openapi_type/tests/fail/tuple_variant.rs @@ -0,0 +1,8 @@ +use openapi_type::OpenapiType; + +#[derive(OpenapiType)] +enum Foo { + Pair(i64, i64) +} + +fn main() {} diff --git a/openapi_type/tests/fail/tuple_variant.stderr b/openapi_type/tests/fail/tuple_variant.stderr new file mode 100644 index 0000000..05573cb --- /dev/null +++ b/openapi_type/tests/fail/tuple_variant.stderr @@ -0,0 +1,5 @@ +error: #[derive(OpenapiType)] does not support tuple variants + --> $DIR/tuple_variant.rs:5:6 + | +5 | Pair(i64, i64) + | ^^^^^^^^^^ diff --git a/openapi_type/tests/fail/union.rs b/openapi_type/tests/fail/union.rs new file mode 100644 index 0000000..d011109 --- /dev/null +++ b/openapi_type/tests/fail/union.rs @@ -0,0 +1,9 @@ +use openapi_type::OpenapiType; + +#[derive(OpenapiType)] +union Foo { + signed: i64, + unsigned: u64 +} + +fn main() {} diff --git a/openapi_type/tests/fail/union.stderr b/openapi_type/tests/fail/union.stderr new file mode 100644 index 0000000..f0feb48 --- /dev/null +++ b/openapi_type/tests/fail/union.stderr @@ -0,0 +1,5 @@ +error: #[derive(OpenapiType)] cannot be used on unions + --> $DIR/union.rs:4:1 + | +4 | union Foo { + | ^^^^^ diff --git a/openapi_type/tests/fail/unknown_attribute.rs b/openapi_type/tests/fail/unknown_attribute.rs new file mode 100644 index 0000000..70a4785 --- /dev/null +++ b/openapi_type/tests/fail/unknown_attribute.rs @@ -0,0 +1,7 @@ +use openapi_type::OpenapiType; + +#[derive(OpenapiType)] +#[openapi(pizza)] +struct Foo; + +fn main() {} diff --git a/openapi_type/tests/fail/unknown_attribute.stderr b/openapi_type/tests/fail/unknown_attribute.stderr new file mode 100644 index 0000000..2558768 --- /dev/null +++ b/openapi_type/tests/fail/unknown_attribute.stderr @@ -0,0 +1,5 @@ +error: Unexpected token + --> $DIR/unknown_attribute.rs:4:11 + | +4 | #[openapi(pizza)] + | ^^^^^ diff --git a/openapi_type_derive/src/parser.rs b/openapi_type_derive/src/parser.rs index 5e57736..350fee2 100644 --- a/openapi_type_derive/src/parser.rs +++ b/openapi_type_derive/src/parser.rs @@ -35,7 +35,12 @@ fn parse_named_fields(named_fields: &FieldsNamed) -> syn::Result { pub(super) fn parse_struct(strukt: &DataStruct) -> syn::Result { match &strukt.fields { Fields::Named(named_fields) => parse_named_fields(named_fields), - Fields::Unnamed(_) => unimplemented!(), + Fields::Unnamed(unnamed_fields) => { + return Err(syn::Error::new( + unnamed_fields.span(), + "#[derive(OpenapiType)] does not support tuple structs" + )) + }, Fields::Unit => Ok(ParseData::Unit) } } @@ -50,7 +55,12 @@ pub(super) fn parse_enum(inum: &DataEnum, attrs: &ContainerAttributes) -> syn::R Fields::Named(named_fields) => { types.push((name, parse_named_fields(named_fields)?)); }, - Fields::Unnamed(_unnamed_fields) => unimplemented!(), + Fields::Unnamed(unnamed_fields) => { + return Err(syn::Error::new( + unnamed_fields.span(), + "#[derive(OpenapiType)] does not support tuple variants" + )) + }, Fields::Unit => strings.push(name) } }