bea_codecs/json/encoder

JSON encoders for @derive(encoder):

import bea_codecs/json/encoder

@derive(encoder)
pub type User { name: String, nick: Option(String) }

text = encoder.to_string(user, User.encoder())

@derive(encoder) on User defines user_encoder(), a fn(User) -> Json, which works with everything in gleam/json.

Conventions: a record is an object with a key per field label, None is null, and dictionaries need String keys (anything else doesn’t type check).

Types

pub type Encoder(a) =
  fn(a) -> json.Json

The fields of a record, as JSON object entries.

pub opaque type Fields(r)

Values

pub fn bool() -> fn(Bool) -> json.Json
pub fn dict(
  keys: fn(String) -> json.Json,
  values: fn(v) -> json.Json,
) -> fn(dict.Dict(String, v)) -> json.Json
pub fn done(value: r) -> Fields(r)
pub fn field(
  label: String,
  of: fn(a) -> json.Json,
  get: fn(r) -> a,
  next: fn(a) -> Fields(r),
) -> Fields(r)
pub fn float() -> fn(Float) -> json.Json
pub fn int() -> fn(Int) -> json.Json
pub fn list(of: fn(a) -> json.Json) -> fn(List(a)) -> json.Json
pub fn option(
  of: fn(a) -> json.Json,
) -> fn(option.Option(a)) -> json.Json
pub fn record(
  constructor: String,
  fields: fn() -> Fields(r),
) -> fn(r) -> json.Json
pub fn string() -> fn(String) -> json.Json
pub fn to_json(
  value: a,
  encoder: fn(a) -> json.Json,
) -> json.Json
pub fn to_string(value: a, encoder: fn(a) -> json.Json) -> String
✨ Search Document