|
|
@ -3,7 +3,20 @@ |
|
|
|
|
|
|
|
-export([encode/1, decode/1, encodeRec/1, decodeRec/2]). |
|
|
|
|
|
|
|
-define(bool(V), (case V of true -> <<1:8>>; _ -> <<0:8>> end)). |
|
|
|
-define(min8, -128). |
|
|
|
-define(max8, 127). |
|
|
|
-define(min16, -32768). |
|
|
|
-define(max16, 32767). |
|
|
|
-define(min32, -2147483648). |
|
|
|
-define(max32, 2147483647). |
|
|
|
-define(min64, -9223372036854775808). |
|
|
|
-define(max64, 9223372036854775807). |
|
|
|
|
|
|
|
-define(minF32, -3.4E+38). |
|
|
|
-define(maxF32, 3.4E+38). |
|
|
|
-define(minF64, -1.797E-308). |
|
|
|
-define(maxF64, 1.797E+308). |
|
|
|
|
|
|
|
-define(int8(V), <<V:8>>). |
|
|
|
-define(uint8(V), <<V:8>>). |
|
|
|
-define(int16(V), <<V:16/big>>). |
|
|
@ -12,9 +25,12 @@ |
|
|
|
-define(uint32(V), <<V:32/big>>). |
|
|
|
-define(int64(V), <<V:64/big>>). |
|
|
|
-define(uint64(V), <<V:64/big>>). |
|
|
|
-define(integer(V), (integer(V))). |
|
|
|
-define(number(V), (number(V))). |
|
|
|
-define(string(V), (string(V))). |
|
|
|
-define(float(V), <<V:32/big-float>>). |
|
|
|
-define(double(V), <<V:64/big-float>>). |
|
|
|
-define(string(V), (string(V))). |
|
|
|
-define(bool(V), (case V of true -> <<1:8>>; _ -> <<0:8>> end)). |
|
|
|
-define(record(V), (case V of undefined -> [<<0:8>>]; V -> [<<1:8>>, encodeRec(V)] end)). |
|
|
|
-define(list_bool(List), [<<(length(List)):16/big>>, [?bool(V) || V <- List]]). |
|
|
|
-define(list_int8(List), [<<(length(List)):16/big>>, [?int8(V) || V <- List]]). |
|
|
@ -27,231 +43,391 @@ |
|
|
|
-define(list_uint64(List), [<<(length(List)):16/big>>, [?uint64(V) || V <- List]]). |
|
|
|
-define(list_float(List), [<<(length(List)):16/big>>, [?float(V) || V <- List]]). |
|
|
|
-define(list_double(List), [<<(length(List)):16/big>>, [?double(V) || V <- List]]). |
|
|
|
-define(list_integer(List), [<<(length(List)):16/big>>, [integer(V) || V <- List]]). |
|
|
|
-define(list_number(List), [<<(length(List)):16/big>>, [number(V) || V <- List]]). |
|
|
|
-define(list_string(List), [<<(length(List)):16/big>>, [string(V) || V <- List]]). |
|
|
|
-define(list_record(List), [<<(length(List)):16/big>>, [encodeRec(V) || V <- List]]). |
|
|
|
|
|
|
|
integer(V) -> |
|
|
|
if |
|
|
|
V >= ?min8 andalso V =< ?max8 -> |
|
|
|
<<8:8, <<V:8>>/binary>>; |
|
|
|
V >= ?min16 andalso V =< ?max16 -> |
|
|
|
<<16:8, <<V:16/big>>/binary>>; |
|
|
|
V >= ?min32 andalso V =< ?max32 -> |
|
|
|
<<32:8, <<V:32/big>>/binary>>; |
|
|
|
V >= ?min64 andalso V =< ?max64 -> |
|
|
|
<<64:8, <<V:64/big>>/binary>>; |
|
|
|
true -> |
|
|
|
throw(exceeded_the_integer) |
|
|
|
end. |
|
|
|
|
|
|
|
numInteger(V) -> |
|
|
|
if |
|
|
|
V >= ?min8 andalso V =< ?max8 -> |
|
|
|
<<8:8, <<V:8>>/binary>>; |
|
|
|
V >= ?min16 andalso V =< ?max16 -> |
|
|
|
<<16:8, <<V:16/big>>/binary>>; |
|
|
|
V >= ?min32 andalso V =< ?max32 -> |
|
|
|
<<32:8, <<V:32/big>>/binary>>; |
|
|
|
V >= ?min64 andalso V =< ?max64 -> |
|
|
|
<<64:8, <<V:64/big>>/binary>>; |
|
|
|
true -> |
|
|
|
throw(exceeded_the_integer) |
|
|
|
end. |
|
|
|
|
|
|
|
numFloat(V) -> |
|
|
|
if |
|
|
|
V >= ?minF32 andalso V =< ?maxF32 -> |
|
|
|
<<33:8, <<V:32/big-float>>/binary>>; |
|
|
|
V >= ?minF64 andalso V =< ?maxF64 -> |
|
|
|
<<65:8, <<V:64/big-float>>/binary>>; |
|
|
|
true -> |
|
|
|
throw(exceeded_the_float) |
|
|
|
end. |
|
|
|
|
|
|
|
number(V) -> |
|
|
|
if |
|
|
|
erlang:is_integer(V) == true -> |
|
|
|
numInteger(V); |
|
|
|
erlang:is_float(V) == true -> |
|
|
|
numFloat(V); |
|
|
|
true -> |
|
|
|
throw(is_not_number) |
|
|
|
end. |
|
|
|
|
|
|
|
string(Str) when is_binary(Str) -> |
|
|
|
[<<(byte_size(Str)):16/big>>, Str]; |
|
|
|
[<<(byte_size(Str)):16/big>>, Str]; |
|
|
|
string(Str) -> |
|
|
|
Str2 = unicode:characters_to_binary(Str, utf8), |
|
|
|
[<<(byte_size(Str2)):16/big>>, Str2]. |
|
|
|
Str2 = unicode:characters_to_binary(Str, utf8), |
|
|
|
[<<(byte_size(Str2)):16/big>>, Str2]. |
|
|
|
|
|
|
|
encode(Record) -> |
|
|
|
MsgBin = encodeRec(Record), |
|
|
|
MsgId = getMsgId(element(1, Record)), |
|
|
|
[<<MsgId:16/big>>, MsgBin]. |
|
|
|
MsgBin = encodeRec(Record), |
|
|
|
MsgId = getMsgId(element(1, Record)), |
|
|
|
[<<MsgId:16/big>>, MsgBin]. |
|
|
|
|
|
|
|
decode(Bin) -> |
|
|
|
<<MsgId:16/big, MsgBin/binary>> = Bin, |
|
|
|
SchList = getMsgSchema(MsgId), |
|
|
|
{<<>>, ResultList} = decodeField(SchList, MsgBin, [getMsgType(MsgId)]), |
|
|
|
list_to_tuple(ResultList). |
|
|
|
<<MsgId:16/big, MsgBin/binary>> = Bin, |
|
|
|
SchList = getMsgSchema(MsgId), |
|
|
|
{<<>>, ResultList} = decodeField(SchList, MsgBin, [getMsgType(MsgId)]), |
|
|
|
list_to_tuple(ResultList). |
|
|
|
|
|
|
|
decodeRec(RecordName, Bin) -> |
|
|
|
SchList = getMsgSchema(RecordName), |
|
|
|
{LeftBin, Result} = decodeField(SchList, Bin, [RecordName]), |
|
|
|
{LeftBin, list_to_tuple(Result)}. |
|
|
|
SchList = getMsgSchema(RecordName), |
|
|
|
{LeftBin, Result} = decodeField(SchList, Bin, [RecordName]), |
|
|
|
{LeftBin, list_to_tuple(Result)}. |
|
|
|
|
|
|
|
decodeField([], LeftBin, Result) -> |
|
|
|
{LeftBin, lists:reverse(Result)}; |
|
|
|
{LeftBin, lists:reverse(Result)}; |
|
|
|
decodeField([Type | SchList], MsgBin, Result) -> |
|
|
|
case Type of |
|
|
|
int32 -> |
|
|
|
<<Int:32/big-signed, LeftBin/binary>> = MsgBin, |
|
|
|
decodeField(SchList, LeftBin, [Int | Result]); |
|
|
|
uint32 -> |
|
|
|
<<Int:32/big-unsigned, LeftBin/binary>> = MsgBin, |
|
|
|
decodeField(SchList, LeftBin, [Int | Result]); |
|
|
|
string -> |
|
|
|
<<Len:16/big, StrBin:Len/binary, LeftBin/binary>> = MsgBin, |
|
|
|
decodeField(SchList, LeftBin, [StrBin | Result]); |
|
|
|
int16 -> |
|
|
|
<<Int:16/big-signed, LeftBin/binary>> = MsgBin, |
|
|
|
decodeField(SchList, LeftBin, [Int | Result]); |
|
|
|
uint16 -> |
|
|
|
<<Int:16/big-unsigned, LeftBin/binary>> = MsgBin, |
|
|
|
decodeField(SchList, LeftBin, [Int | Result]); |
|
|
|
int8 -> |
|
|
|
<<Int:8/big-signed, LeftBin/binary>> = MsgBin, |
|
|
|
decodeField(SchList, LeftBin, [Int | Result]); |
|
|
|
uint8 -> |
|
|
|
<<Int:8/big-unsigned, LeftBin/binary>> = MsgBin, |
|
|
|
decodeField(SchList, LeftBin, [Int | Result]); |
|
|
|
int64 -> |
|
|
|
<<Int:64/big-signed, LeftBin/binary>> = MsgBin, |
|
|
|
decodeField(SchList, LeftBin, [Int | Result]); |
|
|
|
uint64 -> |
|
|
|
<<Int:64/big-unsigned, LeftBin/binary>> = MsgBin, |
|
|
|
decodeField(SchList, LeftBin, [Int | Result]); |
|
|
|
bool -> |
|
|
|
<<Bool:8/big-unsigned, LeftBin/binary>> = MsgBin, |
|
|
|
case Bool =:= 1 of |
|
|
|
true -> |
|
|
|
decodeField(SchList, LeftBin, [true | Result]); |
|
|
|
_ -> |
|
|
|
decodeField(SchList, LeftBin, [false | Result]) |
|
|
|
end; |
|
|
|
falat -> |
|
|
|
<<Float:32/big-float, LeftBin/binary>> = MsgBin, |
|
|
|
decodeField(SchList, LeftBin, [Float | Result]); |
|
|
|
double -> |
|
|
|
<<Float:64/big-float, LeftBin/binary>> = MsgBin, |
|
|
|
decodeField(SchList, LeftBin, [Float | Result]); |
|
|
|
{list, int32} -> |
|
|
|
<<Len:16/big, LeftListBin/binary>> = MsgBin, |
|
|
|
{LeftBin, RetList} = deInt32List(Len, LeftListBin, []), |
|
|
|
decodeField(SchList, LeftBin, [RetList | Result]); |
|
|
|
{list, uint32} -> |
|
|
|
<<Len:16/big, LeftListBin/binary>> = MsgBin, |
|
|
|
{LeftBin, RetList} = deUint32List(Len, LeftListBin, []), |
|
|
|
decodeField(SchList, LeftBin, [RetList | Result]); |
|
|
|
{list, int16} -> |
|
|
|
<<Len:16/big, LeftListBin/binary>> = MsgBin, |
|
|
|
{LeftBin, RetList} = deInt16List(Len, LeftListBin, []), |
|
|
|
decodeField(SchList, LeftBin, [RetList | Result]); |
|
|
|
{list, uint16} -> |
|
|
|
<<Len:16/big, LeftListBin/binary>> = MsgBin, |
|
|
|
{LeftBin, RetList} = deUint16List(Len, LeftListBin, []), |
|
|
|
decodeField(SchList, LeftBin, [RetList | Result]); |
|
|
|
{list, int8} -> |
|
|
|
<<Len:16/big, LeftListBin/binary>> = MsgBin, |
|
|
|
{LeftBin, RetList} = deInt8List(Len, LeftListBin, []), |
|
|
|
decodeField(SchList, LeftBin, [RetList | Result]); |
|
|
|
{list, uint8} -> |
|
|
|
<<Len:16/big, LeftListBin/binary>> = MsgBin, |
|
|
|
{LeftBin, RetList} = deUint8List(Len, LeftListBin, []), |
|
|
|
decodeField(SchList, LeftBin, [RetList | Result]); |
|
|
|
{list, string} -> |
|
|
|
<<Len:16/big, LeftListBin/binary>> = MsgBin, |
|
|
|
{LeftBin, RetList} = deStringList(Len, LeftListBin, []), |
|
|
|
decodeField(SchList, LeftBin, [RetList | Result]); |
|
|
|
{list, int64} -> |
|
|
|
<<Len:16/big, LeftListBin/binary>> = MsgBin, |
|
|
|
{LeftBin, RetList} = deInt64List(Len, LeftListBin, []), |
|
|
|
decodeField(SchList, LeftBin, [RetList | Result]); |
|
|
|
{list, uint64} -> |
|
|
|
<<Len:16/big, LeftListBin/binary>> = MsgBin, |
|
|
|
{LeftBin, RetList} = deUint64List(Len, LeftListBin, []), |
|
|
|
decodeField(SchList, LeftBin, [RetList | Result]); |
|
|
|
{list, bool} -> |
|
|
|
<<Len:16/big, LeftListBin/binary>> = MsgBin, |
|
|
|
{LeftBin, RetList} = deBoolList(Len, LeftListBin, []), |
|
|
|
decodeField(SchList, LeftBin, [RetList | Result]); |
|
|
|
{list, flat} -> |
|
|
|
<<Len:16/big, LeftListBin/binary>> = MsgBin, |
|
|
|
{LeftBin, RetList} = deFloatList(Len, LeftListBin, []), |
|
|
|
decodeField(SchList, LeftBin, [RetList | Result]); |
|
|
|
{list, double} -> |
|
|
|
<<Len:16/big, LeftListBin/binary>> = MsgBin, |
|
|
|
{LeftBin, RetList} = deDoubleList(Len, LeftListBin, []), |
|
|
|
decodeField(SchList, LeftBin, [RetList | Result]); |
|
|
|
{list, RecordName} -> |
|
|
|
<<Len:16/big, LeftListBin/binary>> = MsgBin, |
|
|
|
{LeftBin, RetList} = deRecordList(Len, RecordName, LeftListBin, []), |
|
|
|
decodeField(SchList, LeftBin, [RetList | Result]); |
|
|
|
case Type of |
|
|
|
int32 -> |
|
|
|
<<Int:32/big-signed, LeftBin/binary>> = MsgBin, |
|
|
|
decodeField(SchList, LeftBin, [Int | Result]); |
|
|
|
uint32 -> |
|
|
|
<<Int:32/big-unsigned, LeftBin/binary>> = MsgBin, |
|
|
|
decodeField(SchList, LeftBin, [Int | Result]); |
|
|
|
string -> |
|
|
|
<<Len:16/big, StrBin:Len/binary, LeftBin/binary>> = MsgBin, |
|
|
|
decodeField(SchList, LeftBin, [StrBin | Result]); |
|
|
|
int16 -> |
|
|
|
<<Int:16/big-signed, LeftBin/binary>> = MsgBin, |
|
|
|
decodeField(SchList, LeftBin, [Int | Result]); |
|
|
|
uint16 -> |
|
|
|
<<Int:16/big-unsigned, LeftBin/binary>> = MsgBin, |
|
|
|
decodeField(SchList, LeftBin, [Int | Result]); |
|
|
|
int8 -> |
|
|
|
<<Int:8/big-signed, LeftBin/binary>> = MsgBin, |
|
|
|
decodeField(SchList, LeftBin, [Int | Result]); |
|
|
|
uint8 -> |
|
|
|
<<Int:8/big-unsigned, LeftBin/binary>> = MsgBin, |
|
|
|
decodeField(SchList, LeftBin, [Int | Result]); |
|
|
|
int64 -> |
|
|
|
<<Int:64/big-signed, LeftBin/binary>> = MsgBin, |
|
|
|
decodeField(SchList, LeftBin, [Int | Result]); |
|
|
|
uint64 -> |
|
|
|
<<Int:64/big-unsigned, LeftBin/binary>> = MsgBin, |
|
|
|
decodeField(SchList, LeftBin, [Int | Result]); |
|
|
|
integer -> |
|
|
|
<<IntBits:8, Int:IntBits/big-signed, LeftBin/binary>> = MsgBin, |
|
|
|
decodeField(SchList, LeftBin, [Int | Result]); |
|
|
|
number -> |
|
|
|
<<NumBits:8, NumBin/binary>> = MsgBin, |
|
|
|
case NumBits of |
|
|
|
33 -> |
|
|
|
<<Float:32/big-float, LeftBin/binary>> = NumBin, |
|
|
|
decodeField(SchList, LeftBin, [Float | Result]); |
|
|
|
65 -> |
|
|
|
<<Float:64/big-float, LeftBin/binary>> = NumBin, |
|
|
|
decodeField(SchList, LeftBin, [Float | Result]); |
|
|
|
_ -> |
|
|
|
<<Int:NumBits/big-signed, LeftBin/binary>> = NumBin, |
|
|
|
decodeField(SchList, LeftBin, [Int | Result]) |
|
|
|
end; |
|
|
|
bool -> |
|
|
|
<<Bool:8/big-unsigned, LeftBin/binary>> = MsgBin, |
|
|
|
case Bool =:= 1 of |
|
|
|
true -> |
|
|
|
decodeField(SchList, LeftBin, [true | Result]); |
|
|
|
_ -> |
|
|
|
decodeField(SchList, LeftBin, [false | Result]) |
|
|
|
end; |
|
|
|
float -> |
|
|
|
<<Float:32/big-float, LeftBin/binary>> = MsgBin, |
|
|
|
decodeField(SchList, LeftBin, [Float | Result]); |
|
|
|
double -> |
|
|
|
<<Float:64/big-float, LeftBin/binary>> = MsgBin, |
|
|
|
decodeField(SchList, LeftBin, [Float | Result]); |
|
|
|
{list, int32} -> |
|
|
|
<<Len:16/big, LeftListBin/binary>> = MsgBin, |
|
|
|
{LeftBin, RetList} = deInt32List(Len, LeftListBin, []), |
|
|
|
decodeField(SchList, LeftBin, [RetList | Result]); |
|
|
|
{list, uint32} -> |
|
|
|
<<Len:16/big, LeftListBin/binary>> = MsgBin, |
|
|
|
{LeftBin, RetList} = deUint32List(Len, LeftListBin, []), |
|
|
|
decodeField(SchList, LeftBin, [RetList | Result]); |
|
|
|
{list, int16} -> |
|
|
|
<<Len:16/big, LeftListBin/binary>> = MsgBin, |
|
|
|
{LeftBin, RetList} = deInt16List(Len, LeftListBin, []), |
|
|
|
decodeField(SchList, LeftBin, [RetList | Result]); |
|
|
|
{list, uint16} -> |
|
|
|
<<Len:16/big, LeftListBin/binary>> = MsgBin, |
|
|
|
{LeftBin, RetList} = deUint16List(Len, LeftListBin, []), |
|
|
|
decodeField(SchList, LeftBin, [RetList | Result]); |
|
|
|
{list, int8} -> |
|
|
|
<<Len:16/big, LeftListBin/binary>> = MsgBin, |
|
|
|
{LeftBin, RetList} = deInt8List(Len, LeftListBin, []), |
|
|
|
decodeField(SchList, LeftBin, [RetList | Result]); |
|
|
|
{list, uint8} -> |
|
|
|
<<Len:16/big, LeftListBin/binary>> = MsgBin, |
|
|
|
{LeftBin, RetList} = deUint8List(Len, LeftListBin, []), |
|
|
|
decodeField(SchList, LeftBin, [RetList | Result]); |
|
|
|
{list, string} -> |
|
|
|
<<Len:16/big, LeftListBin/binary>> = MsgBin, |
|
|
|
{LeftBin, RetList} = deStringList(Len, LeftListBin, []), |
|
|
|
decodeField(SchList, LeftBin, [RetList | Result]); |
|
|
|
{list, int64} -> |
|
|
|
<<Len:16/big, LeftListBin/binary>> = MsgBin, |
|
|
|
{LeftBin, RetList} = deInt64List(Len, LeftListBin, []), |
|
|
|
decodeField(SchList, LeftBin, [RetList | Result]); |
|
|
|
{list, uint64} -> |
|
|
|
<<Len:16/big, LeftListBin/binary>> = MsgBin, |
|
|
|
{LeftBin, RetList} = deUint64List(Len, LeftListBin, []), |
|
|
|
decodeField(SchList, LeftBin, [RetList | Result]); |
|
|
|
{list, integer} -> |
|
|
|
<<Len:16/big, LeftListBin/binary>> = MsgBin, |
|
|
|
{LeftBin, RetList} = deIntegerList(Len, LeftListBin, []), |
|
|
|
decodeField(SchList, LeftBin, [RetList | Result]); |
|
|
|
{list, number} -> |
|
|
|
<<Len:16/big, LeftListBin/binary>> = MsgBin, |
|
|
|
{LeftBin, RetList} = deNumberList(Len, LeftListBin, []), |
|
|
|
decodeField(SchList, LeftBin, [RetList | Result]); |
|
|
|
{list, bool} -> |
|
|
|
<<Len:16/big, LeftListBin/binary>> = MsgBin, |
|
|
|
{LeftBin, RetList} = deBoolList(Len, LeftListBin, []), |
|
|
|
decodeField(SchList, LeftBin, [RetList | Result]); |
|
|
|
{list, float} -> |
|
|
|
<<Len:16/big, LeftListBin/binary>> = MsgBin, |
|
|
|
{LeftBin, RetList} = deFloatList(Len, LeftListBin, []), |
|
|
|
decodeField(SchList, LeftBin, [RetList | Result]); |
|
|
|
{list, double} -> |
|
|
|
<<Len:16/big, LeftListBin/binary>> = MsgBin, |
|
|
|
{LeftBin, RetList} = deDoubleList(Len, LeftListBin, []), |
|
|
|
decodeField(SchList, LeftBin, [RetList | Result]); |
|
|
|
{list, RecordName} -> |
|
|
|
<<Len:16/big, LeftListBin/binary>> = MsgBin, |
|
|
|
{LeftBin, RetList} = deRecordList(Len, RecordName, LeftListBin, []), |
|
|
|
decodeField(SchList, LeftBin, [RetList | Result]); |
|
|
|
RecordName -> |
|
|
|
<<IsUndef:8, LeftBin/binary>> = MsgBin, |
|
|
|
case IsUndef of |
|
|
|
0 -> |
|
|
|
decodeField(SchList, LeftBin, [undefined | Result]); |
|
|
|
_ -> |
|
|
|
SubSchList = getMsgSchema(RecordName), |
|
|
|
{SubLeftBin, SubResultList} = decodeField(SubSchList, LeftBin, [RecordName]), |
|
|
|
decodeField(SchList, SubLeftBin, [list_to_tuple(SubResultList) | Result]) |
|
|
|
end |
|
|
|
end. |
|
|
|
<<IsUndef:8, LeftBin/binary>> = MsgBin, |
|
|
|
case IsUndef of |
|
|
|
0 -> |
|
|
|
decodeField(SchList, LeftBin, [undefined | Result]); |
|
|
|
_ -> |
|
|
|
SubSchList = getMsgSchema(RecordName), |
|
|
|
{SubLeftBin, SubResultList} = decodeField(SubSchList, LeftBin, [RecordName]), |
|
|
|
decodeField(SchList, SubLeftBin, [list_to_tuple(SubResultList) | Result]) |
|
|
|
end |
|
|
|
end. |
|
|
|
|
|
|
|
deBoolList(0, MsgBin, RetList) -> |
|
|
|
{MsgBin, lists:reverse(RetList)}; |
|
|
|
deBoolList(N, <<Bool:8, LeftBin/binary>>, RetList) -> |
|
|
|
case Bool =:= 1 of |
|
|
|
true -> |
|
|
|
deBoolList(N - 1, LeftBin, [true | RetList]); |
|
|
|
_ -> |
|
|
|
deBoolList(N - 1, LeftBin, [false | RetList]) |
|
|
|
end. |
|
|
|
{MsgBin, lists:reverse(RetList)}; |
|
|
|
deBoolList(N, MsgBin, RetList) -> |
|
|
|
<<Bool:8, LeftBin/binary>> = MsgBin, |
|
|
|
case Bool =:= 1 of |
|
|
|
true -> |
|
|
|
deBoolList(N - 1, LeftBin, [true | RetList]); |
|
|
|
_ -> |
|
|
|
deBoolList(N - 1, LeftBin, [false | RetList]) |
|
|
|
end. |
|
|
|
deInt8List(0, MsgBin, RetList) -> |
|
|
|
{MsgBin, RetList}; |
|
|
|
deInt8List(N, <<Int:8/big-signed, LeftBin/binary>>, RetList) -> |
|
|
|
deInt8List(N - 1, LeftBin, [Int | RetList]). |
|
|
|
{MsgBin, RetList}; |
|
|
|
deInt8List(N, MsgBin, RetList) -> |
|
|
|
<<Int:8/big-signed, LeftBin/binary>> = MsgBin, |
|
|
|
deInt8List(N - 1, LeftBin, [Int | RetList]). |
|
|
|
|
|
|
|
deUint8List(0, MsgBin, RetList) -> |
|
|
|
{MsgBin, lists:reverse(RetList)}; |
|
|
|
deUint8List(N, <<Int:8/big-unsigned, LeftBin/binary>>, RetList) -> |
|
|
|
deUint8List(N - 1, LeftBin, [Int | RetList]). |
|
|
|
{MsgBin, lists:reverse(RetList)}; |
|
|
|
deUint8List(N, MsgBin, RetList) -> |
|
|
|
<<Int:8/big-unsigned, LeftBin/binary>> = MsgBin, |
|
|
|
deUint8List(N - 1, LeftBin, [Int | RetList]). |
|
|
|
|
|
|
|
deInt16List(0, MsgBin, RetList) -> |
|
|
|
{MsgBin, lists:reverse(RetList)}; |
|
|
|
deInt16List(N, <<Int:16/big-signed, LeftBin/binary>>, RetList) -> |
|
|
|
deInt16List(N - 1, LeftBin, [Int | RetList]). |
|
|
|
{MsgBin, lists:reverse(RetList)}; |
|
|
|
deInt16List(N, MsgBin, RetList) -> |
|
|
|
<<Int:16/big-signed, LeftBin/binary>> = MsgBin, |
|
|
|
deInt16List(N - 1, LeftBin, [Int | RetList]). |
|
|
|
|
|
|
|
deUint16List(0, MsgBin, RetList) -> |
|
|
|
{MsgBin, lists:reverse(RetList)}; |
|
|
|
deUint16List(N, <<Int:16/big-unsigned, LeftBin/binary>>, RetList) -> |
|
|
|
deUint16List(N - 1, LeftBin, [Int | RetList]). |
|
|
|
{MsgBin, lists:reverse(RetList)}; |
|
|
|
deUint16List(N, MsgBin, RetList) -> |
|
|
|
<<Int:16/big-unsigned, LeftBin/binary>> = MsgBin, |
|
|
|
deUint16List(N - 1, LeftBin, [Int | RetList]). |
|
|
|
|
|
|
|
deInt32List(0, MsgBin, RetList) -> |
|
|
|
{MsgBin, lists:reverse(RetList)}; |
|
|
|
deInt32List(N, <<Int:32/big-signed, LeftBin/binary>>, RetList) -> |
|
|
|
deInt32List(N - 1, LeftBin, [Int | RetList]). |
|
|
|
{MsgBin, lists:reverse(RetList)}; |
|
|
|
deInt32List(N, MsgBin, RetList) -> |
|
|
|
<<Int:32/big-signed, LeftBin/binary>> = MsgBin, |
|
|
|
deInt32List(N - 1, LeftBin, [Int | RetList]). |
|
|
|
|
|
|
|
deUint32List(0, MsgBin, RetList) -> |
|
|
|
{MsgBin, lists:reverse(RetList)}; |
|
|
|
deUint32List(N, <<Int:32/big-unsigned, LeftBin/binary>>, RetList) -> |
|
|
|
deUint32List(N - 1, LeftBin, [Int | RetList]). |
|
|
|
{MsgBin, lists:reverse(RetList)}; |
|
|
|
deUint32List(N, MsgBin, RetList) -> |
|
|
|
<<Int:32/big-unsigned, LeftBin/binary>> = MsgBin, |
|
|
|
deUint32List(N - 1, LeftBin, [Int | RetList]). |
|
|
|
|
|
|
|
deInt64List(0, MsgBin, RetList) -> |
|
|
|
{MsgBin, lists:reverse(RetList)}; |
|
|
|
deInt64List(N, <<Int:64/big-signed, LeftBin/binary>>, RetList) -> |
|
|
|
deInt64List(N - 1, LeftBin, [Int | RetList]). |
|
|
|
{MsgBin, lists:reverse(RetList)}; |
|
|
|
deInt64List(N, MsgBin, RetList) -> |
|
|
|
<<Int:64/big-signed, LeftBin/binary>> = MsgBin, |
|
|
|
deInt64List(N - 1, LeftBin, [Int | RetList]). |
|
|
|
|
|
|
|
deUint64List(0, MsgBin, RetList) -> |
|
|
|
{MsgBin, lists:reverse(RetList)}; |
|
|
|
deUint64List(N, <<Int:64/big-unsigned, LeftBin/binary>>, RetList) -> |
|
|
|
deUint64List(N - 1, LeftBin, [Int | RetList]). |
|
|
|
{MsgBin, lists:reverse(RetList)}; |
|
|
|
deUint64List(N, MsgBin, RetList) -> |
|
|
|
<<Int:64/big-unsigned, LeftBin/binary>> = MsgBin, |
|
|
|
deUint64List(N - 1, LeftBin, [Int | RetList]). |
|
|
|
|
|
|
|
deIntegerList(0, MsgBin, RetList) -> |
|
|
|
{MsgBin, lists:reverse(RetList)}; |
|
|
|
deIntegerList(N, MsgBin, RetList) -> |
|
|
|
<<IntBits:8, Int:IntBits/big-signed, LeftBin/binary>> = MsgBin, |
|
|
|
deIntegerList(N - 1, LeftBin, [Int | RetList]). |
|
|
|
|
|
|
|
deNumberList(0, MsgBin, RetList) -> |
|
|
|
{MsgBin, lists:reverse(RetList)}; |
|
|
|
deNumberList(N, MsgBin, RetList) -> |
|
|
|
<<NumBits:8, NumBin/binary>> = MsgBin, |
|
|
|
case NumBits of |
|
|
|
33 -> |
|
|
|
<<Float:32/big-float, LeftBin/binary>> = NumBin, |
|
|
|
deNumberList(N - 1, LeftBin, [Float | RetList]); |
|
|
|
65 -> |
|
|
|
<<Float:64/big-float, LeftBin/binary>> = NumBin, |
|
|
|
deNumberList(N - 1, LeftBin, [Float | RetList]); |
|
|
|
_ -> |
|
|
|
<<Int:NumBits/big-signed, LeftBin/binary>> = NumBin, |
|
|
|
deNumberList(N - 1, LeftBin, [Int | RetList]) |
|
|
|
end. |
|
|
|
|
|
|
|
deFloatList(0, MsgBin, RetList) -> |
|
|
|
{MsgBin, lists:reverse(RetList)}; |
|
|
|
deFloatList(N, <<Float:32/big-float, LeftBin/binary>>, RetList) -> |
|
|
|
deFloatList(N - 1, LeftBin, [Float | RetList]). |
|
|
|
{MsgBin, lists:reverse(RetList)}; |
|
|
|
deFloatList(N, MsgBin, RetList) -> |
|
|
|
<<Float:32/big-float, LeftBin/binary>> = MsgBin, |
|
|
|
deFloatList(N - 1, LeftBin, [Float | RetList]). |
|
|
|
|
|
|
|
deDoubleList(0, MsgBin, RetList) -> |
|
|
|
{MsgBin, lists:reverse(RetList)}; |
|
|
|
deDoubleList(N, <<Float:64/big-float, LeftBin/binary>>, RetList) -> |
|
|
|
deDoubleList(N - 1, LeftBin, [Float | RetList]). |
|
|
|
{MsgBin, lists:reverse(RetList)}; |
|
|
|
deDoubleList(N, MsgBin, RetList) -> |
|
|
|
<<Float:64/big-float, LeftBin/binary>> = MsgBin, |
|
|
|
deDoubleList(N - 1, LeftBin, [Float | RetList]). |
|
|
|
|
|
|
|
deStringList(0, MsgBin, RetList) -> |
|
|
|
{MsgBin, lists:reverse(RetList)}; |
|
|
|
deStringList(N, <<Len:16/big, StrBin:Len/binary-unit:8, LeftBin/binary>>, RetList) -> |
|
|
|
deStringList(N - 1, LeftBin, [StrBin | RetList]). |
|
|
|
{MsgBin, lists:reverse(RetList)}; |
|
|
|
deStringList(N, MsgBin, RetList) -> |
|
|
|
<<Len:16/big, StrBin:Len/binary-unit:8, LeftBin/binary>> = MsgBin, |
|
|
|
deStringList(N - 1, LeftBin, [StrBin | RetList]). |
|
|
|
|
|
|
|
deRecordList(0, _RecordName, MsgBin, RetList) -> |
|
|
|
{MsgBin, lists:reverse(RetList)}; |
|
|
|
{MsgBin, lists:reverse(RetList)}; |
|
|
|
deRecordList(N, RecordName, MsgBin, RetList) -> |
|
|
|
{LeftBin, Tuple} = decodeRec(RecordName, MsgBin), |
|
|
|
deRecordList(N - 1, RecordName, LeftBin, [Tuple | RetList]). |
|
|
|
|
|
|
|
getMsgType(1)-> |
|
|
|
test; |
|
|
|
getMsgType(2)-> |
|
|
|
phoneNumber; |
|
|
|
getMsgType(3)-> |
|
|
|
person; |
|
|
|
getMsgType(4)-> |
|
|
|
addressBook; |
|
|
|
getMsgType(_) -> |
|
|
|
undefined. |
|
|
|
|
|
|
|
getMsgId(test)-> |
|
|
|
1; |
|
|
|
getMsgId(phoneNumber)-> |
|
|
|
2; |
|
|
|
getMsgId(person)-> |
|
|
|
3; |
|
|
|
getMsgId(addressBook)-> |
|
|
|
4; |
|
|
|
getMsgId(_) -> |
|
|
|
0. |
|
|
|
{LeftBin, Tuple} = decodeRec(RecordName, MsgBin), |
|
|
|
deRecordList(N - 1, RecordName, LeftBin, [Tuple | RetList]). |
|
|
|
|
|
|
|
getMsgType(1)-> test; |
|
|
|
getMsgType(2)-> phoneNumber; |
|
|
|
getMsgType(3)-> person; |
|
|
|
getMsgType(4)-> addressBook; |
|
|
|
getMsgType(5)-> union; |
|
|
|
getMsgType(6)-> tbool; |
|
|
|
getMsgType(7)-> tint8; |
|
|
|
getMsgType(8)-> tuint8; |
|
|
|
getMsgType(9)-> tint16; |
|
|
|
getMsgType(10)-> tuint16; |
|
|
|
getMsgType(11)-> tint32; |
|
|
|
getMsgType(12)-> tuint32; |
|
|
|
getMsgType(13)-> tint64; |
|
|
|
getMsgType(14)-> tuint64; |
|
|
|
getMsgType(15)-> tinteger; |
|
|
|
getMsgType(16)-> tnumber; |
|
|
|
getMsgType(17)-> tfloat; |
|
|
|
getMsgType(18)-> tdouble; |
|
|
|
getMsgType(19)-> tstring; |
|
|
|
getMsgType(20)-> tlistbool; |
|
|
|
getMsgType(21)-> tlistint8; |
|
|
|
getMsgType(22)-> tlistuint8; |
|
|
|
getMsgType(23)-> tlistint16; |
|
|
|
getMsgType(24)-> tlistuint16; |
|
|
|
getMsgType(25)-> tlistint32; |
|
|
|
getMsgType(26)-> tlistuint32; |
|
|
|
getMsgType(27)-> tlistint64; |
|
|
|
getMsgType(28)-> tlistuint64; |
|
|
|
getMsgType(29)-> tlistinteger; |
|
|
|
getMsgType(30)-> tlistnumber; |
|
|
|
getMsgType(31)-> tlistfloat; |
|
|
|
getMsgType(32)-> tlistdouble; |
|
|
|
getMsgType(33)-> tliststring; |
|
|
|
getMsgType(34)-> tlistunion; |
|
|
|
getMsgType(35)-> allType; |
|
|
|
getMsgType(_) -> undefined. |
|
|
|
|
|
|
|
getMsgId(test)-> 1; |
|
|
|
getMsgId(phoneNumber)-> 2; |
|
|
|
getMsgId(person)-> 3; |
|
|
|
getMsgId(addressBook)-> 4; |
|
|
|
getMsgId(union)-> 5; |
|
|
|
getMsgId(tbool)-> 6; |
|
|
|
getMsgId(tint8)-> 7; |
|
|
|
getMsgId(tuint8)-> 8; |
|
|
|
getMsgId(tint16)-> 9; |
|
|
|
getMsgId(tuint16)-> 10; |
|
|
|
getMsgId(tint32)-> 11; |
|
|
|
getMsgId(tuint32)-> 12; |
|
|
|
getMsgId(tint64)-> 13; |
|
|
|
getMsgId(tuint64)-> 14; |
|
|
|
getMsgId(tinteger)-> 15; |
|
|
|
getMsgId(tnumber)-> 16; |
|
|
|
getMsgId(tfloat)-> 17; |
|
|
|
getMsgId(tdouble)-> 18; |
|
|
|
getMsgId(tstring)-> 19; |
|
|
|
getMsgId(tlistbool)-> 20; |
|
|
|
getMsgId(tlistint8)-> 21; |
|
|
|
getMsgId(tlistuint8)-> 22; |
|
|
|
getMsgId(tlistint16)-> 23; |
|
|
|
getMsgId(tlistuint16)-> 24; |
|
|
|
getMsgId(tlistint32)-> 25; |
|
|
|
getMsgId(tlistuint32)-> 26; |
|
|
|
getMsgId(tlistint64)-> 27; |
|
|
|
getMsgId(tlistuint64)-> 28; |
|
|
|
getMsgId(tlistinteger)-> 29; |
|
|
|
getMsgId(tlistnumber)-> 30; |
|
|
|
getMsgId(tlistfloat)-> 31; |
|
|
|
getMsgId(tlistdouble)-> 32; |
|
|
|
getMsgId(tliststring)-> 33; |
|
|
|
getMsgId(tlistunion)-> 34; |
|
|
|
getMsgId(allType)-> 35; |
|
|
|
getMsgId(_) -> 0. |
|
|
|
|
|
|
|
encodeRec({test, V1}) -> |
|
|
|
[?string(V1)]; |
|
|
@ -261,6 +437,68 @@ encodeRec({person, V1, V2, V3, V4}) -> |
|
|
|
[?string(V1), ?int32(V2), ?string(V3), ?list_record(V4)]; |
|
|
|
encodeRec({addressBook, V1, V2}) -> |
|
|
|
[?list_record(V1), ?list_record(V2)]; |
|
|
|
encodeRec({union, V1, V2}) -> |
|
|
|
[?string(V1), ?int32(V2)]; |
|
|
|
encodeRec({tbool, V1}) -> |
|
|
|
[?bool(V1)]; |
|
|
|
encodeRec({tint8, V1, V2}) -> |
|
|
|
[?int8(V1), ?int8(V2)]; |
|
|
|
encodeRec({tuint8, V1, V2}) -> |
|
|
|
[?uint8(V1), ?uint8(V2)]; |
|
|
|
encodeRec({tint16, V1, V2}) -> |
|
|
|
[?int16(V1), ?int16(V2)]; |
|
|
|
encodeRec({tuint16, V1, V2}) -> |
|
|
|
[?uint16(V1), ?uint16(V2)]; |
|
|
|
encodeRec({tint32, V1, V2}) -> |
|
|
|
[?int32(V1), ?int32(V2)]; |
|
|
|
encodeRec({tuint32, V1, V2}) -> |
|
|
|
[?uint32(V1), ?uint32(V2)]; |
|
|
|
encodeRec({tint64, V1, V2}) -> |
|
|
|
[?int64(V1), ?int64(V2)]; |
|
|
|
encodeRec({tuint64, V1, V2}) -> |
|
|
|
[?uint64(V1), ?uint64(V2)]; |
|
|
|
encodeRec({tinteger, V1, V2, V3, V4, V5, V6, V7, V8}) -> |
|
|
|
[?integer(V1), ?integer(V2), ?integer(V3), ?integer(V4), ?integer(V5), ?integer(V6), ?integer(V7), ?integer(V8)]; |
|
|
|
encodeRec({tnumber, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10}) -> |
|
|
|
[?number(V1), ?number(V2), ?number(V3), ?number(V4), ?number(V5), ?number(V6), ?number(V7), ?number(V8), ?number(V9), ?number(V10)]; |
|
|
|
encodeRec({tfloat, V1, V2}) -> |
|
|
|
[?float(V1), ?float(V2)]; |
|
|
|
encodeRec({tdouble, V1, V2}) -> |
|
|
|
[?double(V1), ?double(V2)]; |
|
|
|
encodeRec({tstring, V1, V2}) -> |
|
|
|
[?string(V1), ?string(V2)]; |
|
|
|
encodeRec({tlistbool, V1}) -> |
|
|
|
[?list_bool(V1)]; |
|
|
|
encodeRec({tlistint8, V1}) -> |
|
|
|
[?list_int8(V1)]; |
|
|
|
encodeRec({tlistuint8, V1}) -> |
|
|
|
[?list_uint8(V1)]; |
|
|
|
encodeRec({tlistint16, V1}) -> |
|
|
|
[?list_int16(V1)]; |
|
|
|
encodeRec({tlistuint16, V1}) -> |
|
|
|
[?list_uint16(V1)]; |
|
|
|
encodeRec({tlistint32, V1}) -> |
|
|
|
[?list_int32(V1)]; |
|
|
|
encodeRec({tlistuint32, V1}) -> |
|
|
|
[?list_uint32(V1)]; |
|
|
|
encodeRec({tlistint64, V1}) -> |
|
|
|
[?list_int64(V1)]; |
|
|
|
encodeRec({tlistuint64, V1}) -> |
|
|
|
[?list_uint64(V1)]; |
|
|
|
encodeRec({tlistinteger, V1}) -> |
|
|
|
[?list_integer(V1)]; |
|
|
|
encodeRec({tlistnumber, V1}) -> |
|
|
|
[?list_number(V1)]; |
|
|
|
encodeRec({tlistfloat, V1}) -> |
|
|
|
[?list_float(V1)]; |
|
|
|
encodeRec({tlistdouble, V1}) -> |
|
|
|
[?list_double(V1)]; |
|
|
|
encodeRec({tliststring, V1}) -> |
|
|
|
[?list_string(V1)]; |
|
|
|
encodeRec({tlistunion, V1}) -> |
|
|
|
[?list_record(V1)]; |
|
|
|
encodeRec({allType, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30, V31, V32, V33, V34, V35, V36, V37, V38, V39, V40, V41, V42, V43, V44, V45, V46, V47, V48, V49, V50, V51, V52, V53, V54, V55}) -> |
|
|
|
[?bool(V1), ?int8(V2), ?uint8(V3), ?int16(V4), ?uint16(V5), ?int32(V6), ?uint32(V7), ?int64(V8), ?uint64(V9), ?integer(V10), ?integer(V11), ?integer(V12), ?integer(V13), ?integer(V14), ?integer(V15), ?integer(V16), ?integer(V17), ?number(V18), ?number(V19), ?number(V20), ?number(V21), ?number(V22), ?number(V23), ?number(V24), ?number(V25), ?number(V26), ?number(V27), ?float(V28), ?double(V29), ?string(V30), ?string(V31), ?record(V32), ?list_bool(V33), ?list_int8(V34), ?list_uint8(V35), ?list_int16(V36), ?list_uint16(V37), ?list_int32(V38), ?list_uint32(V39), ?list_int64(V40), ?list_uint64(V41), ?list_integer(V42), ?list_integer(V43), ?list_integer(V44), ?list_integer(V45), ?list_number(V46), ?list_number(V47), ?list_number(V48), ?list_number(V49), ?list_number(V50), ?list_number(V51), ?list_float(V52), ?list_double(V53), ?list_string(V54), ?list_record(V55)]; |
|
|
|
encodeRec(_) -> |
|
|
|
[]. |
|
|
|
|
|
|
@ -280,6 +518,155 @@ getMsgSchema(addressBook)-> |
|
|
|
getMsgSchema(4); |
|
|
|
getMsgSchema(4)-> |
|
|
|
[{list,person},{list,person}]; |
|
|
|
getMsgSchema(union)-> |
|
|
|
getMsgSchema(5); |
|
|
|
getMsgSchema(5)-> |
|
|
|
[string,int32]; |
|
|
|
getMsgSchema(tbool)-> |
|
|
|
getMsgSchema(6); |
|
|
|
getMsgSchema(6)-> |
|
|
|
[bool]; |
|
|
|
getMsgSchema(tint8)-> |
|
|
|
getMsgSchema(7); |
|
|
|
getMsgSchema(7)-> |
|
|
|
[int8,int8]; |
|
|
|
getMsgSchema(tuint8)-> |
|
|
|
getMsgSchema(8); |
|
|
|
getMsgSchema(8)-> |
|
|
|
[uint8,uint8]; |
|
|
|
getMsgSchema(tint16)-> |
|
|
|
getMsgSchema(9); |
|
|
|
getMsgSchema(9)-> |
|
|
|
[int16,int16]; |
|
|
|
getMsgSchema(tuint16)-> |
|
|
|
getMsgSchema(10); |
|
|
|
getMsgSchema(10)-> |
|
|
|
[uint16,uint16]; |
|
|
|
getMsgSchema(tint32)-> |
|
|
|
getMsgSchema(11); |
|
|
|
getMsgSchema(11)-> |
|
|
|
[int32,int32]; |
|
|
|
getMsgSchema(tuint32)-> |
|
|
|
getMsgSchema(12); |
|
|
|
getMsgSchema(12)-> |
|
|
|
[uint32,uint32]; |
|
|
|
getMsgSchema(tint64)-> |
|
|
|
getMsgSchema(13); |
|
|
|
getMsgSchema(13)-> |
|
|
|
[int64,int64]; |
|
|
|
getMsgSchema(tuint64)-> |
|
|
|
getMsgSchema(14); |
|
|
|
getMsgSchema(14)-> |
|
|
|
[uint64,uint64]; |
|
|
|
getMsgSchema(tinteger)-> |
|
|
|
getMsgSchema(15); |
|
|
|
getMsgSchema(15)-> |
|
|
|
[integer,integer,integer,integer,integer,integer,integer,integer]; |
|
|
|
getMsgSchema(tnumber)-> |
|
|
|
getMsgSchema(16); |
|
|
|
getMsgSchema(16)-> |
|
|
|
[number,number,number,number,number,number,number,number,number,number]; |
|
|
|
getMsgSchema(tfloat)-> |
|
|
|
getMsgSchema(17); |
|
|
|
getMsgSchema(17)-> |
|
|
|
[float,float]; |
|
|
|
getMsgSchema(tdouble)-> |
|
|
|
getMsgSchema(18); |
|
|
|
getMsgSchema(18)-> |
|
|
|
[double,double]; |
|
|
|
getMsgSchema(tstring)-> |
|
|
|
getMsgSchema(19); |
|
|
|
getMsgSchema(19)-> |
|
|
|
[string,string]; |
|
|
|
getMsgSchema(tlistbool)-> |
|
|
|
getMsgSchema(20); |
|
|
|
getMsgSchema(20)-> |
|
|
|
[{list,bool}]; |
|
|
|
getMsgSchema(tlistint8)-> |
|
|
|
getMsgSchema(21); |
|
|
|
getMsgSchema(21)-> |
|
|
|
[{list,int8}]; |
|
|
|
getMsgSchema(tlistuint8)-> |
|
|
|
getMsgSchema(22); |
|
|
|
getMsgSchema(22)-> |
|
|
|
[{list,uint8}]; |
|
|
|
getMsgSchema(tlistint16)-> |
|
|
|
getMsgSchema(23); |
|
|
|
getMsgSchema(23)-> |
|
|
|
[{list,int16}]; |
|
|
|
getMsgSchema(tlistuint16)-> |
|
|
|
getMsgSchema(24); |
|
|
|
getMsgSchema(24)-> |
|
|
|
[{list,uint16}]; |
|
|
|
getMsgSchema(tlistint32)-> |
|
|
|
getMsgSchema(25); |
|
|
|
getMsgSchema(25)-> |
|
|
|
[{list,int32}]; |
|
|
|
getMsgSchema(tlistuint32)-> |
|
|
|
getMsgSchema(26); |
|
|
|
getMsgSchema(26)-> |
|
|
|
[{list,uint32}]; |
|
|
|
getMsgSchema(tlistint64)-> |
|
|
|
getMsgSchema(27); |
|
|
|
getMsgSchema(27)-> |
|
|
|
[{list,int64}]; |
|
|
|
getMsgSchema(tlistuint64)-> |
|
|
|
getMsgSchema(28); |
|
|
|
getMsgSchema(28)-> |
|
|
|
[{list,uint64}]; |
|
|
|
getMsgSchema(tlistinteger)-> |
|
|
|
getMsgSchema(29); |
|
|
|
getMsgSchema(29)-> |
|
|
|
[{list,integer}]; |
|
|
|
getMsgSchema(tlistnumber)-> |
|
|
|
getMsgSchema(30); |
|
|
|
getMsgSchema(30)-> |
|
|
|
[{list,number}]; |
|
|
|
getMsgSchema(tlistfloat)-> |
|
|
|
getMsgSchema(31); |
|
|
|
getMsgSchema(31)-> |
|
|
|
[{list,float}]; |
|
|
|
getMsgSchema(tlistdouble)-> |
|
|
|
getMsgSchema(32); |
|
|
|
getMsgSchema(32)-> |
|
|
|
[{list,double}]; |
|
|
|
getMsgSchema(tliststring)-> |
|
|
|
getMsgSchema(33); |
|
|
|
getMsgSchema(33)-> |
|
|
|
[{list,string}]; |
|
|
|
getMsgSchema(tlistunion)-> |
|
|
|
getMsgSchema(34); |
|
|
|
getMsgSchema(34)-> |
|
|
|
[{list,union}]; |
|
|
|
getMsgSchema(allType)-> |
|
|
|
getMsgSchema(35); |
|
|
|
getMsgSchema(35)-> |
|
|
|
[bool,int8,uint8,int16,uint16,int32,uint32,int64,uint64,integer,integer, |
|
|
|
integer,integer,integer,integer,integer,integer,number,number,number,number, |
|
|
|
number,number,number,number,number,number,float,double,string,string,union, |
|
|
|
{list,bool}, |
|
|
|
{list,int8}, |
|
|
|
{list,uint8}, |
|
|
|
{list,int16}, |
|
|
|
{list,uint16}, |
|
|
|
{list,int32}, |
|
|
|
{list,uint32}, |
|
|
|
{list,int64}, |
|
|
|
{list,uint64}, |
|
|
|
{list,integer}, |
|
|
|
{list,integer}, |
|
|
|
{list,integer}, |
|
|
|
{list,integer}, |
|
|
|
{list,number}, |
|
|
|
{list,number}, |
|
|
|
{list,number}, |
|
|
|
{list,number}, |
|
|
|
{list,number}, |
|
|
|
{list,number}, |
|
|
|
{list,float}, |
|
|
|
{list,double}, |
|
|
|
{list,string}, |
|
|
|
{list,union}]; |
|
|
|
getMsgSchema(_) -> |
|
|
|
[]. |
|
|
|
|