Erlang query string builder and parser
Erlang
-module(query_string).
-export([encode/1, parse/1]).
encode(Pairs) ->
uri_string:compose_query([{to_list(K), to_list(V)} || {K, V} <- Pairs]).
parse(Qs) ->
try uri_string:dissect_query(Qs) of
Pairs -> {ok, [{to_list(K), to_list(V)} || {K, V} <- Pairs]}
catch
_:_ -> {error, invalid_query}
end.
to_list(true) -> "";
to_list(V) when is_binary(V) -> binary_to_list(V);
to_list(V) when is_integer(V) -> integer_to_list(V);
to_list(V) when is_atom(V) -> atom_to_list(V);
to_list(V) when is_list(V) -> V.