Skip to content

Commit 7cdfd96

Browse files
committed
Merge pull request #45 from mururu/default-map
Use map format by default in 18.0 or over
2 parents 1a54eb4 + beb231c commit 7cdfd96

File tree

4 files changed

+60
-19
lines changed

4 files changed

+60
-19
lines changed

include/msgpack.hrl

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -55,17 +55,27 @@
5555
{ext, {msgpack_ext_packer(),msgpack_ext_unpacker()} | module()}
5656
].
5757

58+
-ifdef(default_map).
59+
60+
-define(DEFAULT_MAP_FORMAT, map).
61+
-define(DEFAULT_MAP_UNPACKER_FUN, fun msgpack_unpacker:unpack_map/3).
62+
63+
-else.
64+
65+
-define(DEFAULT_MAP_FORMAT, jiffy).
66+
-define(DEFAULT_MAP_UNPACKER_FUN, fun msgpack_unpacker:unpack_map_jiffy/3).
67+
68+
-endif.
69+
5870
-record(options_v1, {
59-
interface = jiffy :: jiffy | jsx,
60-
map_unpack_fun = fun msgpack_unpacker:unpack_map_jiffy/3 ::
61-
msgpack_map_unpacker(),
71+
interface = ?DEFAULT_MAP_FORMAT :: jiffy | jsx,
72+
map_unpack_fun = ?DEFAULT_MAP_UNPACKER_FUN :: msgpack_map_unpacker(),
6273
impl = erlang :: erlang | nif
6374
}).
6475

6576
-record(options_v2, {
66-
interface = jiffy :: jiffy | jsx,
67-
map_unpack_fun = fun msgpack_unpacker:unpack_map_jiffy/3 ::
68-
msgpack_map_unpacker(),
77+
interface = ?DEFAULT_MAP_FORMAT :: jiffy | jsx,
78+
map_unpack_fun = ?DEFAULT_MAP_UNPACKER_FUN :: msgpack_map_unpacker(),
6979
impl = erlang :: erlang | nif,
7080
allow_atom = none :: none | pack, %% allows atom when packing
7181
enable_str = false :: boolean(), %% true for new spec
@@ -80,10 +90,10 @@
8090
-type msgpack_option() :: #options_v2{}.
8191

8292
-else.
93+
8394
-record(options_v3, {
84-
interface = jiffy :: format_type(),
85-
map_unpack_fun = fun msgpack_unpacker:unpack_map_jiffy/3 ::
86-
msgpack_map_unpacker(),
95+
interface = ?DEFAULT_MAP_FORMAT :: format_type(),
96+
map_unpack_fun = ?DEFAULT_MAP_UNPACKER_FUN :: msgpack_map_unpacker(),
8797
impl = erlang :: erlang | nif,
8898
allow_atom = none :: none | pack, %% allows atom when packing
8999
enable_str = false :: boolean(), %% true for new spec

rebar.config.script

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,16 @@ case erlang:system_info(otp_release) of
1010
CONFIG ++ [{erl_opts, HashDefine}]
1111
end;
1212

13-
%% "17", our future with map
13+
%% In 17, maps are experimental
14+
"17" ->
15+
CONFIG;
16+
1417
_ ->
15-
CONFIG
18+
HashDefine = [{d,default_map}],
19+
case lists:keysearch(erl_opts, 1, CONFIG) of
20+
{value, {erl_opts, Opts}} ->
21+
lists:keyreplace(erl_opts,1,CONFIG,{erl_opts,Opts++HashDefine});
22+
false ->
23+
CONFIG ++ [{erl_opts, HashDefine}]
24+
end
1625
end.

src/msgpack.erl

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,24 @@ parse_options([{ext, {Packer,Unpacker}}|TL], Opt0) when
165165
-ifdef(TEST).
166166
-include_lib("eunit/include/eunit.hrl").
167167

168+
-ifdef(default_map).
169+
170+
test_data()->
171+
[true, false, nil,
172+
0, 1, 2, 123, 512, 1230, 678908, 16#FFFFFFFFFF,
173+
-1, -23, -512, -1230, -567898, -16#FFFFFFFFFF,
174+
-16#80000001,
175+
123.123, -234.4355, 1.0e-34, 1.0e64,
176+
[23, 234, 0.23],
177+
<<"hogehoge">>, <<"243546rf7g68h798j", 0, 23, 255>>,
178+
<<"hoasfdafdas][">>,
179+
[0,42, <<"sum">>, [1,2]], [1,42, nil, [3]],
180+
-234, -40000, -16#10000000, -16#100000000,
181+
42
182+
].
183+
184+
-else.
185+
168186
test_data()->
169187
[true, false, null,
170188
0, 1, 2, 123, 512, 1230, 678908, 16#FFFFFFFFFF,
@@ -179,6 +197,8 @@ test_data()->
179197
42
180198
].
181199

200+
-endif.
201+
182202
enable_str_test() ->
183203
?assertEqual(<<167:8, (<<"saitama">>)/binary >>,
184204
msgpack:pack(<<"saitama">>, [{enable_str, false}])),

test/msgpack_test.erl

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323

2424
-include_lib("eunit/include/eunit.hrl").
2525

26+
-include("msgpack.hrl").
27+
2628
-ifdef(DO_MSGPACK_CROSSLANG_TEST).
2729

2830
test_data() ->
@@ -148,25 +150,25 @@ issue_27_test_() ->
148150
[
149151
%% null(jiffy) => nil(msgpack) => null(jsx)
150152
?_assertEqual({ok, null},
151-
msgpack:unpack(msgpack:pack(null), [{format,jsx}])),
153+
msgpack:unpack(msgpack:pack(null, [{format,jiffy}]), [{format,jsx}])),
152154

153155
%% null(jiffy) => nil(msgpack) => null(jiffy)
154156
?_assertEqual({ok, null},
155-
msgpack:unpack(msgpack:pack(null, [{format,jiffy}]))),
157+
msgpack:unpack(msgpack:pack(null, [{format,jiffy}]), [{format,jiffy}])),
156158

157159

158160
%% null(jsx) => nil(msgpack) => null(jiffy)
159161
?_assertEqual({ok, null},
160-
msgpack:unpack(msgpack:pack(null, [{format,jsx}]))),
162+
msgpack:unpack(msgpack:pack(null, [{format,jsx}]), [{format,jiffy}])),
161163

162164
%% nil(jiffy-atom) => <<nil>>(msgpack-binary) => <<"nil">>
163165
?_assertEqual({ok, <<"nil">>},
164-
msgpack:unpack(msgpack:pack(nil, [{allow_atom,pack}]))),
166+
msgpack:unpack(msgpack:pack(nil, [{allow_atom,pack}, {format,jiffy}]), [{format,jiffy}])),
165167

166168
%% nil(jsx-atom) => <<nil>>(msgpack-binary) => <<"nil">>
167169
?_assertEqual({ok, <<"nil">>},
168170
msgpack:unpack(msgpack:pack(nil,
169-
[{format,jsx},{allow_atom,pack}])))].
171+
[{format,jsx},{allow_atom,pack}]), [{format,jiffy}]))].
170172

171173
string_test() ->
172174
{ok, CWD} = file:get_cwd(),
@@ -181,13 +183,13 @@ default_test_() ->
181183
{"pack",
182184
fun() ->
183185
Map = {[{1,2}]},
184-
?assertEqual(pack(Map, [{format, jiffy}]), pack(Map))
186+
?assertEqual(pack(Map, [{format, ?DEFAULT_MAP_FORMAT}]), pack(Map))
185187
end},
186188
{"unpack",
187189
fun() ->
188190
Map = {[{1,2}]},
189-
Binary = pack(Map, [{format, jiffy}]),
190-
?assertEqual(unpack(Binary, [{format, jiffy}]), unpack(Binary))
191+
Binary = pack(Map, [{format, ?DEFAULT_MAP_FORMAT}]),
192+
?assertEqual(unpack(Binary, [{format, ?DEFAULT_MAP_FORMAT}]), unpack(Binary))
191193
end}
192194
].
193195

0 commit comments

Comments
 (0)