defmodule ZoiForge do @moduledoc """ Generate typed, documented Elixir modules from JSON Schema files using [Zoi](https://hex.pm/packages/zoi). ZoiForge is a code generator: point it at a directory of `*.schema.json` files and it writes Elixir modules with compile-time `@type t`, runtime `parse/1`, and docs derived from each schema. It works with any JSON Schema files on disk — no [Rusl](https://rusl.com) dependency required. ## Quick start Configure defaults (optional): config :zoi_forge, source_dir: "priv/schemas", output_dir: "lib/schemas" Generate modules: mix zoi_forge.gen Or call the generator directly: ZoiForge.Generator.run( prefix: "MyApp", source_dir: "priv/schemas", output_dir: "lib/schemas" ) ## Generated modules Each schema file becomes a module exposing: * `@type t` — Elixir type from the JSON Schema * `schema/0` — parsed Zoi schema * `raw_schema/0` — original JSON Schema string * `parse/1` — `Zoi.parse/2` wrapper Schemas with `$defs` also emit nested modules for individual definitions. ## Mix tasks * `mix zoi_forge.gen` — generate modules * `mix zoi_forge.verify` — fail when output is stale * `mix zoi_forge.clean` — remove generated output See `Mix.Tasks.ZoiForge.Gen` for CLI switches and configuration details. """ end