mirror of
https://gitlab.com/msrd0/gotham-restful.git
synced 2025-05-09 08:00:41 +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
|
@ -8,8 +8,8 @@ impl ParseData {
|
|||
match self {
|
||||
Self::Struct(fields) => gen_struct(fields),
|
||||
Self::Enum(variants) => gen_enum(variants),
|
||||
Self::Unit => gen_unit(),
|
||||
_ => unimplemented!()
|
||||
Self::Alternatives(alt) => gen_alt(alt),
|
||||
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 {
|
||||
let openapi = path!(::openapi_type::openapi);
|
||||
quote! {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue