50
50
{Type, Value, Rest} = parse_field_value(ValueAndRest),
51
51
[{Type, Value} | parse_array(Rest)].
53
parse_field_value(<<"S", VLen:32/unsigned, ValueString:VLen/binary, Rest/binary>>) ->
54
{longstr, ValueString, Rest};
56
parse_field_value(<<"I", Value:32/signed, Rest/binary>>) ->
57
{signedint, Value, Rest};
59
parse_field_value(<<"D", Before:8/unsigned, After:32/unsigned, Rest/binary>>) ->
60
{decimal, {Before, After}, Rest};
62
parse_field_value(<<"T", Value:64/unsigned, Rest/binary>>) ->
63
{timestamp, Value, Rest};
65
parse_field_value(<<"F", VLen:32/unsigned, Table:VLen/binary, Rest/binary>>) ->
66
{table, parse_table(Table), Rest};
68
parse_field_value(<<"A", VLen:32/unsigned, Array:VLen/binary, Rest/binary>>) ->
69
{array, parse_array(Array), Rest};
71
parse_field_value(<<"b", Value:8/unsigned, Rest/binary>>) ->
74
parse_field_value(<<"d", Value:64/float, Rest/binary>>) ->
75
{double, Value, Rest};
77
parse_field_value(<<"f", Value:32/float, Rest/binary>>) ->
80
parse_field_value(<<"l", Value:64/signed, Rest/binary>>) ->
83
parse_field_value(<<"s", Value:16/signed, Rest/binary>>) ->
86
parse_field_value(<<"t", Value:8/unsigned, Rest/binary>>) ->
87
{bool, (Value /= 0), Rest};
89
parse_field_value(<<"x", VLen:32/unsigned, ValueString:VLen/binary, Rest/binary>>) ->
90
{binary, ValueString, Rest};
92
parse_field_value(<<"V", Rest/binary>>) ->
93
{void, undefined, Rest}.
53
parse_field_value(<<"S", VLen:32/unsigned, V:VLen/binary, R/binary>>) ->
56
parse_field_value(<<"I", V:32/signed, R/binary>>) ->
59
parse_field_value(<<"D", Before:8/unsigned, After:32/unsigned, R/binary>>) ->
60
{decimal, {Before, After}, R};
62
parse_field_value(<<"T", V:64/unsigned, R/binary>>) ->
65
parse_field_value(<<"F", VLen:32/unsigned, Table:VLen/binary, R/binary>>) ->
66
{table, parse_table(Table), R};
68
parse_field_value(<<"A", VLen:32/unsigned, Array:VLen/binary, R/binary>>) ->
69
{array, parse_array(Array), R};
71
parse_field_value(<<"b", V:8/unsigned, R/binary>>) -> {byte, V, R};
72
parse_field_value(<<"d", V:64/float, R/binary>>) -> {double, V, R};
73
parse_field_value(<<"f", V:32/float, R/binary>>) -> {float, V, R};
74
parse_field_value(<<"l", V:64/signed, R/binary>>) -> {long, V, R};
75
parse_field_value(<<"s", V:16/signed, R/binary>>) -> {short, V, R};
76
parse_field_value(<<"t", V:8/unsigned, R/binary>>) -> {bool, (V /= 0), R};
78
parse_field_value(<<"x", VLen:32/unsigned, V:VLen/binary, R/binary>>) ->
81
parse_field_value(<<"V", R/binary>>) ->
95
84
ensure_content_decoded(Content = #content{properties = Props})
96
85
when Props =/= none ->