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 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}