Current section
Files
Jump to
Current section
Files
src/json_canvas@internal@generic_node.erl
-module(json_canvas@internal@generic_node).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([decode_node_type/1, decode_generic_node/1]).
-export_type([node_type/0, generic_node/0]).
-type node_type() :: text_node_type |
file_node_type |
link_node_type |
group_node_type.
-type generic_node() :: {generic_node,
json_canvas@types:node_id(),
node_type(),
integer(),
integer(),
integer(),
integer(),
gleam@option:option(binary())}.
-spec decode_node_type(gleam@dynamic:dynamic_()) -> {ok, node_type()} |
{error, list(gleam@dynamic:decode_error())}.
decode_node_type(Dyn) ->
gleam@result:'try'(gleam@dynamic:string(Dyn), fun(Ty) -> case Ty of
<<"text"/utf8>> ->
{ok, text_node_type};
<<"file"/utf8>> ->
{ok, file_node_type};
<<"link"/utf8>> ->
{ok, link_node_type};
<<"group"/utf8>> ->
{ok, group_node_type};
_ ->
{error,
[{decode_error,
<<"text, file, link or group"/utf8>>,
Ty,
[]}]}
end end).
-spec decode_generic_node(gleam@dynamic:dynamic_()) -> {ok, generic_node()} |
{error, list(gleam@dynamic:decode_error())}.
decode_generic_node(Dyn) ->
_pipe = Dyn,
(gleam@dynamic:decode7(
fun(Field@0, Field@1, Field@2, Field@3, Field@4, Field@5, Field@6) -> {generic_node, Field@0, Field@1, Field@2, Field@3, Field@4, Field@5, Field@6} end,
gleam@dynamic:field(<<"id"/utf8>>, fun(Dyn@1) -> _pipe@1 = Dyn@1,
_pipe@2 = gleam@dynamic:string(_pipe@1),
gleam@result:map(
_pipe@2,
fun(Field@0) -> {node_id, Field@0} end
) end),
gleam@dynamic:field(<<"type"/utf8>>, fun decode_node_type/1),
gleam@dynamic:field(<<"x"/utf8>>, fun gleam@dynamic:int/1),
gleam@dynamic:field(<<"y"/utf8>>, fun gleam@dynamic:int/1),
gleam@dynamic:field(<<"width"/utf8>>, fun gleam@dynamic:int/1),
gleam@dynamic:field(<<"height"/utf8>>, fun gleam@dynamic:int/1),
gleam@dynamic:optional_field(
<<"color"/utf8>>,
fun gleam@dynamic:string/1
)
))(_pipe).