|
24 | 24 | -include_lib("eunit/include/eunit.hrl"). |
25 | 25 |
|
26 | 26 |
|
27 | | --ifndef(without_map). |
28 | | --export([unpack_map/3]). |
29 | | --endif. |
30 | | - |
31 | | --export([unpack_map_jiffy/3, unpack_map_jsx/3]). |
| 27 | +-export([unpack_map/3, unpack_map_jiffy/3, unpack_map_jsx/3]). |
32 | 28 |
|
33 | 29 | %% unpack them all |
34 | 30 | -spec unpack_stream(Bin::binary(), msgpack_option()) -> {msgpack:object(), binary()} | no_return(). |
@@ -175,36 +171,25 @@ unpack_array(Bin, Len, Acc, Opt) -> |
175 | 171 | {Term, Rest} = unpack_stream(Bin, Opt), |
176 | 172 | unpack_array(Rest, Len-1, [Term|Acc], Opt). |
177 | 173 |
|
178 | | --ifdef(without_map). |
179 | | -map_unpacker(jiffy) -> |
180 | | - fun ?MODULE:unpack_map_jiffy/3; |
181 | | -map_unpacker(jsx) -> |
182 | | - fun ?MODULE:unpack_map_jsx/3. |
183 | | --else. |
184 | 174 | map_unpacker(map) -> |
185 | 175 | fun ?MODULE:unpack_map/3; |
186 | 176 | map_unpacker(jiffy) -> |
187 | 177 | fun ?MODULE:unpack_map_jiffy/3; |
188 | 178 | map_unpacker(jsx) -> |
189 | 179 | fun ?MODULE:unpack_map_jsx/3. |
190 | | --endif. |
191 | | - |
192 | | - |
193 | 180 |
|
194 | | --ifndef(without_map). |
195 | 181 | -spec unpack_map(binary(), non_neg_integer(), msgpack_option()) -> |
196 | 182 | {map(), binary()} | no_return(). |
197 | 183 | unpack_map(Bin, Len, Opt) -> |
| 184 | + %% TODO: optimize with unpack_map/4 |
198 | 185 | {Map, Rest} = unpack_map_as_proplist(Bin, Len, [], Opt), |
199 | 186 | {maps:from_list(Map), Rest}. |
200 | | -%% unpack_map(Bin, Len, #{}, Opt). |
201 | 187 |
|
202 | 188 | %% unpack_map(Bin, Len, Acc, _) -> {Acc, Bin}; |
203 | 189 | %% unpack_map(Bin, Len, Acc, Opt) -> |
204 | 190 | %% {Key, Rest} = unpack_stream(Bin, Opt), |
205 | 191 | %% {Value, Rest2} = unpack_stream(Rest, Opt), |
206 | 192 | %% unpack_map(Rest2, Len-1, maps:put(Key, Value, Acc), Opt). |
207 | | --endif. |
208 | 193 |
|
209 | 194 | %% Users SHOULD NOT send too long list: this uses lists:reverse/1 |
210 | 195 | -spec unpack_map_jiffy(binary(), non_neg_integer(), msgpack_option()) -> |
|
0 commit comments