Current section
Files
Jump to
Current section
Files
src/json_canvas@decode@edge.erl
-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).