macro_rules! define_native_enum { ( $registry:expr => $(mod $module_name:ident)? enum $($name:ident)? ($type:tt) { $( $variant:tt )* } [uninitialized] $( [override_send = $override_send:literal] )? $( [override_sync = $override_sync:literal] )? $( [override_copy = $override_copy:literal] )? ) => { ... }; ( $registry:expr => $(mod $module_name:ident)? enum $($name:ident)? ($type:tt) { $( $variant:tt )* } $( [override_send = $override_send:literal] )? $( [override_sync = $override_sync:literal] )? $( [override_copy = $override_copy:literal] )? ) => { ... }; (@fields_tuple $registry:expr => $variant:expr => $type:tt => $name:ident => { $current_field_name:ident : $current_field_type:ty $( , $rest_field_name:ident : $rest_field_type:ty )* } => { $($field_name:ident),* } => $discriminant:literal) => { ... }; (@fields_tuple $registry:expr => $variant:expr => $type:tt => $name:ident => {} => { $($field_name:ident),* } => $discriminant:literal) => { ... }; (@variant $registry:expr => $result:expr => $type:tt => { $name:ident ( $( $field_name:ident : $field_type:ty ),* ) = $discriminant:literal }) => { ... }; (@variant $registry:expr => $result:expr => $type:tt => { $name:ident { $( $field_name:ident : $field_type:ty ),* } = $discriminant:literal }) => { ... }; (@variant $registry:expr => $result:expr => $type:tt => { $name:ident = $discriminant:literal }) => { ... }; }