Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 11 additions & 7 deletions pdl-compiler/src/backends/rust/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -509,10 +509,11 @@ fn generate_root_packet_decl(
let child_struct = (!children_decl.is_empty()).then(|| {
let children_ids = children_decl.iter().map(|decl| decl.id().unwrap().to_ident());
quote! {
#[derive(Debug, Clone, PartialEq, Eq)]
#[derive(Default, Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum #child_name {
#( #children_ids(#children_ids), )*
#[default]
None,
}
}
Expand All @@ -525,7 +526,7 @@ fn generate_root_packet_decl(
.then(|| generate_specialize_impl(scope, schema, decl, id, &data_fields).unwrap());

quote! {
#[derive(Debug, Clone, PartialEq, Eq)]
#[derive(Default, Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct #name {
#( pub #data_field_ids: #data_field_types, )*
Expand Down Expand Up @@ -849,10 +850,11 @@ fn generate_derived_packet_decl(
let child_struct = (!children_decl.is_empty()).then(|| {
let children_ids = children_decl.iter().map(|decl| decl.id().unwrap().to_ident());
quote! {
#[derive(Debug, Clone, PartialEq, Eq)]
#[derive(Default, Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum #child_name {
#( #children_ids(#children_ids), )*
#[default]
None,
}
}
Expand All @@ -865,7 +867,7 @@ fn generate_derived_packet_decl(
.then(|| generate_specialize_impl(scope, schema, decl, id, &data_fields).unwrap());

quote! {
#[derive(Debug, Clone, PartialEq, Eq)]
#[derive(Default, Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct #name {
#( pub #data_field_ids: #data_field_types, )*
Expand Down Expand Up @@ -1078,10 +1080,12 @@ fn generate_enum_decl(id: &str, tags: &[ast::Tag], width: usize) -> proc_macro2:

quote! {
#repr_u64
#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[derive(Default, Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(try_from = #backing_type_str, into = #backing_type_str))]
pub enum #name {
// No specific value => use the first one as default
#[default]
#(#variants,)*
}

Expand Down Expand Up @@ -1185,7 +1189,7 @@ fn generate_custom_field_decl(

if backing_type.width == width {
quote! {
#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[derive(Default, Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(from = #backing_type_str, into = #backing_type_str))]
pub struct #id(#backing_type);
Expand All @@ -1201,7 +1205,7 @@ fn generate_custom_field_decl(
} else {
let max_value = mask_bits(width, &format!("u{}", backing_type.width));
quote! {
#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[derive(Default, Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(try_from = #backing_type_str, into = #backing_type_str))]
pub struct #id(#backing_type);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ impl<T: std::fmt::Debug> std::fmt::Debug for Private<T> {
T::fmt(&self.0, f)
}
}
#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[derive(Default, Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(from = "u32", into = "u32"))]
pub struct ExactSize(u32);
Expand Down Expand Up @@ -61,7 +61,7 @@ impl From<u32> for ExactSize {
ExactSize(value)
}
}
#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[derive(Default, Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(try_from = "u32", into = "u32"))]
pub struct TruncatedSize(u32);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ impl<T: std::fmt::Debug> std::fmt::Debug for Private<T> {
T::fmt(&self.0, f)
}
}
#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[derive(Default, Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(from = "u32", into = "u32"))]
pub struct ExactSize(u32);
Expand Down Expand Up @@ -61,7 +61,7 @@ impl From<u32> for ExactSize {
ExactSize(value)
}
}
#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[derive(Default, Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(try_from = "u32", into = "u32"))]
pub struct TruncatedSize(u32);
Expand Down
21 changes: 14 additions & 7 deletions pdl-compiler/tests/generated/rust/enum_declaration_big_endian.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,11 @@ impl<T: std::fmt::Debug> std::fmt::Debug for Private<T> {
}
}
#[repr(u64)]
#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[derive(Default, Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(try_from = "u8", into = "u8"))]
pub enum IncompleteTruncatedClosed {
#[default]
A = 0x0,
B = 0x1,
}
Expand Down Expand Up @@ -89,10 +90,11 @@ impl From<IncompleteTruncatedClosed> for u64 {
u8::from(value) as Self
}
}
#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[derive(Default, Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(try_from = "u8", into = "u8"))]
pub enum IncompleteTruncatedOpen {
#[default]
A,
B,
Unknown(Private<u8>),
Expand Down Expand Up @@ -157,10 +159,11 @@ impl From<IncompleteTruncatedOpen> for u64 {
u8::from(value) as Self
}
}
#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[derive(Default, Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(try_from = "u8", into = "u8"))]
pub enum IncompleteTruncatedClosedWithRange {
#[default]
A,
X,
Y,
Expand Down Expand Up @@ -228,10 +231,11 @@ impl From<IncompleteTruncatedClosedWithRange> for u64 {
u8::from(value) as Self
}
}
#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[derive(Default, Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(try_from = "u8", into = "u8"))]
pub enum IncompleteTruncatedOpenWithRange {
#[default]
A,
X,
Y,
Expand Down Expand Up @@ -303,10 +307,11 @@ impl From<IncompleteTruncatedOpenWithRange> for u64 {
}
}
#[repr(u64)]
#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[derive(Default, Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(try_from = "u8", into = "u8"))]
pub enum CompleteTruncated {
#[default]
A = 0x0,
B = 0x1,
C = 0x2,
Expand Down Expand Up @@ -386,10 +391,11 @@ impl From<CompleteTruncated> for u64 {
u8::from(value) as Self
}
}
#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[derive(Default, Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(try_from = "u8", into = "u8"))]
pub enum CompleteTruncatedWithRange {
#[default]
A,
X,
Y,
Expand Down Expand Up @@ -457,10 +463,11 @@ impl From<CompleteTruncatedWithRange> for u64 {
u8::from(value) as Self
}
}
#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[derive(Default, Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(try_from = "u8", into = "u8"))]
pub enum CompleteWithRange {
#[default]
A,
B,
C(Private<u8>),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,11 @@ impl<T: std::fmt::Debug> std::fmt::Debug for Private<T> {
}
}
#[repr(u64)]
#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[derive(Default, Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(try_from = "u8", into = "u8"))]
pub enum IncompleteTruncatedClosed {
#[default]
A = 0x0,
B = 0x1,
}
Expand Down Expand Up @@ -89,10 +90,11 @@ impl From<IncompleteTruncatedClosed> for u64 {
u8::from(value) as Self
}
}
#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[derive(Default, Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(try_from = "u8", into = "u8"))]
pub enum IncompleteTruncatedOpen {
#[default]
A,
B,
Unknown(Private<u8>),
Expand Down Expand Up @@ -157,10 +159,11 @@ impl From<IncompleteTruncatedOpen> for u64 {
u8::from(value) as Self
}
}
#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[derive(Default, Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(try_from = "u8", into = "u8"))]
pub enum IncompleteTruncatedClosedWithRange {
#[default]
A,
X,
Y,
Expand Down Expand Up @@ -228,10 +231,11 @@ impl From<IncompleteTruncatedClosedWithRange> for u64 {
u8::from(value) as Self
}
}
#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[derive(Default, Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(try_from = "u8", into = "u8"))]
pub enum IncompleteTruncatedOpenWithRange {
#[default]
A,
X,
Y,
Expand Down Expand Up @@ -303,10 +307,11 @@ impl From<IncompleteTruncatedOpenWithRange> for u64 {
}
}
#[repr(u64)]
#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[derive(Default, Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(try_from = "u8", into = "u8"))]
pub enum CompleteTruncated {
#[default]
A = 0x0,
B = 0x1,
C = 0x2,
Expand Down Expand Up @@ -386,10 +391,11 @@ impl From<CompleteTruncated> for u64 {
u8::from(value) as Self
}
}
#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[derive(Default, Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(try_from = "u8", into = "u8"))]
pub enum CompleteTruncatedWithRange {
#[default]
A,
X,
Y,
Expand Down Expand Up @@ -457,10 +463,11 @@ impl From<CompleteTruncatedWithRange> for u64 {
u8::from(value) as Self
}
}
#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[derive(Default, Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(try_from = "u8", into = "u8"))]
pub enum CompleteWithRange {
#[default]
A,
B,
C(Private<u8>),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,11 @@ impl<T: std::fmt::Debug> std::fmt::Debug for Private<T> {
}
}
#[repr(u64)]
#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[derive(Default, Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(try_from = "u32", into = "u32"))]
pub enum Foo {
#[default]
FooBar = 0x1,
Baz = 0x2,
}
Expand Down Expand Up @@ -69,7 +70,7 @@ impl From<Foo> for u64 {
u32::from(value) as Self
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[derive(Default, Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Bar {
pub x: [Foo; 5],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,11 @@ impl<T: std::fmt::Debug> std::fmt::Debug for Private<T> {
}
}
#[repr(u64)]
#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[derive(Default, Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(try_from = "u32", into = "u32"))]
pub enum Foo {
#[default]
FooBar = 0x1,
Baz = 0x2,
}
Expand Down Expand Up @@ -69,7 +70,7 @@ impl From<Foo> for u64 {
u32::from(value) as Self
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[derive(Default, Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Bar {
pub x: [Foo; 5],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,11 @@ impl<T: std::fmt::Debug> std::fmt::Debug for Private<T> {
}
}
#[repr(u64)]
#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[derive(Default, Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(try_from = "u32", into = "u32"))]
pub enum Foo {
#[default]
A = 0x1,
B = 0x2,
}
Expand Down Expand Up @@ -69,7 +70,7 @@ impl From<Foo> for u64 {
u32::from(value) as Self
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[derive(Default, Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Bar {
pub x: Foo,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,11 @@ impl<T: std::fmt::Debug> std::fmt::Debug for Private<T> {
}
}
#[repr(u64)]
#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[derive(Default, Debug, Clone, Copy, Hash, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(try_from = "u32", into = "u32"))]
pub enum Foo {
#[default]
A = 0x1,
B = 0x2,
}
Expand Down Expand Up @@ -69,7 +70,7 @@ impl From<Foo> for u64 {
u32::from(value) as Self
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[derive(Default, Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Bar {
pub x: Foo,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ impl<T: std::fmt::Debug> std::fmt::Debug for Private<T> {
T::fmt(&self.0, f)
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[derive(Default, Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Foo {
pub x: [u32; 5],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ impl<T: std::fmt::Debug> std::fmt::Debug for Private<T> {
T::fmt(&self.0, f)
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[derive(Default, Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Foo {
pub x: [u32; 5],
Expand Down
Loading
Loading