libero

Libero: seed-driven typed wire-contract generation for Gleam.

Frameworks decide which application types cross the boundary. Libero walks those seeded types and generates the ETF, JSON, and decoder artifacts used by Rally.

Values

pub fn generate_atoms(
  discovered discovered: List(walker.DiscoveredType),
  atoms_module atoms_module: String,
  wire_module wire_module: option.Option(String),
) -> String

Generate the Erlang atoms pre-registration file content. Module name uses Gleam’s @-separated convention, for example generated@libero_atoms.

pub fn generate_decoders_ffi(
  discovered discovered: List(walker.DiscoveredType),
  package package: String,
  dependency_packages dependency_packages: List(String),
) -> String

Generate the JavaScript typed decoder FFI source. package is the Gleam package name that owns the modules.

pub fn generate_decoders_gleam() -> String

Generate the Gleam wrapper for the typed decoder FFI.

pub fn generate_etf_codec_module(
  atoms_module atoms_module: String,
  decoders_module decoders_module: String,
) -> String

Generate a neutral ETF codec wrapper for generated application code.

pub fn generate_json_contract(
  discovered discovered: List(walker.DiscoveredType),
  push_types push_types: List(contract.PushContract),
  ssr_models ssr_models: List(contract.SsrModelContract),
) -> String

Generate a deterministic JSON contract artifact from discovered types.

pub fn generate_json_contract_hash(
  discovered discovered: List(walker.DiscoveredType),
  push_types push_types: List(contract.PushContract),
  ssr_models ssr_models: List(contract.SsrModelContract),
) -> String
pub fn generate_wire_erl(
  discovered discovered: List(walker.DiscoveredType),
  wire_module wire_module: String,
) -> Result(String, gen_error.GenError)

Generate the per-type wire-transformer Erlang module.

pub fn qualified_atom_name(
  module_path module_path: String,
  variant_name variant_name: String,
) -> String

Build qualified atom names using the same logic as generated wire modules.

pub fn walk(
  seeds: List(#(String, String)),
) -> Result(List(walker.DiscoveredType), List(gen_error.GenError))

Walk the type graph from caller-provided seeds using this package’s src/ directory as the source root. Rally runs this from the application root, so its page-local wire types are discovered from the app’s src/.

Search Document