element.version === currentVersion)) { versionNodes.unshift({ version: currentVersion, url: "#" }); } document.querySelector("#project-version").innerHTML = versionNodes.reduce( (acc, element) => { const status = currentVersion === element.version ? "selected disabled" : ""; return ` ${acc} `; }, `
kata_json · v0.2.0

kata_json

kata_json — JSON adapter for kata.

Installation

gleam add kata_json

Quick Start

import kata/schema
import kata/refine
import kata_json

pub type User {
  User(name: String, email: String, age: Int)
}

fn user_schema() -> schema.Schema(User) {
  use name <- schema.field("name", schema.string() |> refine.min_length(1), fn(u: User) { u.name })
  use email <- schema.field("email", schema.string(), fn(u: User) { u.email })
  use age <- schema.field("age", schema.int() |> refine.min(0), fn(u: User) { u.age })
  schema.done(User(name:, email:, age:))
}

// Decode from JSON
let assert Ok(user) = kata_json.decode_json(user_schema(), "{\"name\":\"Alice\",\"email\":\"a@b.com\",\"age\":30}")

// Encode to JSON
let json = kata_json.encode_json(user_schema(), User("Alice", "a@b.com", 30))
// -> "{\"name\":\"Alice\",\"email\":\"a@b.com\",\"age\":30}"

API

  • parse(input: String) -> Result(Value, String) — Parse JSON to Value (schema-independent)
  • serialize(v: Value) -> String — Serialize Value to JSON string (schema-independent)
  • decode_json(schema, input) -> Result(a, JsonError) — Decode JSON using a schema
  • encode_json(schema, value) -> String — Encode a value to JSON using a schema

Development

gleam test  # Run the tests
Search Document