mirror of
https://gitlab.com/msrd0/gotham-restful.git
synced 2025-02-22 20:52:27 +00:00
more enum stuff
[skip ci]
This commit is contained in:
parent
43d3a1cd89
commit
5f60599c41
2 changed files with 85 additions and 2 deletions
|
@ -77,3 +77,68 @@ test_type!(EnumWithOneField = {
|
||||||
},
|
},
|
||||||
"required": ["Success"]
|
"required": ["Success"]
|
||||||
});
|
});
|
||||||
|
|
||||||
|
#[derive(OpenapiType)]
|
||||||
|
enum EnumWithFields {
|
||||||
|
Success { value: isize },
|
||||||
|
Error { msg: String }
|
||||||
|
}
|
||||||
|
test_type!(EnumWithFields = {
|
||||||
|
"title": "EnumWithFields",
|
||||||
|
"oneOf": [{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"Success": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"value": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["value"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["Success"]
|
||||||
|
}, {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"Error": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"msg": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["msg"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["Error"]
|
||||||
|
}]
|
||||||
|
});
|
||||||
|
|
||||||
|
#[derive(OpenapiType)]
|
||||||
|
enum EnumExternallyTagged {
|
||||||
|
Success { value: isize },
|
||||||
|
Error
|
||||||
|
}
|
||||||
|
test_type!(EnumExternallyTagged = {
|
||||||
|
"title": "EnumExternallyTagged",
|
||||||
|
"oneOf": [{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"Success": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"value": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["value"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["Success"]
|
||||||
|
}, {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["Error"]
|
||||||
|
}]
|
||||||
|
});
|
||||||
|
|
|
@ -8,8 +8,8 @@ impl ParseData {
|
||||||
match self {
|
match self {
|
||||||
Self::Struct(fields) => gen_struct(fields),
|
Self::Struct(fields) => gen_struct(fields),
|
||||||
Self::Enum(variants) => gen_enum(variants),
|
Self::Enum(variants) => gen_enum(variants),
|
||||||
Self::Unit => gen_unit(),
|
Self::Alternatives(alt) => gen_alt(alt),
|
||||||
_ => unimplemented!()
|
Self::Unit => gen_unit()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -108,6 +108,24 @@ fn gen_enum(variants: &[LitStr]) -> TokenStream {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn gen_alt(alt: &[ParseData]) -> TokenStream {
|
||||||
|
let openapi = path!(::openapi_type::openapi);
|
||||||
|
let schema = alt.iter().map(|data| data.gen_schema());
|
||||||
|
quote! {
|
||||||
|
{
|
||||||
|
let mut alternatives = <::std::vec::Vec<
|
||||||
|
#openapi::ReferenceOr<#openapi::Schema>
|
||||||
|
>>::new();
|
||||||
|
#(alternatives.push(#openapi::ReferenceOr::Item(
|
||||||
|
::openapi_type::OpenapiSchema::new(#schema).into_schema()
|
||||||
|
));)*
|
||||||
|
#openapi::SchemaKind::OneOf {
|
||||||
|
one_of: alternatives
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn gen_unit() -> TokenStream {
|
fn gen_unit() -> TokenStream {
|
||||||
let openapi = path!(::openapi_type::openapi);
|
let openapi = path!(::openapi_type::openapi);
|
||||||
quote! {
|
quote! {
|
||||||
|
|
Loading…
Add table
Reference in a new issue