Loading src/variant.rs +12 −1 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ pub struct Variant { fields: Fields, /// Annotations for field e.g., `#[serde(rename = "variant")]`. annotations: Vec<String>, discriminant: Option<String>, } impl Variant { Loading @@ -21,6 +22,7 @@ impl Variant { name: name.to_string(), fields: Fields::Empty, annotations: Vec::new(), discriminant: None, } } Loading @@ -45,6 +47,12 @@ impl Variant { self } /// Set the discriminant value for the variant. pub fn discriminant(&mut self, discriminant: impl ToString) -> &mut Self { self.discriminant = Some(discriminant.to_string()); self } /// Formats the variant using the given formatter. pub fn fmt(&self, fmt: &mut Formatter<'_>) -> fmt::Result { for a in &self.annotations { Loading @@ -53,7 +61,10 @@ impl Variant { } write!(fmt, "{}", self.name)?; self.fields.fmt(fmt)?; writeln!(fmt, ",")?; if let Some(ref discriminant) = self.discriminant { write!(fmt, " = {}", discriminant)?; } write!(fmt, ",\n")?; Ok(()) } Loading tests/codegen.rs +18 −0 Original line number Diff line number Diff line Loading @@ -464,6 +464,24 @@ enum IpAddrKind { assert_eq!(scope.to_string(), &expect[1..]); } #[test] fn enum_with_discriminants() { let mut scope = Scope::new(); let enu = scope.new_enum("IpAddrKind").repr("u8"); enu.new_variant("V4").discriminant("4"); enu.new_variant("V6").discriminant("6"); let expect = r#" #[repr(u8)] enum IpAddrKind { V4 = 4, V6 = 6, }"#; assert_eq!(scope.to_string(), &expect[1..]); } #[test] fn enum_with_allow() { let mut scope = Scope::new(); Loading Loading
src/variant.rs +12 −1 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ pub struct Variant { fields: Fields, /// Annotations for field e.g., `#[serde(rename = "variant")]`. annotations: Vec<String>, discriminant: Option<String>, } impl Variant { Loading @@ -21,6 +22,7 @@ impl Variant { name: name.to_string(), fields: Fields::Empty, annotations: Vec::new(), discriminant: None, } } Loading @@ -45,6 +47,12 @@ impl Variant { self } /// Set the discriminant value for the variant. pub fn discriminant(&mut self, discriminant: impl ToString) -> &mut Self { self.discriminant = Some(discriminant.to_string()); self } /// Formats the variant using the given formatter. pub fn fmt(&self, fmt: &mut Formatter<'_>) -> fmt::Result { for a in &self.annotations { Loading @@ -53,7 +61,10 @@ impl Variant { } write!(fmt, "{}", self.name)?; self.fields.fmt(fmt)?; writeln!(fmt, ",")?; if let Some(ref discriminant) = self.discriminant { write!(fmt, " = {}", discriminant)?; } write!(fmt, ",\n")?; Ok(()) } Loading
tests/codegen.rs +18 −0 Original line number Diff line number Diff line Loading @@ -464,6 +464,24 @@ enum IpAddrKind { assert_eq!(scope.to_string(), &expect[1..]); } #[test] fn enum_with_discriminants() { let mut scope = Scope::new(); let enu = scope.new_enum("IpAddrKind").repr("u8"); enu.new_variant("V4").discriminant("4"); enu.new_variant("V6").discriminant("6"); let expect = r#" #[repr(u8)] enum IpAddrKind { V4 = 4, V6 = 6, }"#; assert_eq!(scope.to_string(), &expect[1..]); } #[test] fn enum_with_allow() { let mut scope = Scope::new(); Loading