parser (and encoder) accept calendar:datetime() tuples and

convert into iso8601 strings
This commit is contained in:
alisdair sullivan 2014-08-13 23:32:19 -07:00
parent 6b43609730
commit 78f48db162
4 changed files with 34 additions and 2 deletions

View file

@ -46,7 +46,8 @@
| [json_term()] | []
| true | false | null
| integer() | float()
| binary() | atom().
| binary() | atom()
| calendar:datetime().
-endif.
-ifdef(maps_support).
@ -55,7 +56,8 @@
| map()
| true | false | null
| integer() | float()
| binary() | atom().
| binary() | atom()
| calendar:datetime().
-endif.
-type json_text() :: binary().

View file

@ -119,6 +119,16 @@ value([String|Tokens], Handler, Stack, Config) when is_atom(String) ->
value([{string, atom_to_binary(String, utf8)}] ++ Tokens, Handler, Stack, Config);
value([{raw, Raw}|Tokens], Handler, Stack, Config) when is_binary(Raw) ->
value((jsx:decoder(?MODULE, [], []))(Raw) ++ Tokens, Handler, Stack, Config);
value([{{Year, Month, Day}, {Hour, Min, Sec}}|Tokens], Handler, Stack, Config)
when is_integer(Year), is_integer(Month), is_integer(Day), is_integer(Hour), is_integer(Min), is_integer(Sec) ->
value([{string, unicode:characters_to_binary(io_lib:format(
"~4.10.0B-~2.10.0B-~2.10.0BT~2.10.0B:~2.10.0B:~2.10.0B",
[Year, Month, Day, Hour, Min, Sec]
))}|Tokens],
Handler,
Stack,
Config
);
value([], Handler, Stack, Config) ->
incomplete(value, Handler, Stack, Config);
value(BadTokens, Handler, Stack, Config) when is_list(BadTokens) ->
@ -1028,4 +1038,13 @@ repeated_key_test_() ->
)}
].
datetime_test_() ->
[
{"datetime", ?_assertEqual(
[start_array, {string, <<"2014-08-13T23:12:34">>}, end_array, end_json],
parse([start_array, {{2014,08,13},{23,12,34}}, end_array, end_json], [])
)}
].
-endif.