uw-switch-semantics #53
@ -13,12 +13,15 @@
|
|||||||
, decode_typed/3 %% (Type, RLP, Types) -> Term
|
, decode_typed/3 %% (Type, RLP, Types) -> Term
|
||||||
, decode_typed/4 ]). %% (Type, RLP, Vsn, Types) -> Term
|
, decode_typed/4 ]). %% (Type, RLP, Vsn, Types) -> Term
|
||||||
|
|
||||||
-export([ serialize/1
|
-export([ serialize/1 %% (Term) -> Bin
|
||||||
, serialize/2
|
, serialize/2 %% (Term, Types) -> Bin
|
||||||
, serialize_typed/2
|
, serialize/3 %% (Term, Vsn, Types) -> Bin
|
||||||
, serialize_typed/3
|
, serialize_typed/2 %% (Type, Term) -> Bin
|
||||||
, deserialize/1
|
, serialize_typed/3 %% (Type, Term, Types) -> Bin
|
||||||
, deserialize/2 ]).
|
, serialize_typed/4 %% (Type, Term, Vsn, Types) -> Bin
|
||||||
|
, deserialize/1 %% (Bin) -> Term
|
||||||
|
, deserialize/2 %% (Bin, Types) -> Term
|
||||||
|
, deserialize/3 ]). %% (Bin, Vsn, Types) -> Term
|
||||||
|
|
||||||
%% register a type schema, inspect existing schema
|
%% register a type schema, inspect existing schema
|
||||||
-export([ register_types/1
|
-export([ register_types/1
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
-module(gmser_dyn_types).
|
-module(gmser_dyn_types).
|
||||||
|
|
||||||
-export([ from_list/2 ]).
|
-export([ add_type/4
|
||||||
|
, from_list/2
|
||||||
|
, expand/1 ]).
|
||||||
-export([ next_code/1 ]).
|
-export([ next_code/1 ]).
|
||||||
|
|
||||||
next_code(#{codes := Codes}) ->
|
next_code(#{codes := Codes}) ->
|
||||||
@ -12,6 +14,18 @@ add_type(Tag, Code, Template, Types) ->
|
|||||||
from_list(L, Types) ->
|
from_list(L, Types) ->
|
||||||
lists:foldl(fun elem_to_type/2, Types, L).
|
lists:foldl(fun elem_to_type/2, Types, L).
|
||||||
|
|
||||||
|
expand(#{vsn := V, templates := Templates0} = Types) ->
|
||||||
|
Templates =
|
||||||
|
maps:map(
|
||||||
|
fun(_, F) when is_function(F, 0) ->
|
||||||
|
F();
|
||||||
|
(_, F) when is_function(F, 1) ->
|
||||||
|
F(V);
|
||||||
|
(_, T) ->
|
||||||
|
T
|
||||||
|
end, Templates0),
|
||||||
|
Types#{templates := Templates}.
|
||||||
|
|
||||||
elem_to_type({Tag, Code, Template}, Acc) when is_atom(Tag), is_integer(Code) ->
|
elem_to_type({Tag, Code, Template}, Acc) when is_atom(Tag), is_integer(Code) ->
|
||||||
#{codes := Codes, rev := Rev, templates := Temps} = Acc,
|
#{codes := Codes, rev := Rev, templates := Temps} = Acc,
|
||||||
case {is_map_key(Tag, Rev), is_map_key(Code, Codes)} of
|
case {is_map_key(Tag, Rev), is_map_key(Code, Codes)} of
|
||||||
|
Loading…
x
Reference in New Issue
Block a user