Skip to content

Commit b492206

Browse files
committed
Make enum generate by VariantDiscriminant derive macro implement Ord + PartialOrd
1 parent aa96e90 commit b492206

File tree

6 files changed

+82
-1
lines changed

6 files changed

+82
-1
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ Please make sure to add your changes to the appropriate categories:
2222

2323
- Added enum-level `#[enumcapsulate(discriminant(…))]` helper attribute for `VariantDiscriminant` derive macro, allowing for customizing `repr = …` and `name = …` for the generated enum.
2424
- Added variant-level `#[enumcapsulate(discriminant(…))]` helper attribute for `VariantDiscriminant` derive macro, allowing for customizing `value = …` and `name = …` for the generated variant.
25+
- Made enum generate by `VariantDiscriminant` derive macro implement `Ord + PartialOrd`.
2526

2627
### Changed
2728

macros/src/enum_deriver.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -618,7 +618,7 @@ impl EnumDeriver {
618618

619619
let discriminant_enum = quote! {
620620
#repr_attr
621-
#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)]
621+
#[derive(Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash, Debug)]
622622
pub enum #discriminant_enum_ident {
623623
#(#discriminant_variants)*
624624
}

tests/derive-tests/variant_discriminant/pass/enum/mixed_variants.out.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,27 @@ impl ::core::clone::Clone for EnumDiscriminant {
3131
}
3232
}
3333
#[automatically_derived]
34+
impl ::core::cmp::Ord for EnumDiscriminant {
35+
#[inline]
36+
fn cmp(&self, other: &EnumDiscriminant) -> ::core::cmp::Ordering {
37+
let __self_tag = ::core::intrinsics::discriminant_value(self);
38+
let __arg1_tag = ::core::intrinsics::discriminant_value(other);
39+
::core::cmp::Ord::cmp(&__self_tag, &__arg1_tag)
40+
}
41+
}
42+
#[automatically_derived]
43+
impl ::core::cmp::PartialOrd for EnumDiscriminant {
44+
#[inline]
45+
fn partial_cmp(
46+
&self,
47+
other: &EnumDiscriminant,
48+
) -> ::core::option::Option<::core::cmp::Ordering> {
49+
let __self_tag = ::core::intrinsics::discriminant_value(self);
50+
let __arg1_tag = ::core::intrinsics::discriminant_value(other);
51+
::core::cmp::PartialOrd::partial_cmp(&__self_tag, &__arg1_tag)
52+
}
53+
}
54+
#[automatically_derived]
3455
impl ::core::cmp::Eq for EnumDiscriminant {
3556
#[inline]
3657
#[doc(hidden)]

tests/derive-tests/variant_discriminant/pass/enum/name.out.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,27 @@ impl ::core::clone::Clone for RenamedDiscriminant {
2323
}
2424
}
2525
#[automatically_derived]
26+
impl ::core::cmp::Ord for RenamedDiscriminant {
27+
#[inline]
28+
fn cmp(&self, other: &RenamedDiscriminant) -> ::core::cmp::Ordering {
29+
let __self_tag = ::core::intrinsics::discriminant_value(self);
30+
let __arg1_tag = ::core::intrinsics::discriminant_value(other);
31+
::core::cmp::Ord::cmp(&__self_tag, &__arg1_tag)
32+
}
33+
}
34+
#[automatically_derived]
35+
impl ::core::cmp::PartialOrd for RenamedDiscriminant {
36+
#[inline]
37+
fn partial_cmp(
38+
&self,
39+
other: &RenamedDiscriminant,
40+
) -> ::core::option::Option<::core::cmp::Ordering> {
41+
let __self_tag = ::core::intrinsics::discriminant_value(self);
42+
let __arg1_tag = ::core::intrinsics::discriminant_value(other);
43+
::core::cmp::PartialOrd::partial_cmp(&__self_tag, &__arg1_tag)
44+
}
45+
}
46+
#[automatically_derived]
2647
impl ::core::cmp::Eq for RenamedDiscriminant {
2748
#[inline]
2849
#[doc(hidden)]

tests/derive-tests/variant_discriminant/pass/enum/repr.out.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,27 @@ impl ::core::clone::Clone for EnumDiscriminant {
2424
}
2525
}
2626
#[automatically_derived]
27+
impl ::core::cmp::Ord for EnumDiscriminant {
28+
#[inline]
29+
fn cmp(&self, other: &EnumDiscriminant) -> ::core::cmp::Ordering {
30+
let __self_tag = ::core::intrinsics::discriminant_value(self);
31+
let __arg1_tag = ::core::intrinsics::discriminant_value(other);
32+
::core::cmp::Ord::cmp(&__self_tag, &__arg1_tag)
33+
}
34+
}
35+
#[automatically_derived]
36+
impl ::core::cmp::PartialOrd for EnumDiscriminant {
37+
#[inline]
38+
fn partial_cmp(
39+
&self,
40+
other: &EnumDiscriminant,
41+
) -> ::core::option::Option<::core::cmp::Ordering> {
42+
let __self_tag = ::core::intrinsics::discriminant_value(self);
43+
let __arg1_tag = ::core::intrinsics::discriminant_value(other);
44+
::core::cmp::PartialOrd::partial_cmp(&__self_tag, &__arg1_tag)
45+
}
46+
}
47+
#[automatically_derived]
2748
impl ::core::cmp::Eq for EnumDiscriminant {
2849
#[inline]
2950
#[doc(hidden)]

tests/derive-tests/variant_discriminant/pass/enum/zero_variants.out.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,23 @@ impl ::core::clone::Clone for EnumDiscriminant {
1111
}
1212
}
1313
#[automatically_derived]
14+
impl ::core::cmp::Ord for EnumDiscriminant {
15+
#[inline]
16+
fn cmp(&self, other: &EnumDiscriminant) -> ::core::cmp::Ordering {
17+
match *self {}
18+
}
19+
}
20+
#[automatically_derived]
21+
impl ::core::cmp::PartialOrd for EnumDiscriminant {
22+
#[inline]
23+
fn partial_cmp(
24+
&self,
25+
other: &EnumDiscriminant,
26+
) -> ::core::option::Option<::core::cmp::Ordering> {
27+
match *self {}
28+
}
29+
}
30+
#[automatically_derived]
1431
impl ::core::cmp::Eq for EnumDiscriminant {
1532
#[inline]
1633
#[doc(hidden)]

0 commit comments

Comments
 (0)