macro_rules! write_codec_enum {
    ($(#[doc = $codec_doc:expr])* codec $codec_name:ident {$(
        $(#[doc = $var_doc:expr])* $var_name:ident($var_id:literal) {$(
            $(#[doc = $type_doc:expr])* $type_name:ident.$type_idx:literal: $type_ty:ty,
        )*},
    )*}) => { ... };
}
Expand description

DSL-style macro for generating a serialization protocol message enum.

DSL:

/// [codec doc here]
codec $codec_name {
    /// [var doc here]
    $var_name($var_id) {
        /// [type doc here]
        $type_name.$type_idx: $type_ty,
    },
}
  • $codec_name - camel-case codec enum name
  • $var_name - camel-case variant/struct name
  • $var_id - protocol variant identifier byte (u8) literal
  • $type_name - snake-case type name
  • $type_idx - zero-index type index in message array (usize)
  • $type_ty - type rust type

E.G.:

/// My codec is awesome.
codec MyCodec {
    /// My codec has only one variant.
    MyVariant(0x00) {
        /// My variant has only one type
        my_type.0: String,
    },
}