use crate::codegen::r#enum::{expand_enum_from_schema, expand_enum_into_schema};
use crate::codegen::r#struct::{expand_struct_from_schema, expand_struct_into_schema};
use crate::codegen::union::{expand_union_from_schema, expand_union_into_schema};
use crate::parse::parse_type_attrs;
use proc_macro2::TokenStream;
use syn::{Data, DeriveInput};
pub fn expand_into_schema(input: DeriveInput) -> syn::Result<TokenStream> {
let type_attrs = parse_type_attrs(&input.attrs)?;
match &input.data {
Data::Struct(data) => expand_struct_into_schema(&input, &type_attrs, data),
Data::Enum(data) => {
if type_attrs.union {
expand_union_into_schema(&input, &type_attrs, data)
} else {
expand_enum_into_schema(&input, &type_attrs, data)
}
}
Data::Union(_) => Err(syn::Error::new_spanned(
input.ident,
"`union` types are not supported by `IntoSchema`",
)),
}
}
pub fn expand_from_schema(input: DeriveInput) -> syn::Result<TokenStream> {
let type_attrs = parse_type_attrs(&input.attrs)?;
match &input.data {
Data::Struct(data) => expand_struct_from_schema(&input, &type_attrs, data),
Data::Enum(data) => {
if type_attrs.union {
expand_union_from_schema(&input, &type_attrs, data)
} else {
expand_enum_from_schema(&input, &type_attrs, data)
}
}
Data::Union(_) => Err(syn::Error::new_spanned(
input.ident,
"`union` types are not supported by `FromSchema`",
)),
}
}