moves escaping of strings from encoder to formatter
This commit is contained in:
parent
cef8ccd5c2
commit
245640743d
2 changed files with 16 additions and 18 deletions
|
@ -47,8 +47,8 @@ start(Term, {Handler, State}, Opts) ->
|
||||||
Handler:handle_event(end_json, value(Term, {Handler, State}, Opts)).
|
Handler:handle_event(end_json, value(Term, {Handler, State}, Opts)).
|
||||||
|
|
||||||
|
|
||||||
value(String, {Handler, State}, Opts) when is_binary(String) ->
|
value(String, {Handler, State}, _Opts) when is_binary(String) ->
|
||||||
Handler:handle_event({string, jsx_utils:json_escape(String, Opts)}, State);
|
Handler:handle_event({string, String}, State);
|
||||||
value(Float, {Handler, State}, _Opts) when is_float(Float) ->
|
value(Float, {Handler, State}, _Opts) when is_float(Float) ->
|
||||||
Handler:handle_event({float, Float}, State);
|
Handler:handle_event({float, Float}, State);
|
||||||
value(Int, {Handler, State}, _Opts) when is_integer(Int) ->
|
value(Int, {Handler, State}, _Opts) when is_integer(Int) ->
|
||||||
|
@ -73,7 +73,7 @@ list_or_object(List, {Handler, State}, Opts) ->
|
||||||
|
|
||||||
object([{Key, Value}|Rest], {Handler, State}, Opts) ->
|
object([{Key, Value}|Rest], {Handler, State}, Opts) ->
|
||||||
object(Rest, {Handler,
|
object(Rest, {Handler,
|
||||||
value(Value, {Handler, Handler:handle_event({key, fix_key(Key, Opts)}, State)}, Opts)
|
value(Value, {Handler, Handler:handle_event({key, fix_key(Key)}, State)}, Opts)
|
||||||
}, Opts);
|
}, Opts);
|
||||||
object([], {Handler, State}, _Opts) -> Handler:handle_event(end_object, State);
|
object([], {Handler, State}, _Opts) -> Handler:handle_event(end_object, State);
|
||||||
object(Term, Handler, Opts) -> ?error([Term, Handler, Opts]).
|
object(Term, Handler, Opts) -> ?error([Term, Handler, Opts]).
|
||||||
|
@ -85,10 +85,8 @@ list([], {Handler, State}, _Opts) -> Handler:handle_event(end_array, State);
|
||||||
list(Term, Handler, Opts) -> ?error([Term, Handler, Opts]).
|
list(Term, Handler, Opts) -> ?error([Term, Handler, Opts]).
|
||||||
|
|
||||||
|
|
||||||
fix_key(Key, Opts) when is_binary(Key) ->
|
fix_key(Key) when is_binary(Key) -> Key;
|
||||||
jsx_utils:json_escape(Key, Opts);
|
fix_key(Key) when is_atom(Key) -> atom_to_binary(Key, utf8).
|
||||||
fix_key(Key, Opts) when is_atom(Key) ->
|
|
||||||
jsx_utils:json_escape(atom_to_binary(Key, utf8), Opts).
|
|
||||||
|
|
||||||
|
|
||||||
-ifdef(TEST).
|
-ifdef(TEST).
|
||||||
|
|
|
@ -78,7 +78,7 @@ init(Opts) -> {start, [], parse_opts(Opts)}.
|
||||||
|
|
||||||
handle_event(Event, {start, Acc, Opts}) ->
|
handle_event(Event, {start, Acc, Opts}) ->
|
||||||
case Event of
|
case Event of
|
||||||
{Type, Value} -> {[], [Acc, encode(Type, Value)], Opts}
|
{Type, Value} -> {[], [Acc, encode(Type, Value, Opts)], Opts}
|
||||||
; start_object -> {[object_start], [Acc, ?start_object], Opts}
|
; start_object -> {[object_start], [Acc, ?start_object], Opts}
|
||||||
; start_array -> {[array_start], [Acc, ?start_array], Opts}
|
; start_array -> {[array_start], [Acc, ?start_array], Opts}
|
||||||
end;
|
end;
|
||||||
|
@ -86,7 +86,7 @@ handle_event(Event, {[object_start|Stack], Acc, OldOpts = #opts{depth = Depth}})
|
||||||
Opts = OldOpts#opts{depth = Depth + 1},
|
Opts = OldOpts#opts{depth = Depth + 1},
|
||||||
case Event of
|
case Event of
|
||||||
{key, Key} ->
|
{key, Key} ->
|
||||||
{[object_value|Stack], [Acc, indent(Opts), encode(string, Key), ?colon, space(Opts)], Opts}
|
{[object_value|Stack], [Acc, indent(Opts), encode(string, Key, Opts), ?colon, space(Opts)], Opts}
|
||||||
; end_object ->
|
; end_object ->
|
||||||
{Stack, [Acc, ?end_object], OldOpts}
|
{Stack, [Acc, ?end_object], OldOpts}
|
||||||
end;
|
end;
|
||||||
|
@ -94,14 +94,14 @@ handle_event(Event, {[object_value|Stack], Acc, Opts}) ->
|
||||||
case Event of
|
case Event of
|
||||||
{Type, Value} when Type == string; Type == literal;
|
{Type, Value} when Type == string; Type == literal;
|
||||||
Type == integer; Type == float ->
|
Type == integer; Type == float ->
|
||||||
{[key|Stack], [Acc, encode(Type, Value)], Opts}
|
{[key|Stack], [Acc, encode(Type, Value, Opts)], Opts}
|
||||||
; start_object -> {[object_start, key|Stack], [Acc, ?start_object], Opts}
|
; start_object -> {[object_start, key|Stack], [Acc, ?start_object], Opts}
|
||||||
; start_array -> {[array_start, key|Stack], [Acc, ?start_array], Opts}
|
; start_array -> {[array_start, key|Stack], [Acc, ?start_array], Opts}
|
||||||
end;
|
end;
|
||||||
handle_event(Event, {[key|Stack], Acc, Opts = #opts{depth = Depth}}) ->
|
handle_event(Event, {[key|Stack], Acc, Opts = #opts{depth = Depth}}) ->
|
||||||
case Event of
|
case Event of
|
||||||
{key, Key} ->
|
{key, Key} ->
|
||||||
{[object_value|Stack], [Acc, ?comma, indent_or_space(Opts), encode(string, Key), ?colon, space(Opts)], Opts}
|
{[object_value|Stack], [Acc, ?comma, indent_or_space(Opts), encode(string, Key, Opts), ?colon, space(Opts)], Opts}
|
||||||
; end_object ->
|
; end_object ->
|
||||||
NewOpts = Opts#opts{depth = Depth - 1},
|
NewOpts = Opts#opts{depth = Depth - 1},
|
||||||
{Stack, [Acc, indent(NewOpts), ?end_object], NewOpts}
|
{Stack, [Acc, indent(NewOpts), ?end_object], NewOpts}
|
||||||
|
@ -111,7 +111,7 @@ handle_event(Event, {[array_start|Stack], Acc, OldOpts = #opts{depth = Depth}})
|
||||||
case Event of
|
case Event of
|
||||||
{Type, Value} when Type == string; Type == literal;
|
{Type, Value} when Type == string; Type == literal;
|
||||||
Type == integer; Type == float ->
|
Type == integer; Type == float ->
|
||||||
{[array|Stack], [Acc, indent(Opts), encode(Type, Value)], Opts}
|
{[array|Stack], [Acc, indent(Opts), encode(Type, Value, Opts)], Opts}
|
||||||
; start_object -> {[object_start, array|Stack], [Acc, indent(Opts), ?start_object], Opts}
|
; start_object -> {[object_start, array|Stack], [Acc, indent(Opts), ?start_object], Opts}
|
||||||
; start_array -> {[array_start, array|Stack], [Acc, indent(Opts), ?start_array], Opts}
|
; start_array -> {[array_start, array|Stack], [Acc, indent(Opts), ?start_array], Opts}
|
||||||
; end_array -> {Stack, [Acc, ?end_array], OldOpts}
|
; end_array -> {Stack, [Acc, ?end_array], OldOpts}
|
||||||
|
@ -120,7 +120,7 @@ handle_event(Event, {[array|Stack], Acc, Opts = #opts{depth = Depth}}) ->
|
||||||
case Event of
|
case Event of
|
||||||
{Type, Value} when Type == string; Type == literal;
|
{Type, Value} when Type == string; Type == literal;
|
||||||
Type == integer; Type == float ->
|
Type == integer; Type == float ->
|
||||||
{[array|Stack], [Acc, ?comma, indent_or_space(Opts), encode(Type, Value)], Opts}
|
{[array|Stack], [Acc, ?comma, indent_or_space(Opts), encode(Type, Value, Opts)], Opts}
|
||||||
; end_array ->
|
; end_array ->
|
||||||
NewOpts = Opts#opts{depth = Depth - 1},
|
NewOpts = Opts#opts{depth = Depth - 1},
|
||||||
{Stack, [Acc, indent(NewOpts), ?end_array], NewOpts}
|
{Stack, [Acc, indent(NewOpts), ?end_array], NewOpts}
|
||||||
|
@ -130,13 +130,13 @@ handle_event(Event, {[array|Stack], Acc, Opts = #opts{depth = Depth}}) ->
|
||||||
handle_event(end_json, {[], Acc, _Opts}) -> unicode:characters_to_binary(Acc, utf8).
|
handle_event(end_json, {[], Acc, _Opts}) -> unicode:characters_to_binary(Acc, utf8).
|
||||||
|
|
||||||
|
|
||||||
encode(string, String) ->
|
encode(string, String, Opts) ->
|
||||||
[?quote, String, ?quote];
|
[?quote, jsx_utils:json_escape(String, Opts), ?quote];
|
||||||
encode(literal, Literal) ->
|
encode(literal, Literal, _Opts) ->
|
||||||
erlang:atom_to_list(Literal);
|
erlang:atom_to_list(Literal);
|
||||||
encode(integer, Integer) ->
|
encode(integer, Integer, _Opts) ->
|
||||||
erlang:integer_to_list(Integer);
|
erlang:integer_to_list(Integer);
|
||||||
encode(float, Float) ->
|
encode(float, Float, _Opts) ->
|
||||||
jsx_utils:nice_decimal(Float).
|
jsx_utils:nice_decimal(Float).
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue