| 20 | |
| 21 | impl 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(); |