geam-stdlib 0.2.1

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

pub fn main() {
  let list_data =
    dynamic.list([dynamic.int(1), dynamic.int(2), dynamic.int(3)])
  let array_data =
    dynamic.array([dynamic.int(4), dynamic.int(5), dynamic.int(6)])
  assert decode.run(list_data, decode.list(decode.int)) == Ok([1, 2, 3])
  assert decode.run(array_data, decode.list(decode.int)) == Ok([4, 5, 6])

  let invalid_list =
    dynamic.list([dynamic.int(1), dynamic.string("two"), dynamic.int(3)])
  assert decode.run(invalid_list, decode.list(decode.int)) == Error([
    decode.DecodeError(expected: "Int", found: "String", path: ["1"]),
  ])
  assert decode.run(dynamic.int(1), decode.list(decode.int)) == Error([
    decode.DecodeError(expected: "List", found: "Int", path: []),
  ])

  let properties = dynamic.properties([
    #(dynamic.string("one"), dynamic.int(1)),
    #(dynamic.string("two"), dynamic.int(2)),
  ])
  assert decode.run(properties, decode.dict(decode.string, decode.int)) ==
    Ok(dict.from_list([#("one", 1), #("two", 2)]))
  assert decode.run(dynamic.list([]), decode.dict(decode.string, decode.int)) ==
    Error([decode.DecodeError(expected: "Dict", found: "List", path: [])])

  #(list_data, array_data, properties)
}

// @geam:expect #([1, 2, 3], #(4, 5, 6), dict.from_list([#("one", 1), #("two", 2)]))