Current section

Files

Jump to
json_canvas src json_canvas.gleam
Raw

src/json_canvas.gleam

import gleam/dynamic as dyn
import gleam/json
import json_canvas/edge.{type Edge, decode_edge}
import json_canvas/node.{type Node, decode_node}
pub type Canvas {
Canvas(nodes: List(Node), edges: List(Edge))
}
/// Convert `gleam/dynamic`'s `Dynamic` type into a `Canvas` type.
pub fn decoder(dyn: dyn.Dynamic) -> Result(Canvas, List(dyn.DecodeError)) {
dyn
|> dyn.decode2(
Canvas,
dyn.field("nodes", dyn.list(decode_node)),
dyn.field("edges", dyn.list(decode_edge)),
)
}
/// Decode a JSON Canvas string representation into a `Canvas` type.
pub fn decode(from json_canvas: String) -> Result(Canvas, json.DecodeError) {
json_canvas
|> json.decode(decoder)
}