mirror of
https://github.com/valitydev/woody_erlang.git
synced 2024-11-06 02:15:19 +00:00
MSPF-532: get rid of rfc3339 lib (#131)
This commit is contained in:
parent
d55dbf551a
commit
3ddd842a33
@ -22,7 +22,6 @@
|
|||||||
{deps, [
|
{deps, [
|
||||||
{cowboy, "2.7.0"},
|
{cowboy, "2.7.0"},
|
||||||
{hackney, "1.15.2"},
|
{hackney, "1.15.2"},
|
||||||
{rfc3339, "0.2.2"},
|
|
||||||
{gproc , "0.8.0"},
|
{gproc , "0.8.0"},
|
||||||
{cache , "2.2.0"},
|
{cache , "2.2.0"},
|
||||||
{thrift, {git, "https://github.com/rbkmoney/thrift_erlang.git", {branch, "master"}}},
|
{thrift, {git, "https://github.com/rbkmoney/thrift_erlang.git", {branch, "master"}}},
|
||||||
|
@ -27,7 +27,6 @@
|
|||||||
{<<"mimerl">>,{pkg,<<"mimerl">>,<<"1.2.0">>},1},
|
{<<"mimerl">>,{pkg,<<"mimerl">>,<<"1.2.0">>},1},
|
||||||
{<<"parse_trans">>,{pkg,<<"parse_trans">>,<<"3.3.0">>},2},
|
{<<"parse_trans">>,{pkg,<<"parse_trans">>,<<"3.3.0">>},2},
|
||||||
{<<"ranch">>,{pkg,<<"ranch">>,<<"1.7.1">>},1},
|
{<<"ranch">>,{pkg,<<"ranch">>,<<"1.7.1">>},1},
|
||||||
{<<"rfc3339">>,{pkg,<<"rfc3339">>,<<"0.2.2">>},0},
|
|
||||||
{<<"snowflake">>,
|
{<<"snowflake">>,
|
||||||
{git,"https://github.com/rbkmoney/snowflake.git",
|
{git,"https://github.com/rbkmoney/snowflake.git",
|
||||||
{ref,"0a598108f6582affe3b4ae550fc5b9f2062e318a"}},
|
{ref,"0a598108f6582affe3b4ae550fc5b9f2062e318a"}},
|
||||||
@ -52,7 +51,6 @@
|
|||||||
{<<"mimerl">>, <<"67E2D3F571088D5CFD3E550C383094B47159F3EEE8FFA08E64106CDF5E981BE3">>},
|
{<<"mimerl">>, <<"67E2D3F571088D5CFD3E550C383094B47159F3EEE8FFA08E64106CDF5E981BE3">>},
|
||||||
{<<"parse_trans">>, <<"09765507A3C7590A784615CFD421D101AEC25098D50B89D7AA1D66646BC571C1">>},
|
{<<"parse_trans">>, <<"09765507A3C7590A784615CFD421D101AEC25098D50B89D7AA1D66646BC571C1">>},
|
||||||
{<<"ranch">>, <<"6B1FAB51B49196860B733A49C07604465A47BDB78AA10C1C16A3D199F7F8C881">>},
|
{<<"ranch">>, <<"6B1FAB51B49196860B733A49C07604465A47BDB78AA10C1C16A3D199F7F8C881">>},
|
||||||
{<<"rfc3339">>, <<"1552DF616ACA368D982E9F085A0E933B6688A3F4938A671798978EC2C0C58730">>},
|
|
||||||
{<<"ssl_verify_fun">>, <<"6EAF7AD16CB568BB01753DBBD7A95FF8B91C7979482B95F38443FE2C8852A79B">>},
|
{<<"ssl_verify_fun">>, <<"6EAF7AD16CB568BB01753DBBD7A95FF8B91C7979482B95F38443FE2C8852A79B">>},
|
||||||
{<<"unicode_util_compat">>, <<"D869E4C68901DD9531385BB0C8C40444EBF624E60B6962D95952775CAC5E90CD">>}]}
|
{<<"unicode_util_compat">>, <<"D869E4C68901DD9531385BB0C8C40444EBF624E60B6962D95952775CAC5E90CD">>}]}
|
||||||
].
|
].
|
||||||
|
@ -10,7 +10,6 @@
|
|||||||
cowboy,
|
cowboy,
|
||||||
hackney,
|
hackney,
|
||||||
thrift,
|
thrift,
|
||||||
rfc3339,
|
|
||||||
gproc,
|
gproc,
|
||||||
cache
|
cache
|
||||||
]},
|
]},
|
||||||
|
@ -52,33 +52,27 @@ from_timeout(TimeoutMillisec) ->
|
|||||||
binary().
|
binary().
|
||||||
to_binary(Deadline = undefined) ->
|
to_binary(Deadline = undefined) ->
|
||||||
erlang:error(bad_deadline, [Deadline]);
|
erlang:error(bad_deadline, [Deadline]);
|
||||||
to_binary(Deadline = {{Date, Time}, Millisec}) ->
|
to_binary(Deadline) ->
|
||||||
try rfc3339:format({Date, Time, Millisec * 1000, 0}) of
|
try
|
||||||
{ok, DeadlineBin} when is_binary(DeadlineBin) ->
|
Millis = to_unixtime_ms(Deadline),
|
||||||
DeadlineBin;
|
Str = calendar:system_time_to_rfc3339(Millis, [{unit, millisecond}, {offset, "Z"}]),
|
||||||
Error ->
|
erlang:list_to_binary(Str)
|
||||||
%% rfc3339:format/1 has a broken spec and ugly (if not to say broken) code,
|
|
||||||
%% so just throw any non succeess case here.
|
|
||||||
erlang:error({bad_deadline, Error}, [Deadline])
|
|
||||||
catch
|
catch
|
||||||
error:Error:Stacktrace ->
|
error:Error:Stacktrace ->
|
||||||
erlang:error({bad_deadline, {Error, Stacktrace}}, [Deadline])
|
erlang:error({bad_deadline, {Error, Stacktrace}}, [Deadline])
|
||||||
end.
|
end.
|
||||||
|
|
||||||
%% Suppress dialyzer warning until rfc3339 spec will be fixed.
|
|
||||||
%% see https://github.com/talentdeficit/rfc3339/pull/5
|
|
||||||
-dialyzer([{nowarn_function, [from_binary/1]}, no_match]).
|
|
||||||
-spec from_binary(binary()) ->
|
-spec from_binary(binary()) ->
|
||||||
deadline().
|
deadline().
|
||||||
from_binary(Bin) ->
|
from_binary(Bin) ->
|
||||||
case rfc3339:parse(Bin) of
|
ok = assert_is_utc(Bin),
|
||||||
{ok, {_Date, _Time, _Usec, TZ}} when TZ =/= 0 andalso TZ =/= undefined ->
|
Str = erlang:binary_to_list(Bin),
|
||||||
erlang:error({bad_deadline, not_utc}, [Bin]);
|
try
|
||||||
{ok, {Date, Time, undefined, _TZ}} ->
|
Millis = calendar:rfc3339_to_system_time(Str, [{unit, millisecond}]),
|
||||||
{to_calendar_datetime(Date, Time), 0};
|
Datetime = calendar:system_time_to_universal_time(Millis, millisecond),
|
||||||
{ok, {Date, Time, Usec, _TZ}} ->
|
{Datetime, Millis rem 1000}
|
||||||
{to_calendar_datetime(Date, Time), Usec div 1000};
|
catch
|
||||||
{error, Error} ->
|
error:Error ->
|
||||||
erlang:error({bad_deadline, Error}, [Bin])
|
erlang:error({bad_deadline, Error}, [Bin])
|
||||||
end.
|
end.
|
||||||
|
|
||||||
@ -94,6 +88,17 @@ from_unixtime_ms(DeadlineMillisec) ->
|
|||||||
%% Internal functions
|
%% Internal functions
|
||||||
%%
|
%%
|
||||||
|
|
||||||
|
-spec assert_is_utc(binary()) ->
|
||||||
|
ok | no_return().
|
||||||
|
assert_is_utc(Bin) ->
|
||||||
|
Size = erlang:byte_size(Bin) - 1,
|
||||||
|
case Bin of
|
||||||
|
<<_:Size/bytes, "Z">> ->
|
||||||
|
ok;
|
||||||
|
_ ->
|
||||||
|
erlang:error({bad_deadline, not_utc}, [Bin])
|
||||||
|
end.
|
||||||
|
|
||||||
-spec unow() ->
|
-spec unow() ->
|
||||||
millisec().
|
millisec().
|
||||||
unow() ->
|
unow() ->
|
||||||
@ -101,11 +106,3 @@ unow() ->
|
|||||||
% erlang:system_time/1 may have a various difference with global time to prevent time warp.
|
% erlang:system_time/1 may have a various difference with global time to prevent time warp.
|
||||||
% see http://erlang.org/doc/apps/erts/time_correction.html#time-warp-modes for details
|
% see http://erlang.org/doc/apps/erts/time_correction.html#time-warp-modes for details
|
||||||
os:system_time(millisecond).
|
os:system_time(millisecond).
|
||||||
|
|
||||||
to_calendar_datetime(Date, Time = {H, _, S}) when H =:= 24 orelse S =:= 60 ->
|
|
||||||
%% Type specifications for hours and seconds differ in calendar and rfc3339,
|
|
||||||
%% so make a proper calendar:datetime() here.
|
|
||||||
Sec = calendar:datetime_to_gregorian_seconds({Date, Time}),
|
|
||||||
calendar:gregorian_seconds_to_datetime(Sec);
|
|
||||||
to_calendar_datetime(Date, Time) ->
|
|
||||||
{Date, Time}.
|
|
||||||
|
@ -602,7 +602,7 @@ deadline_to_from_timeout_test(_) ->
|
|||||||
|
|
||||||
deadline_to_from_binary_test(_) ->
|
deadline_to_from_binary_test(_) ->
|
||||||
Deadline = {{{2010, 4, 11}, {22, 35, 41}}, 29},
|
Deadline = {{{2010, 4, 11}, {22, 35, 41}}, 29},
|
||||||
DeadlineBin = <<"2010-04-11T22:35:41.029000Z">>,
|
DeadlineBin = <<"2010-04-11T22:35:41.029Z">>,
|
||||||
DeadlineBin = woody_deadline:to_binary(Deadline),
|
DeadlineBin = woody_deadline:to_binary(Deadline),
|
||||||
Deadline = woody_deadline:from_binary(DeadlineBin),
|
Deadline = woody_deadline:from_binary(DeadlineBin),
|
||||||
|
|
||||||
@ -611,10 +611,17 @@ deadline_to_from_binary_test(_) ->
|
|||||||
Deadline1 = woody_deadline:from_binary(DeadlineBin1),
|
Deadline1 = woody_deadline:from_binary(DeadlineBin1),
|
||||||
|
|
||||||
Deadline2 = {{{2010, 4, 11}, {22, 35, 41}}, 0},
|
Deadline2 = {{{2010, 4, 11}, {22, 35, 41}}, 0},
|
||||||
DeadlineBin2 = <<"2010-04-11T22:35:41Z">>,
|
DeadlineBin2 = <<"2010-04-11T22:35:41.000Z">>,
|
||||||
Deadline2 = woody_deadline:from_binary(woody_deadline:to_binary(Deadline2)),
|
Deadline2 = woody_deadline:from_binary(woody_deadline:to_binary(Deadline2)),
|
||||||
DeadlineBin2 = woody_deadline:to_binary(Deadline2),
|
DeadlineBin2 = woody_deadline:to_binary(Deadline2),
|
||||||
|
|
||||||
|
Deadline3 = <<"2010-04-11T22:35:41+00:30">>,
|
||||||
|
try woody_deadline:from_binary(Deadline3)
|
||||||
|
catch
|
||||||
|
error:{bad_deadline, not_utc} ->
|
||||||
|
ok
|
||||||
|
end,
|
||||||
|
|
||||||
try woody_deadline:to_binary({{baddate, {22, 35, 41}}, 29})
|
try woody_deadline:to_binary({{baddate, {22, 35, 41}}, 29})
|
||||||
catch
|
catch
|
||||||
error:{bad_deadline, _} ->
|
error:{bad_deadline, _} ->
|
||||||
|
Loading…
Reference in New Issue
Block a user