Apache Thrift IDL tooling and binary protocol support for MoonBit
Dependencies
moon add Xpeng/moonthriftlet idl =
#|struct User {
#| 1: required i64 id,
#| 2: optional string name
#|}
#|
let (schema, diagnostics) = @moonthrift.compile_idl(idl)
assert_eq(schema.definitions.length(), 1)
assert_eq(diagnostics, [])let value : @protocol.Value = StructValue([
{ id: 1, value: I64Value(7L) },
{ id: 2, value: BinaryValue(b"MoonBit") },
])
let binary = @protocol.encode_binary(value)
assert_eq(@protocol.decode_binary(binary, Struct), value)
let compact = @protocol.encode_compact(value)
assert_eq(@protocol.decode_compact(compact, Struct), value)import {
"Xpeng/moonthrift",
"Xpeng/moonthrift/protocol",
}# 内置解析与 Compact Protocol 往返示例
moon run cmd/main --target native
# 语法与语义检查
moon run cmd/main --target native -- check examples/tutorial.thrift
# 查看 Schema 轮廓
moon run cmd/main --target native -- inspect examples/tutorial.thrift
# 生成 MoonBit 数据模型
moon run cmd/main --target native -- generate examples/tutorial.thrift generated.mbt
# 比较两个 Schema 版本;发现 breaking change 时退出码为 3
moon run cmd/main --target native -- diff \
examples/tutorial.thrift examples/tutorial-v2.thrift| 包 | 用途 |
|---|---|
| Xpeng/moonthrift | IDL AST、解析、语义检查、兼容性比较 |
| Xpeng/moonthrift/protocol | 动态值、Binary/Compact codec、RPC message |
| Xpeng/moonthrift/codegen | MoonBit 源码生成器 |
| cmd/main | native 文件与命令行适配层 |
pub(all) enum ConstValue {
BoolValue(Bool)
IntegerValue(Int64)
DoubleValue(Double)
StringValue(String)
IdentifierValue(String)
ListValue(Array[ConstValue])
MapValue(Array[(ConstValue, ConstValue)])
} derive(Eq, Debug)pub(all) enum Definition {
Const(name~ : String, ty~ : TypeRef, value~ : ConstValue, span~ : Span)
Typedef(name~ : String, target~ : TypeRef, annotations~ : Array[Annotation], span~ : Span)
Enum(name~ : String, members~ : Array[EnumMember], annotations~ : Array[Annotation], span~ : Span)
Struct(name~ : String, fields~ : Array[Field], annotations~ : Array[Annotation], span~ : Span)
Union(name~ : String, fields~ : Array[Field], annotations~ : Array[Annotation], span~ : Span)
Exception(name~ : String, fields~ : Array[Field], annotations~ : Array[Annotation], span~ : Span)
Service(name~ : String, extends~ : String?, functions~ : Array[FunctionDef], annotations~ : Array[Annotation], span~ : Span)
} derive(Eq, Debug)pub(all) struct EnumMember {
name : String
value : Int
annotations : Array[Annotation]
span : Span
} derive(Eq, Debug)pub(all) struct Field {
id : Int
requiredness : Requiredness
ty : TypeRef
name : String
default_value : ConstValue?
annotations : Array[Annotation]
span : Span
} derive(Eq, Debug)pub(all) struct SchemaChange {
code : String
kind : ChangeKind
path : String
message : String
} derive(Eq, ToJson, Debug)Install
Download zipApache Thrift IDL tooling and binary protocol support for MoonBit
Dependencies