// 统一的词表错误类型。
//
// 纪律:**加载时若同一字节序列出现两次 -> 报错**(不变量 V3),
// 而不是静默取一个。静默取一个会让"精确"这个词失去意义。
///|
pub suberror VocabError {
/// base64 里出现非法字符
InvalidBase64(Char)
/// 第 `line` 行无法解析
MalformedLine(Int, String)
/// 同一字节序列出现两次。`a`、`b` 是位置:解析器检测时给出两次所在的行号,
/// 内部构建器兜底检测时给出 token 下标(正常情况下解析器会先命中,带行号)。
DuplicateToken(Int, Int)
/// 第 `index` 个 token 为空(不变量 V2)
EmptyToken(Int)
/// 缺少单字节 token `byte`(不变量 V1)
MissingByteToken(Int)
/// 特殊 token 的 id 越界
SpecialOutOfRange(Int, Int)
/// 未知的段名
UnknownSection(String)
/// 训练目标词表大小 `vocab_size` 连基座都放不下(256 个单字节 + 特殊 token)
TrainSizeTooSmall(Int, Int)
} derive(Debug)