【发布时间】:2019-01-31 02:28:03
【问题描述】:
我正在为可以是多个值的参数列表编写通信协议架构:uint64、float64、string 或 bool。
如何将表字段设置为多个原始标量和非标量原始类型的并集?
我已经尝试过使用这些类型的联合,但在构建时出现以下错误:
$ schemas/foobar.fbs:28: 0: error: type referenced but not defined
(check namespace): uint64, originally at: schemas/request.fbs:5
这是当前状态的架构:
namespace Foobar;
enum RequestCode : uint16 { Noop, Get, Set, BulkGet, BulkSet }
union ParameterValue { uint64, float64, bool, string }
table Parameter {
name:string;
value:ParameterValue;
unit:string;
}
table Request {
code:RequestCode = Noop;
payload:[Parameter];
}
table Result {
request:Request;
success:bool = true;
payload:[Parameter];
}
我正在寻找的最终结果是包含参数列表的请求和结果表,其中参数包含名称和值,以及可选的单位。
提前谢谢!
回答后解决方案: 这是我最后想出的,感谢 Aardappel。
namespace foobar;
enum RequestCode : uint16 { Noop, Get, Set, BulkGet, BulkSet }
union ValueType { UnsignedInteger, SignedInteger, RealNumber, Boolean, Text }
table UnsignedInteger {
value:uint64 = 0;
}
table SignedInteger {
value:int64 = 0;
}
table RealNumber {
value:float64 = 0.0;
}
table Boolean {
value:bool = false;
}
table Text {
value:string (required);
}
table Parameter {
name:string (required);
valueType:ValueType;
unit:string;
}
table Request {
code:RequestCode = Noop;
payload:[Parameter];
}
table Result {
request:Request (required);
success:bool = true;
payload:[Parameter];
}
【问题讨论】:
标签: schema flatbuffers