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

Method new

sea-orm-macros/src/derives/active_enum_display.rs:22–64  ·  view source on GitHub ↗
(input: syn::DeriveInput)

Source from the content-addressed store, hash-verified

20
21impl Display {
22 fn new(input: syn::DeriveInput) -> Result<Self, Error> {
23 let ident = input.ident;
24
25 let variant_vec = match input.data {
26 syn::Data::Enum(syn::DataEnum { variants, .. }) => variants,
27 _ => return Err(Error::InputNotEnum),
28 };
29
30 let mut variants = Vec::new();
31 for variant in variant_vec {
32 let mut display_value = variant.ident.to_string().to_token_stream();
33
34 for attr in variant.attrs.iter() {
35 if !attr.path().is_ident("sea_orm") {
36 continue;
37 }
38 attr.parse_nested_meta(|meta| {
39 if meta.path.is_ident("string_value") {
40 meta.value()?.parse::<LitStr>()?;
41 } else if meta.path.is_ident("num_value") {
42 meta.value()?.parse::<LitInt>()?;
43 } else if meta.path.is_ident("display_value") {
44 display_value = meta.value()?.parse::<LitStr>()?.to_token_stream();
45 } else if meta.path.is_ident("rename") {
46 CaseStyle::try_from(&meta)?;
47 } else {
48 return Err(meta.error(format!(
49 "Unknown attribute parameter found: {:?}",
50 meta.path.get_ident()
51 )));
52 }
53
54 Ok(())
55 })
56 .map_err(Error::Syn)?;
57 }
58 variants.push(DisplayVariant {
59 ident: variant.ident,
60 display_value,
61 });
62 }
63 Ok(Display { ident, variants })
64 }
65
66 fn expand(&self) -> syn::Result<TokenStream> {
67 let expanded_impl_active_enum_display = self.impl_active_enum_display();

Callers

nothing calls this directly

Calls 2

pushMethod · 0.80
newFunction · 0.50

Tested by

no test coverage detected