postgres_derive/
enums.rs

1use syn::{Error, Fields, Ident};
2
3use crate::{case::RenameRule, overrides::Overrides};
4
5pub struct Variant {
6    pub ident: Ident,
7    pub name: String,
8}
9
10impl Variant {
11    pub fn parse(raw: &syn::Variant, rename_all: Option<RenameRule>) -> Result<Variant, Error> {
12        match raw.fields {
13            Fields::Unit => {}
14            _ => {
15                return Err(Error::new_spanned(
16                    raw,
17                    "non-C-like enums are not supported",
18                ))
19            }
20        }
21        let overrides = Overrides::extract(&raw.attrs, false)?;
22
23        // variant level name override takes precendence over container level rename_all override
24        let name = overrides.name.unwrap_or_else(|| match rename_all {
25            Some(rule) => rule.apply_to_field(&raw.ident.to_string()),
26            None => raw.ident.to_string(),
27        });
28        Ok(Variant {
29            ident: raw.ident.clone(),
30            name,
31        })
32    }
33}