geam-stdlib 0.2.0

Official Gleam standard-library providers for Geam
Documentation
import gleam/dynamic
import gleam/dynamic/decode

type Nested {
  Branch(List(Nested))
  Leaf(String)
}

fn nested_decoder() -> decode.Decoder(Nested) {
  use <- decode.recursive
  decode.one_of(decode.string |> decode.map(Leaf), or: [
    decode.list(nested_decoder()) |> decode.map(Branch),
  ])
}

pub fn main() {
  let data = dynamic.list([
    dynamic.string("one"),
    dynamic.list([
      dynamic.string("two"),
      dynamic.list([dynamic.string("three")]),
    ]),
  ])
  let expected =
    Branch([
      Leaf("one"),
      Branch([Leaf("two"), Branch([Leaf("three")])]),
    ])

  assert decode.run(data, nested_decoder()) == Ok(expected)

  Nil
}

// @geam:expect Nil