MCPcopy Create free account
hub / github.com/SeaQL/sea-orm / new

Method new

sea-orm-macros/src/derives/active_enum.rs:32–194  ·  view source on GitHub ↗
(input: syn::DeriveInput)

Source from the content-addressed store, hash-verified

30
31impl ActiveEnum {
32 fn new(input: syn::DeriveInput) -> Result<Self, Error> {
33 let ident_span = input.ident.span();
34 let ident = input.ident;
35
36 let mut enum_name = ident.to_string().to_upper_camel_case();
37 let mut rs_type = Err(Error::TT(quote_spanned! {
38 ident_span => compile_error!("Missing macro attribute `rs_type`");
39 }));
40 let mut db_type = Err(Error::TT(quote_spanned! {
41 ident_span => compile_error!("Missing macro attribute `db_type`");
42 }));
43 let mut rename_all = None;
44
45 input
46 .attrs
47 .iter()
48 .filter(|attr| attr.path().is_ident("sea_orm"))
49 .try_for_each(|attr| {
50 attr.parse_nested_meta(|meta| {
51 if meta.path.is_ident("rs_type") {
52 let litstr: LitStr = meta.value()?.parse()?;
53 rs_type =
54 syn::parse_str::<TokenStream>(&litstr.value()).map_err(Error::Syn);
55 } else if meta.path.is_ident("db_type") {
56 let litstr: LitStr = meta.value()?.parse()?;
57 let s = litstr.value();
58 match s.as_ref() {
59 "Enum" => {
60 db_type = Ok(quote! {
61 Enum {
62 name: <Self as sea_orm::ActiveEnum>::name(),
63 variants: Self::iden_values(),
64 }
65 })
66 }
67 _ => {
68 db_type = syn::parse_str::<TokenStream>(&s).map_err(Error::Syn);
69 }
70 }
71 } else if meta.path.is_ident("enum_name") {
72 let litstr: LitStr = meta.value()?.parse()?;
73 enum_name = litstr.value();
74 } else if meta.path.is_ident("rename_all") {
75 rename_all = Some((&meta).try_into()?);
76 } else {
77 return Err(meta.error(format!(
78 "Unknown attribute parameter found: {:?}",
79 meta.path.get_ident()
80 )));
81 }
82 Ok(())
83 })
84 .map_err(Error::Syn)
85 })?;
86
87 let variant_vec = match input.data {
88 syn::Data::Enum(syn::DataEnum { variants, .. }) => variants,
89 _ => return Err(Error::InputNotEnum),

Callers

nothing calls this directly

Calls 6

filterMethod · 0.80
as_refMethod · 0.80
unwrapMethod · 0.80
pushMethod · 0.80
newFunction · 0.50
parseMethod · 0.45

Tested by

no test coverage detected