Current section

Files

Jump to
midas src uri uri_native.erl
Raw

src/uri/uri_native.erl

-module (uri_native).
-export ([parse/1, to_string/1, parse_query/1, query_to_string/1]).
find_key(Key, Map) ->
case maps:find(Key, Map) of
{ok, Value} ->
{ok, Value};
error ->
{error, nil}
end.
parse(String) ->
case uri_string:parse(String) of
{error, _Reason, _Term} ->
{error, nil};
Map ->
{ok, {
uri,
find_key(scheme, Map),
find_key(userinfo, Map),
find_key(host, Map),
find_key(port, Map),
maps:get(path, Map),
find_key(query, Map),
find_key(fragment, Map)
}}
end.
to_string({uri, MaybeScheme, MaybeUserinfo, MaybeHost, MaybePort, Path, MaybeQuery, MaybeFragment}) ->
Components = [{scheme, MaybeScheme}, {userinfo, MaybeUserinfo}, {host, MaybeHost}, {port, MaybePort}, {path, {ok, Path}}, {query, MaybeQuery}, {fragment, MaybeFragment}],
Map = maps:from_list([{K, V} || {K, {ok, V}} <- Components]),
case uri_string:recompose(Map) of
String when is_binary(String) ->
String;
% Return value when empty
[] -> <<"">>
end.
parse_query(String) ->
case uri_string:dissect_query(String) of
{error, _Reason, _Term} ->
{error, nil};
Parts ->
{ok, Parts}
end.
query_to_string(Parts) ->
case uri_string:compose_query(Parts, [{encoding, utf8}]) of
String when is_binary(String) ->
String;
% Return value when empty
[] -> <<"">>
end.