Current section

Files

Jump to
utility src transform.erl
Raw

src/transform.erl

-module(transform).
-export([
%% 序列化和反序列化
term_to_string/1
,term_to_binary/1
,term_to_binary2/1
,binary_to_term/1
,string_to_term/1
,string_to_term/2
%% 基本转化
,to_atom/1
,to_binary/1
,to_string/1
,to_list/1
,to_integer/1
]).
%% -> list()
term_to_string(Term) ->
binary_to_list(list_to_binary(io_lib:format("~w", [Term]))).
%% -> binary()
term_to_binary(Term) ->
erlang:list_to_bitstring(io_lib:format("~w", [Term])).
%% ~w格式化
%% -> binary()
term_to_binary2(Term) ->
erlang:list_to_bitstring(io_lib:format("~w", [Term])).
%% term反序列化,string转换为term,e.g., "[{a},1]" => [{a},1]
%% -> undefined | term()
string_to_term(String) when is_list(String) ->
case erl_scan:string(String++".") of
{ok, Tokens, _} ->
case erl_parse:parse_term(Tokens) of
{ok, Term} ->
Term;
_Err ->
undefined
end;
_Error ->
undefined
end;
string_to_term(String) when is_binary(String) ->
string_to_term(binary_to_list(String));
string_to_term(Other) ->
Other.
string_to_term(String, Def) ->
case string_to_term(String) of
undefined -> Def;
Term -> Term
end.
binary_to_term(Binary) ->
string_to_term(Binary).
%% 转换为atom
to_atom(Val) when is_atom(Val) -> Val;
to_atom(Val) when is_list(Val) -> lists2:list_to_atom(Val);
to_atom(Val) when is_binary(Val) -> to_atom(binary_to_list(Val));
to_atom(Val) -> Val.
%% 转换为integer
to_integer(null) -> 0;
to_integer(undefined) -> 0;
to_integer([]) -> 0;
to_integer(Val) when is_integer(Val) -> Val;
to_integer(Val) when is_binary(Val) -> to_integer(binary_to_list(Val));
to_integer(Val) when is_list(Val) -> to_integer(list_to_integer(Val));
to_integer(Val) when is_float(Val) -> to_integer(float_to_list(Val));
to_integer(Val) -> Val.
%% 转换为list
to_string(Val) when is_list(Val) -> Val;
to_string(Val) when is_binary(Val) -> binary_to_list(Val);
to_string(Val) when is_integer(Val) -> integer_to_list(Val);
to_string(Val) when is_atom(Val) -> atom_to_list(Val);
to_string(Val) -> Val.
%% same as to_string/1
to_list(Val) -> to_string(Val).
%% 转换为binary
to_binary(Val) when is_integer(Val) -> list_to_binary(integer_to_list(Val));
to_binary(Val) when is_float(Val) -> list_to_binary(float_to_list(Val));
to_binary(Val) when is_list(Val) -> list_to_binary(Val);
to_binary(Val) when is_binary(Val) -> Val;
to_binary(_Val) -> <<>>.