macro_rules! declare_key_new_type {
    (
        content_trait: SortedIndexKeyContentSource,
        payload_trait: SortedIndexKeyPayload,
        full_key_content: {
            full_content_type: $full_content_type:ty,
            sort_prefix_property_name: $sort_prefix_property_name:ident
            $(,)?
        },
        ----
        $(#[$attributes:meta])*
        $vis:vis struct $payload_type_name:ident
            $(< $( $lt:tt $( : $clt:tt $(+ $dlt:tt )* )? $( = $deflt:tt)? ),+ >)?
            ($content_type:ty)$(;)?
    ) => { ... };
    (
        content_trait: SortedIndexKeyContentSource,
        payload_trait: SortedIndexKeyPayload,
        ----
        $(#[$attributes:meta])*
        $vis:vis struct $payload_type_name:ident
            $(< $( $lt:tt $( : $clt:tt $(+ $dlt:tt )* )? $( = $deflt:tt)? ),+ >)?
            ($content_type:ty)$(;)?
    ) => { ... };
    (
        content_trait: $content_trait:ident,
        payload_trait: $payload_trait:ident,
        full_key_content: $full_key_content:tt,
        ----
        $(#[$attributes:meta])*
        $vis:vis struct $payload_type_name:ident
            $(< $( $lt:tt $( : $clt:tt $(+ $dlt:tt )* )? $( = $deflt:tt)? ),+ >)?
            ($content_type:ty)$(;)?
    ) => { ... };
    (
        content_trait: $content_trait:ident,
        payload_trait: $payload_trait:ident,
        ----
        $(#[$attributes:meta])*
        $vis:vis struct $payload_type_name:ident
        $(< $( $lt:tt $( : $clt:tt $(+ $dlt:tt )* )? $( = $deflt:tt)? ),+ >)?
        ($content_type:ty)$(;)?
    ) => { ... };
}