grids2 #11
@ -38,14 +38,14 @@
|
||||
|
||||
-module(hz_grids).
|
||||
-vsn("0.7.0").
|
||||
-export([url/2, parse/1, req/2, req/3]).
|
||||
-export([url/2, url/3, url/4, parse/1, req/2, req/3]).
|
||||
|
||||
|
||||
-spec url(Instruction, HTTP) -> Result
|
||||
when Instruction :: spend | transfer | sign,
|
||||
HTTP :: uri_string:uri_string(),
|
||||
GRIDS :: uri_string:uri_string(),
|
||||
Result :: {ok, GRIDS} | uri_string:uri_error().
|
||||
Result :: {ok, GRIDS} | uri_string:uri_error(),
|
||||
GRIDS :: uri_string:uri_string().
|
||||
%% @doc
|
||||
%% Takes
|
||||
|
||||
@ -66,6 +66,63 @@ url2(Instruction, URL = #{path := Path}) ->
|
||||
{ok, uri_string:recompose(GRIDS)}.
|
||||
|
||||
|
||||
-spec url(Instruction, Recipient, Amount) -> GRIDS
|
||||
when Instruction :: {spend, Network} | {transfer, Node},
|
||||
Network :: string(),
|
||||
Node :: {inet:ip_address() | inet:hostname(), inet:port_number()}
|
||||
| uri_string:uri_string(),
|
||||
Recipient :: string(),
|
||||
Amount :: non_neg_integer(),
|
||||
GRIDS :: uri_string:uri_string().
|
||||
%% @doc
|
||||
%% Forms a GRIDS URL for spends or transfers.
|
||||
%% @equiv uri(Instruction, Recipient, Amount, "").
|
||||
|
||||
url(Instruction, Recipient, Amount) ->
|
||||
url(Instruction, Recipient, Amount, "").
|
||||
|
||||
|
||||
-spec url(Instruction, Recipient, Amount, Payload) -> GRIDS
|
||||
when Instruction :: {spend, Network} | {transfer, Node},
|
||||
Network :: string(),
|
||||
Node :: {inet:ip_address() | inet:hostname(), inet:port_number()}
|
||||
| uri_string:uri_string(), % "http://..." | "https://..."
|
||||
Recipient :: string(),
|
||||
Amount :: non_neg_integer() | none,
|
||||
Payload :: binary(),
|
||||
GRIDS :: uri_string:uri_string().
|
||||
%% @doc
|
||||
%% Forms a GRIDS URL for spends or transfers.
|
||||
|
||||
url({spend, Network}, Recipient, Amount, Payload) ->
|
||||
Elements = ["grids://", Network, "/1/s/", Recipient, qwargs(Amount, Payload)],
|
||||
unicode:characters_to_list(Elements);
|
||||
url({transfer, Node}, Recipient, Amount, Payload) ->
|
||||
Prefix =
|
||||
case Node of
|
||||
{H, P} -> ["grid://", h_to_s(H), ":", integer_to_list(P)];
|
||||
"https://" ++ H -> ["grids://", H];
|
||||
"http://" ++ H -> ["grid://", H];
|
||||
<<"https://", H/binary>> -> ["grids://", H];
|
||||
<<"http://", H/binary>> -> ["grid://", H]
|
||||
end,
|
||||
unicode:characters_to_list([Prefix, "/1/t/", Recipient, qwargs(Amount, Payload)]).
|
||||
|
||||
h_to_s(Host) when is_list(Host) -> Host;
|
||||
h_to_s(Host) when is_binary(Host) -> Host;
|
||||
h_to_s(Host) when is_tuple(Host) -> inet:ntoa(Host);
|
||||
h_to_s(Host) when is_atom(Host) -> atom_to_list(Host).
|
||||
|
||||
qwargs(none, "") ->
|
||||
[];
|
||||
qwargs(Amount, "") ->
|
||||
["?a=", integer_to_list(Amount)];
|
||||
qwargs(none, Payload) ->
|
||||
[$? | uri_string:compose_query([{"p", Payload}])];
|
||||
qwargs(Amount, Payload) ->
|
||||
[$? | uri_string:compose_query([{"a", integer_to_list(Amount)}, {"p", Payload}])].
|
||||
|
||||
|
||||
-spec parse(GRIDS) -> Result
|
||||
when GRIDS :: string(),
|
||||
Result :: {ok, Instruction} | uri_string:error(),
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user