-module(json_canvas@decode@edge). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([decode_side/1, decode_endpoint_shape/1, decode_edge/1]). -spec decode_side(gleam@dynamic:dynamic_()) -> {ok, json_canvas@types:side()} | {error, list(gleam@dynamic:decode_error())}. decode_side(Dyn) -> gleam@result:'try'(gleam@dynamic:string(Dyn), fun(Side) -> case Side of <<"top"/utf8>> -> {ok, top}; <<"right"/utf8>> -> {ok, right}; <<"bottom"/utf8>> -> {ok, bottom}; <<"left"/utf8>> -> {ok, left}; _ -> {error, [{decode_error, <<"top, right, bottom or left"/utf8>>, Side, []}]} end end). -spec decode_endpoint_shape(gleam@dynamic:dynamic_()) -> {ok, json_canvas@types:endpoint_shape()} | {error, list(gleam@dynamic:decode_error())}. decode_endpoint_shape(Dyn) -> gleam@result:'try'(gleam@dynamic:string(Dyn), fun(Shape) -> case Shape of <<"none"/utf8>> -> {ok, without_arrow}; <<"arrow"/utf8>> -> {ok, with_arrow}; _ -> {error, [{decode_error, <<"none or arrow"/utf8>>, Shape, []}]} end end). -spec decode_edge(gleam@dynamic:dynamic_()) -> {ok, json_canvas@types:edge()} | {error, list(gleam@dynamic:decode_error())}. decode_edge(Dyn) -> _pipe = Dyn, (gleam@dynamic:decode9( fun(Field@0, Field@1, Field@2, Field@3, Field@4, Field@5, Field@6, Field@7, Field@8) -> {edge, Field@0, Field@1, Field@2, Field@3, Field@4, Field@5, Field@6, Field@7, Field@8} 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) -> {edge_id, Field@0} end ) end), gleam@dynamic:field(<<"fromNode"/utf8>>, fun(Dyn@2) -> _pipe@3 = Dyn@2, _pipe@4 = gleam@dynamic:string(_pipe@3), gleam@result:map( _pipe@4, fun(Field@0) -> {node_id, Field@0} end ) end), gleam@dynamic:optional_field(<<"fromSide"/utf8>>, fun decode_side/1), fun(Dyn@3) -> _pipe@5 = Dyn@3, _pipe@6 = (gleam@dynamic:optional_field( <<"fromEnd"/utf8>>, fun decode_endpoint_shape/1 ))(_pipe@5), gleam@result:map( _pipe@6, fun(_capture) -> gleam@option:unwrap(_capture, without_arrow) end ) end, gleam@dynamic:field(<<"toNode"/utf8>>, fun(Dyn@4) -> _pipe@7 = Dyn@4, _pipe@8 = gleam@dynamic:string(_pipe@7), gleam@result:map( _pipe@8, fun(Field@0) -> {node_id, Field@0} end ) end), gleam@dynamic:optional_field(<<"toSide"/utf8>>, fun decode_side/1), fun(Dyn@5) -> _pipe@9 = Dyn@5, _pipe@10 = (gleam@dynamic:optional_field( <<"toEnd"/utf8>>, fun decode_endpoint_shape/1 ))(_pipe@9), gleam@result:map( _pipe@10, fun(_capture@1) -> gleam@option:unwrap(_capture@1, with_arrow) end ) end, gleam@dynamic:optional_field( <<"color"/utf8>>, fun(Dyn@6) -> _pipe@11 = Dyn@6, _pipe@12 = gleam@dynamic:string(_pipe@11), gleam@result:map(_pipe@12, fun(Field@0) -> {color, Field@0} end) end ), gleam@dynamic:optional_field( <<"label"/utf8>>, fun(Dyn@7) -> _pipe@13 = Dyn@7, _pipe@14 = gleam@dynamic:string(_pipe@13), gleam@result:map( _pipe@14, fun(Field@0) -> {edge_label, Field@0} end ) end ) ))(_pipe).