-module(json_canvas@internal@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(json_canvas@types:color())}. -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(Dyn@2) -> _pipe@3 = Dyn@2, _pipe@4 = gleam@dynamic:string(_pipe@3), gleam@result:map(_pipe@4, fun(Field@0) -> {color, Field@0} end) end ) ))(_pipe).