Packages
oaspec
0.5.0
0.68.0
0.67.0
0.66.0
0.65.0
0.64.0
0.63.0
0.62.0
0.61.0
0.60.0
0.59.0
0.58.1
0.58.0
0.57.0
0.56.0
0.55.0
0.54.0
0.53.0
0.52.0
0.51.0
0.50.0
0.49.0
0.48.0
0.47.0
0.46.0
0.45.0
0.44.0
0.43.0
0.42.0
0.41.0
0.40.0
0.39.0
0.38.0
0.37.0
0.36.0
0.35.0
0.34.0
0.33.0
0.32.0
0.31.0
0.30.0
0.29.0
0.28.0
0.27.0
0.26.0
0.25.0
0.24.0
0.23.0
0.22.0
0.21.0
0.20.0
0.19.0
0.18.0
0.17.0
0.16.0
0.15.0
0.14.0
0.13.0
0.12.0
0.11.0
0.10.0
0.9.0
0.8.0
0.7.0
0.6.3
0.6.1
0.6.0
0.5.0
0.4.0
0.3.0
0.1.3
Generate Gleam code from OpenAPI 3.x specifications
Current section
Files
Jump to
Current section
Files
src/oaspec/codegen/ir.gleam
/// Gleam Code IR - intermediate representation for generated Gleam source files.
/// This separates schema semantics from text rendering, preventing the
/// duplication of logic across types/decoders/client generators.
import gleam/option.{type Option}
/// A complete generated Gleam source file.
pub type Module {
Module(header: String, imports: List(String), declarations: List(Declaration))
}
/// A top-level declaration with optional doc comment.
pub type Declaration {
Declaration(doc: Option(String), type_def: TypeDef)
}
/// The shapes of type definition that the OpenAPI generator produces.
pub type TypeDef {
/// `pub type Foo = Bar`
TypeAlias(name: String, target: String)
/// `pub type Foo { Foo(field1: Type1, field2: Type2) }`
RecordType(name: String, fields: List(Field))
/// `pub type Foo { FooBar(Bar) FooBaz(Baz) }`
UnionType(name: String, variants: List(Variant))
/// `pub type Status { StatusActive StatusInactive }`
EnumType(name: String, variants: List(String))
}
/// A named, typed field in a record constructor.
pub type Field {
Field(name: String, type_expr: String)
}
/// A variant in a union type.
pub type Variant {
/// Variant with a wrapped type: `FooBar(Bar)`
VariantWithType(name: String, inner_type: String)
/// Variant with no payload: `FooNone`
VariantEmpty(name: String)
}