@@ -40,10 +40,29 @@ impl Idx for u32 {
40
40
41
41
#[ macro_export]
42
42
macro_rules! newtype_index {
43
+ // ---- public rules ----
44
+
45
+ // Use default constants
46
+ ( $name: ident) => (
47
+ newtype_index!(
48
+ @type [ $name]
49
+ @max[ :: std:: u32 :: MAX ]
50
+ @debug_name[ unsafe { :: std:: intrinsics:: type_name:: <$name>( ) } ] ) ;
51
+ ) ;
52
+
53
+ // Define any constants
54
+ ( $name: ident { $( $tokens: tt) + } ) => (
55
+ newtype_index!(
56
+ @type [ $name]
57
+ @max[ :: std:: u32 :: MAX ]
58
+ @debug_name[ unsafe { :: std:: intrinsics:: type_name:: <$name>( ) } ]
59
+ $( $tokens) +) ;
60
+ ) ;
61
+
43
62
// ---- private rules ----
44
63
45
64
// Base case, user-defined constants (if any) have already been defined
46
- ( @type [ $type: ident] @max[ $max: expr] @descr [ $descr : expr] ) => (
65
+ ( @type [ $type: ident] @max[ $max: expr] @debug_name [ $debug_name : expr] ) => (
47
66
#[ derive( Copy , Clone , PartialEq , Eq , Hash , PartialOrd , Ord ,
48
67
RustcEncodable , RustcDecodable ) ]
49
68
pub struct $type( u32 ) ;
@@ -60,65 +79,35 @@ macro_rules! newtype_index {
60
79
61
80
impl :: std:: fmt:: Debug for $type {
62
81
fn fmt( & self , fmt: & mut :: std:: fmt:: Formatter ) -> :: std:: fmt:: Result {
63
- write!( fmt, "{}{}" , $descr , self . 0 )
82
+ write!( fmt, "{}{}" , $debug_name , self . 0 )
64
83
}
65
84
}
66
85
) ;
67
86
68
- // Replace existing default for max (as final param)
69
- ( @type [ $type: ident] @max[ $_max : expr] @descr [ $descr : expr] MAX = $max : expr) => (
70
- newtype_index!( @type [ $type] @max[ $max] @descr [ $descr ] ) ;
87
+ // Rewrite final without comma to one that includes comma
88
+ ( @type [ $type: ident] @max[ $max : expr] @debug_name [ $debug_name : expr] $name : ident = $constant : expr) => (
89
+ newtype_index!( @type [ $type] @max[ $max] @debug_name [ $debug_name ] $name = $constant , ) ;
71
90
) ;
72
91
73
- // Replace existing default for max
74
- ( @type [ $type: ident] @max[ $_max: expr] @descr [ $descr : expr] MAX = $max : expr , $ ( $idents : ident = $constants : expr) , * ) => (
75
- newtype_index!( @type [ $type] @max[ $max] @descr [ $descr ] ) ;
92
+ // Rewrite final const without comma to one that includes comma
93
+ ( @type [ $type: ident] @max[ $_max: expr] @debug_name [ $debug_name : expr] const $name : ident = $constant : expr) => (
94
+ newtype_index!( @type [ $type] @max[ $max] @debug_name [ $debug_name ] const $name = $constant , ) ;
76
95
) ;
77
96
78
- // Replace existing default for description (as final param)
79
- ( @type [ $type: ident] @max[ $max : expr] @descr [ $_descr : expr] DESCRIPTION = $descr : expr) => (
80
- newtype_index!( @type [ $type] @max[ $max] @descr [ $descr ] ) ;
97
+ // Replace existing default for max
98
+ ( @type [ $type: ident] @max[ $_max : expr] @debug_name [ $debug_name : expr] MAX = $max : expr, $ ( $tokens : tt ) * ) => (
99
+ newtype_index!( @type [ $type] @max[ $max] @debug_name [ $debug_name ] $ ( tokens ) * ) ;
81
100
) ;
82
101
83
- // Replace existing default for description
84
- ( @type [ $type: ident] @max[ $max: expr] @descr [ $_descr : expr] DESCRIPTION = $descr : expr, $( $idents : ident = $constants : expr ) , * ) => (
85
- newtype_index!( @type [ $type] @max[ $max] @descr [ $descr ] $( $idents = $constants ) , * ) ;
102
+ // Replace existing default for debug_name
103
+ ( @type [ $type: ident] @max[ $max: expr] @debug_name [ $_debug_name : expr] DEBUG_NAME = $debug_name : expr, $( $tokens : tt ) * ) => (
104
+ newtype_index!( @type [ $type] @max[ $max] @debug_name [ $debug_name ] $( $tokens ) * ) ;
86
105
) ;
87
106
88
107
// Assign a user-defined constant (as final param)
89
- ( @type [ $type: ident] @max[ $max: expr] @descr [ $descr : expr] $name: ident = $constant: expr) => (
108
+ ( @type [ $type: ident] @max[ $max: expr] @debug_name [ $debug_name : expr] const $name: ident = $constant: expr, $ ( $tokens : tt ) * ) => (
90
109
pub const $name: $type = $type( $constant) ;
91
- newtype_index!( @type [ $type] @max[ $max] @descr[ $descr] ) ;
92
- ) ;
93
-
94
- // Assign a user-defined constant
95
- ( @type [ $type: ident] @max[ $max: expr] @descr[ $descr: expr] $name: ident = $constant: expr, $( $idents: ident = $constants: expr) ,* ) => (
96
- pub const $name: $type = $type( $constant) ;
97
- newtype_index!( @type [ $type] @max[ $max] @descr[ $descr] $( $idents = $constants) ,* ) ;
98
- ) ;
99
-
100
- // ---- public rules ----
101
-
102
- // Use default constants
103
- ( $name: ident) => (
104
- newtype_index!(
105
- @type [ $name]
106
- @max[ :: std:: u32 :: MAX ]
107
- @descr[ unsafe { :: std:: intrinsics:: type_name:: <$name>( ) } ] ) ;
108
- ) ;
109
-
110
- // Define any constants
111
- ( $name: ident, const { $( $idents: ident = $constants: expr, ) + } ) => (
112
- newtype_index!(
113
- @type [ $name]
114
- @max[ :: std:: u32 :: MAX ]
115
- @descr[ unsafe { :: std:: intrinsics:: type_name:: <$name>( ) } ]
116
- $( $idents = $constants) ,+) ;
117
- ) ;
118
-
119
- // Rewrite missing trailing comma in const to version with trailing comma
120
- ( $name: ident, const { $( $idents: ident = $constants: expr) ,+ } ) => (
121
- newtype_index!( $name, const { $( $idents = $constants, ) + } ) ;
110
+ newtype_index!( @type [ $type] @max[ $max] @debug_name[ $debug_name] $( $tokens) * ) ;
122
111
) ;
123
112
}
124
113
0 commit comments