@@ -40,20 +40,16 @@ pack(true, _) ->
4040 << 16#C3 :8 >>;
4141
4242pack (Bin , Opt ) when is_binary (Bin ) ->
43- case Opt of
44- # options_v3 {enable_str = true } = Opt -> pack_raw2 (Bin );
45- # options_v3 {enable_str = false } = Opt -> pack_raw (Bin );
46- # options_v2 {enable_str = true } = Opt -> pack_raw2 (Bin );
47- # options_v2 {enable_str = false } = Opt -> pack_raw (Bin );
48- # options_v1 {} = Opt -> pack_raw (Bin )
49- end ;
43+ handle_binary (Bin , Opt );
5044
5145pack (Atom , # options_v2 {allow_atom = pack } = Opt ) when is_atom (Atom ) ->
5246 pack (erlang :atom_to_binary (Atom , unicode ), Opt );
5347
54- % % map interface
55- pack (Map , Opt = ? OPTION {interface = map }) when is_map (Map ) ->
56- pack_map (maps :to_list (Map ), Opt );
48+ % % -ifndef(without_map).
49+ % % %% map interface
50+ % % pack(Map, Opt = ?OPTION{interface=map}) when is_map(Map) ->
51+ % % pack_map(maps:to_list(Map), Opt);
52+ % % -endif.
5753
5854% % jiffy interface
5955pack ({Map }, Opt = ? OPTION {interface = jiffy }) when is_list (Map ) ->
@@ -87,18 +83,62 @@ pack(List, ?OPTION{enable_str=true}=Opt) when is_list(List) ->
8783pack (List , Opt ) when is_list (List ) ->
8884 pack_array (List , Opt );
8985
86+ pack (Other , Opt ) ->
87+ handle_ext (Other , Opt ).
88+
89+ -ifdef (without_map ).
90+
91+ handle_binary (Bin , Opt ) ->
92+ case Opt of
93+ # options_v2 {enable_str = true } = Opt -> pack_raw2 (Bin );
94+ # options_v2 {enable_str = false } = Opt -> pack_raw (Bin );
95+ # options_v1 {} = Opt -> pack_raw (Bin )
96+ end .
97+
9098% % Packing ext type with user defined packer function
91- pack (Any , _Opt = ? OPTION {ext_packer = Packer , original_list = Orig })
99+ handle_ext (Any , _Opt = ? OPTION {ext_packer = Packer ,
100+ original_list = Orig ,
101+ interface = Interface })
102+ when is_function (Packer ) andalso Interface =/= map ->
103+
104+ case pack_ext (Any , Packer , Orig ) of
105+ {ok , Binary } -> Binary ;
106+ {error , E } -> throw ({error , E })
107+ end ;
108+
109+ handle_ext (Other , _ ) ->
110+ throw ({badarg , Other }).
111+
112+ -else .
113+
114+ handle_binary (Bin , Opt ) ->
115+ case Opt of
116+ # options_v3 {enable_str = true } = Opt -> pack_raw2 (Bin );
117+ # options_v3 {enable_str = false } = Opt -> pack_raw (Bin );
118+ # options_v2 {enable_str = true } = Opt -> pack_raw2 (Bin );
119+ # options_v2 {enable_str = false } = Opt -> pack_raw (Bin );
120+ # options_v1 {} = Opt -> pack_raw (Bin )
121+ end .
122+
123+ % % %% map interface
124+ handle_ext (Map , Opt = ? OPTION {interface = map }) when is_map (Map ) ->
125+ pack_map (maps :to_list (Map ), Opt );
126+
127+ handle_ext (Any , _Opt = ? OPTION {ext_packer = Packer ,
128+ original_list = Orig ,
129+ interface = Interface })
92130 when is_function (Packer ) ->
93131
94132 case pack_ext (Any , Packer , Orig ) of
95133 {ok , Binary } -> Binary ;
96134 {error , E } -> throw ({error , E })
97135 end ;
98136
99- pack (Other , _ ) ->
137+ handle_ext (Other , _ ) ->
100138 throw ({badarg , Other }).
101139
140+ -endif .
141+
102142-spec pack_int (integer ()) -> binary ().
103143% % negative fixnum
104144pack_int (N ) when N >= - 32 ->
0 commit comments