/// Helper macro for defining the fields of a c_enum!
///
/// Large enums can easily hit the recursion limit imposed by rustc on macros.
/// This macro defines a bunch of variants which consume a bunch of fields at
/// once with the goal being to reduce the recursion limit to something
/// managable even for large enum definitions.
///
/// This code is generated by scripts/enum-impl.py. Don't edit it manually.
/// Edit the script and regenerate it instead.
#[doc(hidden)]
#[macro_export]
macro_rules! __c_enum_decl_variants {
    (impl($name:ident, $inner:ty, $default:expr)) => {};

    // Match 128 fields
    (
        impl($name:ident, $inner:ty, $default:expr)

        $( #[$attr1:meta] )*
        $field1:ident $( = $value1:expr )? ,

        $( #[$attr2:meta] )*
        $field2:ident $( = $value2:expr )? ,

        $( #[$attr3:meta] )*
        $field3:ident $( = $value3:expr )? ,

        $( #[$attr4:meta] )*
        $field4:ident $( = $value4:expr )? ,

        $( #[$attr5:meta] )*
        $field5:ident $( = $value5:expr )? ,

        $( #[$attr6:meta] )*
        $field6:ident $( = $value6:expr )? ,

        $( #[$attr7:meta] )*
        $field7:ident $( = $value7:expr )? ,

        $( #[$attr8:meta] )*
        $field8:ident $( = $value8:expr )? ,

        $( #[$attr9:meta] )*
        $field9:ident $( = $value9:expr )? ,

        $( #[$attr10:meta] )*
        $field10:ident $( = $value10:expr )? ,

        $( #[$attr11:meta] )*
        $field11:ident $( = $value11:expr )? ,

        $( #[$attr12:meta] )*
        $field12:ident $( = $value12:expr )? ,

        $( #[$attr13:meta] )*
        $field13:ident $( = $value13:expr )? ,

        $( #[$attr14:meta] )*
        $field14:ident $( = $value14:expr )? ,

        $( #[$attr15:meta] )*
        $field15:ident $( = $value15:expr )? ,

        $( #[$attr16:meta] )*
        $field16:ident $( = $value16:expr )? ,

        $( #[$attr17:meta] )*
        $field17:ident $( = $value17:expr )? ,

        $( #[$attr18:meta] )*
        $field18:ident $( = $value18:expr )? ,

        $( #[$attr19:meta] )*
        $field19:ident $( = $value19:expr )? ,

        $( #[$attr20:meta] )*
        $field20:ident $( = $value20:expr )? ,

        $( #[$attr21:meta] )*
        $field21:ident $( = $value21:expr )? ,

        $( #[$attr22:meta] )*
        $field22:ident $( = $value22:expr )? ,

        $( #[$attr23:meta] )*
        $field23:ident $( = $value23:expr )? ,

        $( #[$attr24:meta] )*
        $field24:ident $( = $value24:expr )? ,

        $( #[$attr25:meta] )*
        $field25:ident $( = $value25:expr )? ,

        $( #[$attr26:meta] )*
        $field26:ident $( = $value26:expr )? ,

        $( #[$attr27:meta] )*
        $field27:ident $( = $value27:expr )? ,

        $( #[$attr28:meta] )*
        $field28:ident $( = $value28:expr )? ,

        $( #[$attr29:meta] )*
        $field29:ident $( = $value29:expr )? ,

        $( #[$attr30:meta] )*
        $field30:ident $( = $value30:expr )? ,

        $( #[$attr31:meta] )*
        $field31:ident $( = $value31:expr )? ,

        $( #[$attr32:meta] )*
        $field32:ident $( = $value32:expr )? ,

        $( #[$attr33:meta] )*
        $field33:ident $( = $value33:expr )? ,

        $( #[$attr34:meta] )*
        $field34:ident $( = $value34:expr )? ,

        $( #[$attr35:meta] )*
        $field35:ident $( = $value35:expr )? ,

        $( #[$attr36:meta] )*
        $field36:ident $( = $value36:expr )? ,

        $( #[$attr37:meta] )*
        $field37:ident $( = $value37:expr )? ,

        $( #[$attr38:meta] )*
        $field38:ident $( = $value38:expr )? ,

        $( #[$attr39:meta] )*
        $field39:ident $( = $value39:expr )? ,

        $( #[$attr40:meta] )*
        $field40:ident $( = $value40:expr )? ,

        $( #[$attr41:meta] )*
        $field41:ident $( = $value41:expr )? ,

        $( #[$attr42:meta] )*
        $field42:ident $( = $value42:expr )? ,

        $( #[$attr43:meta] )*
        $field43:ident $( = $value43:expr )? ,

        $( #[$attr44:meta] )*
        $field44:ident $( = $value44:expr )? ,

        $( #[$attr45:meta] )*
        $field45:ident $( = $value45:expr )? ,

        $( #[$attr46:meta] )*
        $field46:ident $( = $value46:expr )? ,

        $( #[$attr47:meta] )*
        $field47:ident $( = $value47:expr )? ,

        $( #[$attr48:meta] )*
        $field48:ident $( = $value48:expr )? ,

        $( #[$attr49:meta] )*
        $field49:ident $( = $value49:expr )? ,

        $( #[$attr50:meta] )*
        $field50:ident $( = $value50:expr )? ,

        $( #[$attr51:meta] )*
        $field51:ident $( = $value51:expr )? ,

        $( #[$attr52:meta] )*
        $field52:ident $( = $value52:expr )? ,

        $( #[$attr53:meta] )*
        $field53:ident $( = $value53:expr )? ,

        $( #[$attr54:meta] )*
        $field54:ident $( = $value54:expr )? ,

        $( #[$attr55:meta] )*
        $field55:ident $( = $value55:expr )? ,

        $( #[$attr56:meta] )*
        $field56:ident $( = $value56:expr )? ,

        $( #[$attr57:meta] )*
        $field57:ident $( = $value57:expr )? ,

        $( #[$attr58:meta] )*
        $field58:ident $( = $value58:expr )? ,

        $( #[$attr59:meta] )*
        $field59:ident $( = $value59:expr )? ,

        $( #[$attr60:meta] )*
        $field60:ident $( = $value60:expr )? ,

        $( #[$attr61:meta] )*
        $field61:ident $( = $value61:expr )? ,

        $( #[$attr62:meta] )*
        $field62:ident $( = $value62:expr )? ,

        $( #[$attr63:meta] )*
        $field63:ident $( = $value63:expr )? ,

        $( #[$attr64:meta] )*
        $field64:ident $( = $value64:expr )? ,

        $( #[$attr65:meta] )*
        $field65:ident $( = $value65:expr )? ,

        $( #[$attr66:meta] )*
        $field66:ident $( = $value66:expr )? ,

        $( #[$attr67:meta] )*
        $field67:ident $( = $value67:expr )? ,

        $( #[$attr68:meta] )*
        $field68:ident $( = $value68:expr )? ,

        $( #[$attr69:meta] )*
        $field69:ident $( = $value69:expr )? ,

        $( #[$attr70:meta] )*
        $field70:ident $( = $value70:expr )? ,

        $( #[$attr71:meta] )*
        $field71:ident $( = $value71:expr )? ,

        $( #[$attr72:meta] )*
        $field72:ident $( = $value72:expr )? ,

        $( #[$attr73:meta] )*
        $field73:ident $( = $value73:expr )? ,

        $( #[$attr74:meta] )*
        $field74:ident $( = $value74:expr )? ,

        $( #[$attr75:meta] )*
        $field75:ident $( = $value75:expr )? ,

        $( #[$attr76:meta] )*
        $field76:ident $( = $value76:expr )? ,

        $( #[$attr77:meta] )*
        $field77:ident $( = $value77:expr )? ,

        $( #[$attr78:meta] )*
        $field78:ident $( = $value78:expr )? ,

        $( #[$attr79:meta] )*
        $field79:ident $( = $value79:expr )? ,

        $( #[$attr80:meta] )*
        $field80:ident $( = $value80:expr )? ,

        $( #[$attr81:meta] )*
        $field81:ident $( = $value81:expr )? ,

        $( #[$attr82:meta] )*
        $field82:ident $( = $value82:expr )? ,

        $( #[$attr83:meta] )*
        $field83:ident $( = $value83:expr )? ,

        $( #[$attr84:meta] )*
        $field84:ident $( = $value84:expr )? ,

        $( #[$attr85:meta] )*
        $field85:ident $( = $value85:expr )? ,

        $( #[$attr86:meta] )*
        $field86:ident $( = $value86:expr )? ,

        $( #[$attr87:meta] )*
        $field87:ident $( = $value87:expr )? ,

        $( #[$attr88:meta] )*
        $field88:ident $( = $value88:expr )? ,

        $( #[$attr89:meta] )*
        $field89:ident $( = $value89:expr )? ,

        $( #[$attr90:meta] )*
        $field90:ident $( = $value90:expr )? ,

        $( #[$attr91:meta] )*
        $field91:ident $( = $value91:expr )? ,

        $( #[$attr92:meta] )*
        $field92:ident $( = $value92:expr )? ,

        $( #[$attr93:meta] )*
        $field93:ident $( = $value93:expr )? ,

        $( #[$attr94:meta] )*
        $field94:ident $( = $value94:expr )? ,

        $( #[$attr95:meta] )*
        $field95:ident $( = $value95:expr )? ,

        $( #[$attr96:meta] )*
        $field96:ident $( = $value96:expr )? ,

        $( #[$attr97:meta] )*
        $field97:ident $( = $value97:expr )? ,

        $( #[$attr98:meta] )*
        $field98:ident $( = $value98:expr )? ,

        $( #[$attr99:meta] )*
        $field99:ident $( = $value99:expr )? ,

        $( #[$attr100:meta] )*
        $field100:ident $( = $value100:expr )? ,

        $( #[$attr101:meta] )*
        $field101:ident $( = $value101:expr )? ,

        $( #[$attr102:meta] )*
        $field102:ident $( = $value102:expr )? ,

        $( #[$attr103:meta] )*
        $field103:ident $( = $value103:expr )? ,

        $( #[$attr104:meta] )*
        $field104:ident $( = $value104:expr )? ,

        $( #[$attr105:meta] )*
        $field105:ident $( = $value105:expr )? ,

        $( #[$attr106:meta] )*
        $field106:ident $( = $value106:expr )? ,

        $( #[$attr107:meta] )*
        $field107:ident $( = $value107:expr )? ,

        $( #[$attr108:meta] )*
        $field108:ident $( = $value108:expr )? ,

        $( #[$attr109:meta] )*
        $field109:ident $( = $value109:expr )? ,

        $( #[$attr110:meta] )*
        $field110:ident $( = $value110:expr )? ,

        $( #[$attr111:meta] )*
        $field111:ident $( = $value111:expr )? ,

        $( #[$attr112:meta] )*
        $field112:ident $( = $value112:expr )? ,

        $( #[$attr113:meta] )*
        $field113:ident $( = $value113:expr )? ,

        $( #[$attr114:meta] )*
        $field114:ident $( = $value114:expr )? ,

        $( #[$attr115:meta] )*
        $field115:ident $( = $value115:expr )? ,

        $( #[$attr116:meta] )*
        $field116:ident $( = $value116:expr )? ,

        $( #[$attr117:meta] )*
        $field117:ident $( = $value117:expr )? ,

        $( #[$attr118:meta] )*
        $field118:ident $( = $value118:expr )? ,

        $( #[$attr119:meta] )*
        $field119:ident $( = $value119:expr )? ,

        $( #[$attr120:meta] )*
        $field120:ident $( = $value120:expr )? ,

        $( #[$attr121:meta] )*
        $field121:ident $( = $value121:expr )? ,

        $( #[$attr122:meta] )*
        $field122:ident $( = $value122:expr )? ,

        $( #[$attr123:meta] )*
        $field123:ident $( = $value123:expr )? ,

        $( #[$attr124:meta] )*
        $field124:ident $( = $value124:expr )? ,

        $( #[$attr125:meta] )*
        $field125:ident $( = $value125:expr )? ,

        $( #[$attr126:meta] )*
        $field126:ident $( = $value126:expr )? ,

        $( #[$attr127:meta] )*
        $field127:ident $( = $value127:expr )? ,

        $( #[$attr128:meta] )*
        $field128:ident $( = $value128:expr )? ,

        $(
            $( #[$rattr:meta] )*
            $frest:ident $( = $frest_val:expr )?
        ),* $(,)?
    ) => {
        $( #[$attr1] )*
        #[allow(non_upper_case_globals)]
        pub const $field1: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value1, )? $default));

        $( #[$attr2] )*
        #[allow(non_upper_case_globals)]
        pub const $field2: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value2, )? Self::$field1.0 + 1));

        $( #[$attr3] )*
        #[allow(non_upper_case_globals)]
        pub const $field3: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value3, )? Self::$field2.0 + 1));

        $( #[$attr4] )*
        #[allow(non_upper_case_globals)]
        pub const $field4: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value4, )? Self::$field3.0 + 1));

        $( #[$attr5] )*
        #[allow(non_upper_case_globals)]
        pub const $field5: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value5, )? Self::$field4.0 + 1));

        $( #[$attr6] )*
        #[allow(non_upper_case_globals)]
        pub const $field6: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value6, )? Self::$field5.0 + 1));

        $( #[$attr7] )*
        #[allow(non_upper_case_globals)]
        pub const $field7: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value7, )? Self::$field6.0 + 1));

        $( #[$attr8] )*
        #[allow(non_upper_case_globals)]
        pub const $field8: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value8, )? Self::$field7.0 + 1));

        $( #[$attr9] )*
        #[allow(non_upper_case_globals)]
        pub const $field9: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value9, )? Self::$field8.0 + 1));

        $( #[$attr10] )*
        #[allow(non_upper_case_globals)]
        pub const $field10: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value10, )? Self::$field9.0 + 1));

        $( #[$attr11] )*
        #[allow(non_upper_case_globals)]
        pub const $field11: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value11, )? Self::$field10.0 + 1));

        $( #[$attr12] )*
        #[allow(non_upper_case_globals)]
        pub const $field12: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value12, )? Self::$field11.0 + 1));

        $( #[$attr13] )*
        #[allow(non_upper_case_globals)]
        pub const $field13: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value13, )? Self::$field12.0 + 1));

        $( #[$attr14] )*
        #[allow(non_upper_case_globals)]
        pub const $field14: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value14, )? Self::$field13.0 + 1));

        $( #[$attr15] )*
        #[allow(non_upper_case_globals)]
        pub const $field15: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value15, )? Self::$field14.0 + 1));

        $( #[$attr16] )*
        #[allow(non_upper_case_globals)]
        pub const $field16: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value16, )? Self::$field15.0 + 1));

        $( #[$attr17] )*
        #[allow(non_upper_case_globals)]
        pub const $field17: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value17, )? Self::$field16.0 + 1));

        $( #[$attr18] )*
        #[allow(non_upper_case_globals)]
        pub const $field18: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value18, )? Self::$field17.0 + 1));

        $( #[$attr19] )*
        #[allow(non_upper_case_globals)]
        pub const $field19: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value19, )? Self::$field18.0 + 1));

        $( #[$attr20] )*
        #[allow(non_upper_case_globals)]
        pub const $field20: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value20, )? Self::$field19.0 + 1));

        $( #[$attr21] )*
        #[allow(non_upper_case_globals)]
        pub const $field21: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value21, )? Self::$field20.0 + 1));

        $( #[$attr22] )*
        #[allow(non_upper_case_globals)]
        pub const $field22: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value22, )? Self::$field21.0 + 1));

        $( #[$attr23] )*
        #[allow(non_upper_case_globals)]
        pub const $field23: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value23, )? Self::$field22.0 + 1));

        $( #[$attr24] )*
        #[allow(non_upper_case_globals)]
        pub const $field24: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value24, )? Self::$field23.0 + 1));

        $( #[$attr25] )*
        #[allow(non_upper_case_globals)]
        pub const $field25: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value25, )? Self::$field24.0 + 1));

        $( #[$attr26] )*
        #[allow(non_upper_case_globals)]
        pub const $field26: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value26, )? Self::$field25.0 + 1));

        $( #[$attr27] )*
        #[allow(non_upper_case_globals)]
        pub const $field27: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value27, )? Self::$field26.0 + 1));

        $( #[$attr28] )*
        #[allow(non_upper_case_globals)]
        pub const $field28: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value28, )? Self::$field27.0 + 1));

        $( #[$attr29] )*
        #[allow(non_upper_case_globals)]
        pub const $field29: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value29, )? Self::$field28.0 + 1));

        $( #[$attr30] )*
        #[allow(non_upper_case_globals)]
        pub const $field30: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value30, )? Self::$field29.0 + 1));

        $( #[$attr31] )*
        #[allow(non_upper_case_globals)]
        pub const $field31: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value31, )? Self::$field30.0 + 1));

        $( #[$attr32] )*
        #[allow(non_upper_case_globals)]
        pub const $field32: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value32, )? Self::$field31.0 + 1));

        $( #[$attr33] )*
        #[allow(non_upper_case_globals)]
        pub const $field33: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value33, )? Self::$field32.0 + 1));

        $( #[$attr34] )*
        #[allow(non_upper_case_globals)]
        pub const $field34: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value34, )? Self::$field33.0 + 1));

        $( #[$attr35] )*
        #[allow(non_upper_case_globals)]
        pub const $field35: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value35, )? Self::$field34.0 + 1));

        $( #[$attr36] )*
        #[allow(non_upper_case_globals)]
        pub const $field36: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value36, )? Self::$field35.0 + 1));

        $( #[$attr37] )*
        #[allow(non_upper_case_globals)]
        pub const $field37: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value37, )? Self::$field36.0 + 1));

        $( #[$attr38] )*
        #[allow(non_upper_case_globals)]
        pub const $field38: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value38, )? Self::$field37.0 + 1));

        $( #[$attr39] )*
        #[allow(non_upper_case_globals)]
        pub const $field39: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value39, )? Self::$field38.0 + 1));

        $( #[$attr40] )*
        #[allow(non_upper_case_globals)]
        pub const $field40: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value40, )? Self::$field39.0 + 1));

        $( #[$attr41] )*
        #[allow(non_upper_case_globals)]
        pub const $field41: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value41, )? Self::$field40.0 + 1));

        $( #[$attr42] )*
        #[allow(non_upper_case_globals)]
        pub const $field42: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value42, )? Self::$field41.0 + 1));

        $( #[$attr43] )*
        #[allow(non_upper_case_globals)]
        pub const $field43: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value43, )? Self::$field42.0 + 1));

        $( #[$attr44] )*
        #[allow(non_upper_case_globals)]
        pub const $field44: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value44, )? Self::$field43.0 + 1));

        $( #[$attr45] )*
        #[allow(non_upper_case_globals)]
        pub const $field45: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value45, )? Self::$field44.0 + 1));

        $( #[$attr46] )*
        #[allow(non_upper_case_globals)]
        pub const $field46: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value46, )? Self::$field45.0 + 1));

        $( #[$attr47] )*
        #[allow(non_upper_case_globals)]
        pub const $field47: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value47, )? Self::$field46.0 + 1));

        $( #[$attr48] )*
        #[allow(non_upper_case_globals)]
        pub const $field48: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value48, )? Self::$field47.0 + 1));

        $( #[$attr49] )*
        #[allow(non_upper_case_globals)]
        pub const $field49: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value49, )? Self::$field48.0 + 1));

        $( #[$attr50] )*
        #[allow(non_upper_case_globals)]
        pub const $field50: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value50, )? Self::$field49.0 + 1));

        $( #[$attr51] )*
        #[allow(non_upper_case_globals)]
        pub const $field51: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value51, )? Self::$field50.0 + 1));

        $( #[$attr52] )*
        #[allow(non_upper_case_globals)]
        pub const $field52: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value52, )? Self::$field51.0 + 1));

        $( #[$attr53] )*
        #[allow(non_upper_case_globals)]
        pub const $field53: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value53, )? Self::$field52.0 + 1));

        $( #[$attr54] )*
        #[allow(non_upper_case_globals)]
        pub const $field54: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value54, )? Self::$field53.0 + 1));

        $( #[$attr55] )*
        #[allow(non_upper_case_globals)]
        pub const $field55: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value55, )? Self::$field54.0 + 1));

        $( #[$attr56] )*
        #[allow(non_upper_case_globals)]
        pub const $field56: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value56, )? Self::$field55.0 + 1));

        $( #[$attr57] )*
        #[allow(non_upper_case_globals)]
        pub const $field57: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value57, )? Self::$field56.0 + 1));

        $( #[$attr58] )*
        #[allow(non_upper_case_globals)]
        pub const $field58: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value58, )? Self::$field57.0 + 1));

        $( #[$attr59] )*
        #[allow(non_upper_case_globals)]
        pub const $field59: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value59, )? Self::$field58.0 + 1));

        $( #[$attr60] )*
        #[allow(non_upper_case_globals)]
        pub const $field60: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value60, )? Self::$field59.0 + 1));

        $( #[$attr61] )*
        #[allow(non_upper_case_globals)]
        pub const $field61: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value61, )? Self::$field60.0 + 1));

        $( #[$attr62] )*
        #[allow(non_upper_case_globals)]
        pub const $field62: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value62, )? Self::$field61.0 + 1));

        $( #[$attr63] )*
        #[allow(non_upper_case_globals)]
        pub const $field63: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value63, )? Self::$field62.0 + 1));

        $( #[$attr64] )*
        #[allow(non_upper_case_globals)]
        pub const $field64: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value64, )? Self::$field63.0 + 1));

        $( #[$attr65] )*
        #[allow(non_upper_case_globals)]
        pub const $field65: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value65, )? Self::$field64.0 + 1));

        $( #[$attr66] )*
        #[allow(non_upper_case_globals)]
        pub const $field66: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value66, )? Self::$field65.0 + 1));

        $( #[$attr67] )*
        #[allow(non_upper_case_globals)]
        pub const $field67: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value67, )? Self::$field66.0 + 1));

        $( #[$attr68] )*
        #[allow(non_upper_case_globals)]
        pub const $field68: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value68, )? Self::$field67.0 + 1));

        $( #[$attr69] )*
        #[allow(non_upper_case_globals)]
        pub const $field69: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value69, )? Self::$field68.0 + 1));

        $( #[$attr70] )*
        #[allow(non_upper_case_globals)]
        pub const $field70: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value70, )? Self::$field69.0 + 1));

        $( #[$attr71] )*
        #[allow(non_upper_case_globals)]
        pub const $field71: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value71, )? Self::$field70.0 + 1));

        $( #[$attr72] )*
        #[allow(non_upper_case_globals)]
        pub const $field72: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value72, )? Self::$field71.0 + 1));

        $( #[$attr73] )*
        #[allow(non_upper_case_globals)]
        pub const $field73: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value73, )? Self::$field72.0 + 1));

        $( #[$attr74] )*
        #[allow(non_upper_case_globals)]
        pub const $field74: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value74, )? Self::$field73.0 + 1));

        $( #[$attr75] )*
        #[allow(non_upper_case_globals)]
        pub const $field75: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value75, )? Self::$field74.0 + 1));

        $( #[$attr76] )*
        #[allow(non_upper_case_globals)]
        pub const $field76: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value76, )? Self::$field75.0 + 1));

        $( #[$attr77] )*
        #[allow(non_upper_case_globals)]
        pub const $field77: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value77, )? Self::$field76.0 + 1));

        $( #[$attr78] )*
        #[allow(non_upper_case_globals)]
        pub const $field78: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value78, )? Self::$field77.0 + 1));

        $( #[$attr79] )*
        #[allow(non_upper_case_globals)]
        pub const $field79: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value79, )? Self::$field78.0 + 1));

        $( #[$attr80] )*
        #[allow(non_upper_case_globals)]
        pub const $field80: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value80, )? Self::$field79.0 + 1));

        $( #[$attr81] )*
        #[allow(non_upper_case_globals)]
        pub const $field81: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value81, )? Self::$field80.0 + 1));

        $( #[$attr82] )*
        #[allow(non_upper_case_globals)]
        pub const $field82: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value82, )? Self::$field81.0 + 1));

        $( #[$attr83] )*
        #[allow(non_upper_case_globals)]
        pub const $field83: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value83, )? Self::$field82.0 + 1));

        $( #[$attr84] )*
        #[allow(non_upper_case_globals)]
        pub const $field84: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value84, )? Self::$field83.0 + 1));

        $( #[$attr85] )*
        #[allow(non_upper_case_globals)]
        pub const $field85: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value85, )? Self::$field84.0 + 1));

        $( #[$attr86] )*
        #[allow(non_upper_case_globals)]
        pub const $field86: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value86, )? Self::$field85.0 + 1));

        $( #[$attr87] )*
        #[allow(non_upper_case_globals)]
        pub const $field87: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value87, )? Self::$field86.0 + 1));

        $( #[$attr88] )*
        #[allow(non_upper_case_globals)]
        pub const $field88: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value88, )? Self::$field87.0 + 1));

        $( #[$attr89] )*
        #[allow(non_upper_case_globals)]
        pub const $field89: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value89, )? Self::$field88.0 + 1));

        $( #[$attr90] )*
        #[allow(non_upper_case_globals)]
        pub const $field90: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value90, )? Self::$field89.0 + 1));

        $( #[$attr91] )*
        #[allow(non_upper_case_globals)]
        pub const $field91: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value91, )? Self::$field90.0 + 1));

        $( #[$attr92] )*
        #[allow(non_upper_case_globals)]
        pub const $field92: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value92, )? Self::$field91.0 + 1));

        $( #[$attr93] )*
        #[allow(non_upper_case_globals)]
        pub const $field93: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value93, )? Self::$field92.0 + 1));

        $( #[$attr94] )*
        #[allow(non_upper_case_globals)]
        pub const $field94: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value94, )? Self::$field93.0 + 1));

        $( #[$attr95] )*
        #[allow(non_upper_case_globals)]
        pub const $field95: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value95, )? Self::$field94.0 + 1));

        $( #[$attr96] )*
        #[allow(non_upper_case_globals)]
        pub const $field96: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value96, )? Self::$field95.0 + 1));

        $( #[$attr97] )*
        #[allow(non_upper_case_globals)]
        pub const $field97: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value97, )? Self::$field96.0 + 1));

        $( #[$attr98] )*
        #[allow(non_upper_case_globals)]
        pub const $field98: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value98, )? Self::$field97.0 + 1));

        $( #[$attr99] )*
        #[allow(non_upper_case_globals)]
        pub const $field99: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value99, )? Self::$field98.0 + 1));

        $( #[$attr100] )*
        #[allow(non_upper_case_globals)]
        pub const $field100: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value100, )? Self::$field99.0 + 1));

        $( #[$attr101] )*
        #[allow(non_upper_case_globals)]
        pub const $field101: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value101, )? Self::$field100.0 + 1));

        $( #[$attr102] )*
        #[allow(non_upper_case_globals)]
        pub const $field102: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value102, )? Self::$field101.0 + 1));

        $( #[$attr103] )*
        #[allow(non_upper_case_globals)]
        pub const $field103: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value103, )? Self::$field102.0 + 1));

        $( #[$attr104] )*
        #[allow(non_upper_case_globals)]
        pub const $field104: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value104, )? Self::$field103.0 + 1));

        $( #[$attr105] )*
        #[allow(non_upper_case_globals)]
        pub const $field105: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value105, )? Self::$field104.0 + 1));

        $( #[$attr106] )*
        #[allow(non_upper_case_globals)]
        pub const $field106: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value106, )? Self::$field105.0 + 1));

        $( #[$attr107] )*
        #[allow(non_upper_case_globals)]
        pub const $field107: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value107, )? Self::$field106.0 + 1));

        $( #[$attr108] )*
        #[allow(non_upper_case_globals)]
        pub const $field108: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value108, )? Self::$field107.0 + 1));

        $( #[$attr109] )*
        #[allow(non_upper_case_globals)]
        pub const $field109: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value109, )? Self::$field108.0 + 1));

        $( #[$attr110] )*
        #[allow(non_upper_case_globals)]
        pub const $field110: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value110, )? Self::$field109.0 + 1));

        $( #[$attr111] )*
        #[allow(non_upper_case_globals)]
        pub const $field111: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value111, )? Self::$field110.0 + 1));

        $( #[$attr112] )*
        #[allow(non_upper_case_globals)]
        pub const $field112: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value112, )? Self::$field111.0 + 1));

        $( #[$attr113] )*
        #[allow(non_upper_case_globals)]
        pub const $field113: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value113, )? Self::$field112.0 + 1));

        $( #[$attr114] )*
        #[allow(non_upper_case_globals)]
        pub const $field114: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value114, )? Self::$field113.0 + 1));

        $( #[$attr115] )*
        #[allow(non_upper_case_globals)]
        pub const $field115: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value115, )? Self::$field114.0 + 1));

        $( #[$attr116] )*
        #[allow(non_upper_case_globals)]
        pub const $field116: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value116, )? Self::$field115.0 + 1));

        $( #[$attr117] )*
        #[allow(non_upper_case_globals)]
        pub const $field117: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value117, )? Self::$field116.0 + 1));

        $( #[$attr118] )*
        #[allow(non_upper_case_globals)]
        pub const $field118: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value118, )? Self::$field117.0 + 1));

        $( #[$attr119] )*
        #[allow(non_upper_case_globals)]
        pub const $field119: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value119, )? Self::$field118.0 + 1));

        $( #[$attr120] )*
        #[allow(non_upper_case_globals)]
        pub const $field120: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value120, )? Self::$field119.0 + 1));

        $( #[$attr121] )*
        #[allow(non_upper_case_globals)]
        pub const $field121: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value121, )? Self::$field120.0 + 1));

        $( #[$attr122] )*
        #[allow(non_upper_case_globals)]
        pub const $field122: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value122, )? Self::$field121.0 + 1));

        $( #[$attr123] )*
        #[allow(non_upper_case_globals)]
        pub const $field123: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value123, )? Self::$field122.0 + 1));

        $( #[$attr124] )*
        #[allow(non_upper_case_globals)]
        pub const $field124: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value124, )? Self::$field123.0 + 1));

        $( #[$attr125] )*
        #[allow(non_upper_case_globals)]
        pub const $field125: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value125, )? Self::$field124.0 + 1));

        $( #[$attr126] )*
        #[allow(non_upper_case_globals)]
        pub const $field126: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value126, )? Self::$field125.0 + 1));

        $( #[$attr127] )*
        #[allow(non_upper_case_globals)]
        pub const $field127: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value127, )? Self::$field126.0 + 1));

        $( #[$attr128] )*
        #[allow(non_upper_case_globals)]
        pub const $field128: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value128, )? Self::$field127.0 + 1));

        $crate::__c_enum_decl_variants!(
            impl($name, $inner, Self::$field128.0 + 1)
            $( $( #[$rattr] )* $frest $( = $frest_val )?, )*
        );
    };

    // Match 32 fields
    (
        impl($name:ident, $inner:ty, $default:expr)

        $( #[$attr1:meta] )*
        $field1:ident $( = $value1:expr )? ,

        $( #[$attr2:meta] )*
        $field2:ident $( = $value2:expr )? ,

        $( #[$attr3:meta] )*
        $field3:ident $( = $value3:expr )? ,

        $( #[$attr4:meta] )*
        $field4:ident $( = $value4:expr )? ,

        $( #[$attr5:meta] )*
        $field5:ident $( = $value5:expr )? ,

        $( #[$attr6:meta] )*
        $field6:ident $( = $value6:expr )? ,

        $( #[$attr7:meta] )*
        $field7:ident $( = $value7:expr )? ,

        $( #[$attr8:meta] )*
        $field8:ident $( = $value8:expr )? ,

        $( #[$attr9:meta] )*
        $field9:ident $( = $value9:expr )? ,

        $( #[$attr10:meta] )*
        $field10:ident $( = $value10:expr )? ,

        $( #[$attr11:meta] )*
        $field11:ident $( = $value11:expr )? ,

        $( #[$attr12:meta] )*
        $field12:ident $( = $value12:expr )? ,

        $( #[$attr13:meta] )*
        $field13:ident $( = $value13:expr )? ,

        $( #[$attr14:meta] )*
        $field14:ident $( = $value14:expr )? ,

        $( #[$attr15:meta] )*
        $field15:ident $( = $value15:expr )? ,

        $( #[$attr16:meta] )*
        $field16:ident $( = $value16:expr )? ,

        $( #[$attr17:meta] )*
        $field17:ident $( = $value17:expr )? ,

        $( #[$attr18:meta] )*
        $field18:ident $( = $value18:expr )? ,

        $( #[$attr19:meta] )*
        $field19:ident $( = $value19:expr )? ,

        $( #[$attr20:meta] )*
        $field20:ident $( = $value20:expr )? ,

        $( #[$attr21:meta] )*
        $field21:ident $( = $value21:expr )? ,

        $( #[$attr22:meta] )*
        $field22:ident $( = $value22:expr )? ,

        $( #[$attr23:meta] )*
        $field23:ident $( = $value23:expr )? ,

        $( #[$attr24:meta] )*
        $field24:ident $( = $value24:expr )? ,

        $( #[$attr25:meta] )*
        $field25:ident $( = $value25:expr )? ,

        $( #[$attr26:meta] )*
        $field26:ident $( = $value26:expr )? ,

        $( #[$attr27:meta] )*
        $field27:ident $( = $value27:expr )? ,

        $( #[$attr28:meta] )*
        $field28:ident $( = $value28:expr )? ,

        $( #[$attr29:meta] )*
        $field29:ident $( = $value29:expr )? ,

        $( #[$attr30:meta] )*
        $field30:ident $( = $value30:expr )? ,

        $( #[$attr31:meta] )*
        $field31:ident $( = $value31:expr )? ,

        $( #[$attr32:meta] )*
        $field32:ident $( = $value32:expr )? ,

        $(
            $( #[$rattr:meta] )*
            $frest:ident $( = $frest_val:expr )?
        ),* $(,)?
    ) => {
        $( #[$attr1] )*
        #[allow(non_upper_case_globals)]
        pub const $field1: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value1, )? $default));

        $( #[$attr2] )*
        #[allow(non_upper_case_globals)]
        pub const $field2: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value2, )? Self::$field1.0 + 1));

        $( #[$attr3] )*
        #[allow(non_upper_case_globals)]
        pub const $field3: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value3, )? Self::$field2.0 + 1));

        $( #[$attr4] )*
        #[allow(non_upper_case_globals)]
        pub const $field4: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value4, )? Self::$field3.0 + 1));

        $( #[$attr5] )*
        #[allow(non_upper_case_globals)]
        pub const $field5: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value5, )? Self::$field4.0 + 1));

        $( #[$attr6] )*
        #[allow(non_upper_case_globals)]
        pub const $field6: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value6, )? Self::$field5.0 + 1));

        $( #[$attr7] )*
        #[allow(non_upper_case_globals)]
        pub const $field7: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value7, )? Self::$field6.0 + 1));

        $( #[$attr8] )*
        #[allow(non_upper_case_globals)]
        pub const $field8: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value8, )? Self::$field7.0 + 1));

        $( #[$attr9] )*
        #[allow(non_upper_case_globals)]
        pub const $field9: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value9, )? Self::$field8.0 + 1));

        $( #[$attr10] )*
        #[allow(non_upper_case_globals)]
        pub const $field10: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value10, )? Self::$field9.0 + 1));

        $( #[$attr11] )*
        #[allow(non_upper_case_globals)]
        pub const $field11: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value11, )? Self::$field10.0 + 1));

        $( #[$attr12] )*
        #[allow(non_upper_case_globals)]
        pub const $field12: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value12, )? Self::$field11.0 + 1));

        $( #[$attr13] )*
        #[allow(non_upper_case_globals)]
        pub const $field13: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value13, )? Self::$field12.0 + 1));

        $( #[$attr14] )*
        #[allow(non_upper_case_globals)]
        pub const $field14: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value14, )? Self::$field13.0 + 1));

        $( #[$attr15] )*
        #[allow(non_upper_case_globals)]
        pub const $field15: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value15, )? Self::$field14.0 + 1));

        $( #[$attr16] )*
        #[allow(non_upper_case_globals)]
        pub const $field16: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value16, )? Self::$field15.0 + 1));

        $( #[$attr17] )*
        #[allow(non_upper_case_globals)]
        pub const $field17: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value17, )? Self::$field16.0 + 1));

        $( #[$attr18] )*
        #[allow(non_upper_case_globals)]
        pub const $field18: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value18, )? Self::$field17.0 + 1));

        $( #[$attr19] )*
        #[allow(non_upper_case_globals)]
        pub const $field19: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value19, )? Self::$field18.0 + 1));

        $( #[$attr20] )*
        #[allow(non_upper_case_globals)]
        pub const $field20: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value20, )? Self::$field19.0 + 1));

        $( #[$attr21] )*
        #[allow(non_upper_case_globals)]
        pub const $field21: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value21, )? Self::$field20.0 + 1));

        $( #[$attr22] )*
        #[allow(non_upper_case_globals)]
        pub const $field22: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value22, )? Self::$field21.0 + 1));

        $( #[$attr23] )*
        #[allow(non_upper_case_globals)]
        pub const $field23: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value23, )? Self::$field22.0 + 1));

        $( #[$attr24] )*
        #[allow(non_upper_case_globals)]
        pub const $field24: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value24, )? Self::$field23.0 + 1));

        $( #[$attr25] )*
        #[allow(non_upper_case_globals)]
        pub const $field25: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value25, )? Self::$field24.0 + 1));

        $( #[$attr26] )*
        #[allow(non_upper_case_globals)]
        pub const $field26: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value26, )? Self::$field25.0 + 1));

        $( #[$attr27] )*
        #[allow(non_upper_case_globals)]
        pub const $field27: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value27, )? Self::$field26.0 + 1));

        $( #[$attr28] )*
        #[allow(non_upper_case_globals)]
        pub const $field28: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value28, )? Self::$field27.0 + 1));

        $( #[$attr29] )*
        #[allow(non_upper_case_globals)]
        pub const $field29: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value29, )? Self::$field28.0 + 1));

        $( #[$attr30] )*
        #[allow(non_upper_case_globals)]
        pub const $field30: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value30, )? Self::$field29.0 + 1));

        $( #[$attr31] )*
        #[allow(non_upper_case_globals)]
        pub const $field31: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value31, )? Self::$field30.0 + 1));

        $( #[$attr32] )*
        #[allow(non_upper_case_globals)]
        pub const $field32: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value32, )? Self::$field31.0 + 1));

        $crate::__c_enum_decl_variants!(
            impl($name, $inner, Self::$field32.0 + 1)
            $( $( #[$rattr] )* $frest $( = $frest_val )?, )*
        );
    };

    // Match 8 fields
    (
        impl($name:ident, $inner:ty, $default:expr)

        $( #[$attr1:meta] )*
        $field1:ident $( = $value1:expr )? ,

        $( #[$attr2:meta] )*
        $field2:ident $( = $value2:expr )? ,

        $( #[$attr3:meta] )*
        $field3:ident $( = $value3:expr )? ,

        $( #[$attr4:meta] )*
        $field4:ident $( = $value4:expr )? ,

        $( #[$attr5:meta] )*
        $field5:ident $( = $value5:expr )? ,

        $( #[$attr6:meta] )*
        $field6:ident $( = $value6:expr )? ,

        $( #[$attr7:meta] )*
        $field7:ident $( = $value7:expr )? ,

        $( #[$attr8:meta] )*
        $field8:ident $( = $value8:expr )? ,

        $(
            $( #[$rattr:meta] )*
            $frest:ident $( = $frest_val:expr )?
        ),* $(,)?
    ) => {
        $( #[$attr1] )*
        #[allow(non_upper_case_globals)]
        pub const $field1: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value1, )? $default));

        $( #[$attr2] )*
        #[allow(non_upper_case_globals)]
        pub const $field2: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value2, )? Self::$field1.0 + 1));

        $( #[$attr3] )*
        #[allow(non_upper_case_globals)]
        pub const $field3: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value3, )? Self::$field2.0 + 1));

        $( #[$attr4] )*
        #[allow(non_upper_case_globals)]
        pub const $field4: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value4, )? Self::$field3.0 + 1));

        $( #[$attr5] )*
        #[allow(non_upper_case_globals)]
        pub const $field5: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value5, )? Self::$field4.0 + 1));

        $( #[$attr6] )*
        #[allow(non_upper_case_globals)]
        pub const $field6: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value6, )? Self::$field5.0 + 1));

        $( #[$attr7] )*
        #[allow(non_upper_case_globals)]
        pub const $field7: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value7, )? Self::$field6.0 + 1));

        $( #[$attr8] )*
        #[allow(non_upper_case_globals)]
        pub const $field8: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $value8, )? Self::$field7.0 + 1));

        $crate::__c_enum_decl_variants!(
            impl($name, $inner, Self::$field8.0 + 1)
            $( $( #[$rattr] )* $frest $( = $frest_val )?, )*
        );
    };

    // Base case
    (
        impl($name:ident, $inner:ty, $default:expr)
        $( #[$fattr:meta] )*
        $field:ident $( = $fvalue:expr )?
        $( ,
            $( #[$rattr:meta] )*
            $frest:ident $( = $frest_val:expr )?
        )*
        $(,)?
    ) => {
        $( #[$fattr] )*
        #[allow(non_upper_case_globals)]
        pub const $field: Self = Self($crate::__c_enum_impl!(
            impl(first_expr) $( $fvalue, )? $default));

        $crate::__c_enum_decl_variants!(
            impl($name, $inner, Self::$field.0 + 1)
            $( $( #[$rattr] )* $frest $( = $frest_val )?, )*
        );
    }
}
