//// 由 erlgen 发射——词表: protocol/etf_tags.toml——勿手改
//// 再生: moon run /home/thy/bitbang/erlgen/cmd --  

///|
/// tag 词表常量(external.h 权威——数据面;真源=词表 TOML)
/// IEEE double, 8-byte big-endian
pub const TAG_NEW_FLOAT : Int32 = 70

///|
/// pid ext, node/id/serial/creation u32
pub const TAG_NEW_PID : Int32 = 88

///|
/// reference ext, creation u32('Z' 形)
pub const TAG_NEW_REFERENCE : Int32 = 90

///|
/// u8
pub const TAG_SMALL_INTEGER : Int32 = 97

///|
/// i32 big-endian
pub const TAG_INTEGER : Int32 = 98

///|
/// 31-byte string form (legacy)
pub const TAG_FLOAT_EXT : Int32 = 99

///|
/// latin-1 atom, len u16
pub const TAG_ATOM_EXT : Int32 = 100

///|
/// arity u8
pub const TAG_SMALL_TUPLE : Int32 = 104

///|
/// arity u32
pub const TAG_LARGE_TUPLE : Int32 = 105

///|
pub const TAG_NIL : Int32 = 106

///|
/// latin-1 byte string, len u16
pub const TAG_STRING : Int32 = 107

///|
/// len u32 + tail
pub const TAG_LIST : Int32 = 108

///|
/// len u32
pub const TAG_BINARY : Int32 = 109

///|
/// digit count u8
pub const TAG_SMALL_BIG : Int32 = 110

///|
pub const TAG_MAP : Int32 = 116

///|
/// len u16
pub const TAG_ATOM_UTF8 : Int32 = 118

///|
/// len u8(external.c get_int8)
pub const TAG_SMALL_ATOM_UTF8 : Int32 = 119

///|
/// cix u8('D' 段头语境;A8 全规格)
pub const TAG_ATOM_CACHE_REF : Int32 = 82

///|
pub const TAG_NEW_PORT : Int32 = 89

// 120 'x':OTP26 port 扩展形(真帧勘定 2026-11-07 beam-rpc 勘形臂 dump——
// node atom+id u32+serial u32+creation u32;外证=本机 erl OTP25
// term_to_binary(port) 同 tag 120 但 8B 形,OTP26 带 serial 12B)

///|
pub const TAG_NEW_PORT_V2 : Int32 = 120

///|
/// 封闭查表:tag code → 词表名(未知 None——负例诚实拒)
pub fn tag_name_of(code : Int32) -> String? {
  match code {
    70 => Some("TAG_NEW_FLOAT")
    88 => Some("TAG_NEW_PID")
    90 => Some("TAG_NEW_REFERENCE")
    97 => Some("TAG_SMALL_INTEGER")
    98 => Some("TAG_INTEGER")
    99 => Some("TAG_FLOAT_EXT")
    100 => Some("TAG_ATOM_EXT")
    104 => Some("TAG_SMALL_TUPLE")
    105 => Some("TAG_LARGE_TUPLE")
    106 => Some("TAG_NIL")
    107 => Some("TAG_STRING")
    108 => Some("TAG_LIST")
    109 => Some("TAG_BINARY")
    110 => Some("TAG_SMALL_BIG")
    116 => Some("TAG_MAP")
    118 => Some("TAG_ATOM_UTF8")
    119 => Some("TAG_SMALL_ATOM_UTF8")
    82 => Some("TAG_ATOM_CACHE_REF")
    89 => Some("TAG_NEW_PORT")
    120 => Some("TAG_NEW_PORT_V2")
    _ => None
  }
}

///|
/// 词表全表 [(code, name)](封闭性罐/工具面用;词表行序)
pub fn all_tags() -> Array[(Int32, String)] {
  [
    (70, "TAG_NEW_FLOAT"),
    (88, "TAG_NEW_PID"),
    (90, "TAG_NEW_REFERENCE"),
    (97, "TAG_SMALL_INTEGER"),
    (98, "TAG_INTEGER"),
    (99, "TAG_FLOAT_EXT"),
    (100, "TAG_ATOM_EXT"),
    (104, "TAG_SMALL_TUPLE"),
    (105, "TAG_LARGE_TUPLE"),
    (106, "TAG_NIL"),
    (107, "TAG_STRING"),
    (108, "TAG_LIST"),
    (109, "TAG_BINARY"),
    (110, "TAG_SMALL_BIG"),
    (116, "TAG_MAP"),
    (118, "TAG_ATOM_UTF8"),
    (119, "TAG_SMALL_ATOM_UTF8"),
    (82, "TAG_ATOM_CACHE_REF"),
    (89, "TAG_NEW_PORT"),
    (120, "TAG_NEW_PORT_V2"),
  ]
}