Added support for enums with negative values

This adds parse and generation support for enums whose discriminant
	value is a negative number. It's responsibility of the library to
	have the appropriate "repr" type.
This commit is contained in:
Marco Mastropaolo 2023-09-19 20:03:05 +02:00
parent 8861b83a97
commit f7c221774b

View File

@ -314,11 +314,20 @@ pub fn collect_enum(ast: &syn::File, result: &mut Vec<RustEnum>) {
for v in &t.variants {
let name = v.ident.to_string();
let mut value = None;
if let Some((_, syn::Expr::Lit(x))) = &v.discriminant {
if let syn::Lit::Int(x) = &x.lit {
match &v.discriminant {
Some((_, syn::Expr::Lit(x))) => if let syn::Lit::Int(x) = &x.lit {
let digits = x.base10_digits().to_string();
value = Some(digits);
}
Some((_, syn::Expr::Unary(u))) if matches!(u.op, syn::UnOp::Neg(_)) => {
if let syn::Expr::Lit(x) = &*u.expr {
if let syn::Lit::Int(x) = &x.lit {
value = Some(format!("-{}", x.base10_digits()));
}
}
}
_ => (),
}
fields.push((name, value));