Generate typed MoonBit parsers from a subset of Kaitai Struct descriptions.
moon add bzhangui/ksymoon@0.2.0moon update
moon run --target js cmd/ksymoon -- check fixtures/udp_datagram.ksy
moon run --target js cmd/ksymoon -- generate fixtures/udp_datagram.ksy --out examples/consumer/udp/udp_datagram.mbt
moon run --target js cmd/ksymoon -- generate fixtures/stl.ksy --out examples/consumer/stl/stl.mbt
moon run --target js cmd/ksymoon -- generate fixtures/stm32_sample_frame.ksy --out examples/consumer/stm32/stm32_sample_frame.mbt
moon run --target js cmd/ksymoon -- generate fixtures/vp8_duck_ivf.ksy --out examples/consumer/ivf/vp8_duck_ivf.mbt
moon -C examples/consumer test --target all --deny-warn
moon -C examples/consumer run --target js .node scripts/verify.mjspython -m pip install kaitaistruct==0.11
node scripts/verify.mjs --kaitai-reference| 样本 | 验收结果 |
|---|---|
| 正常 UDP | 端口 1234 → 5678,声明长度 11,负载 ABC |
| 截断 UDP | udp_datagram.body 从字节偏移 8 开始,需要 3 字节,剩 2 字节 |
| 非法 UDP 长度 | 报文长度字段小于 8 时返回 UdpDatagramInvalidLength |
| 正常二进制 STL | 两个三角面,第二个三角面的第二个顶点为 (-0.5, 2.5, 0),属性为 0x5678 |
| 截断 STL | stl.triangles[1].abr 从字节偏移 182 开始,需要 2 字节,剩 1 字节 |
| 异常 STL 计数 | 0xffffffff 三角面计数触发重复项上限 |
| 正常 STM32 采样帧 | 帧序号 0x1234、时间戳 1000000 ms、采样值 [0, 2048, 4095] |
| 截断 STM32 采样帧 | stm32_sample_frame.samples[2] 从字节偏移 11 开始,需要 2 字节,剩 1 字节 |
| STM32 采样计数边界 | 接受 0 和 255 个采样值,拒绝缺少最后一个采样字节的 255 样本帧 |
| 二进制 IVF | 原样上游描述读取帧长度及两个 64 位时间戳,截断时间戳或负载时报告字段路径与字节偏移 |
pub suberror SchemaError {
InvalidSchema(String)
}