Packages
oaspec
0.25.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/operation_ir.gleam
import gleam/option.{type Option, None, Some}
import oaspec/codegen/context.{type Context}
import oaspec/openapi/resolver
import oaspec/openapi/schema
import oaspec/openapi/spec
/// Compute the effective explode value for a parameter.
/// OpenAPI 3.x default: true for form/deepObject style, false otherwise.
/// When style is None (on a query parameter), the default is form → true.
pub fn effective_explode(param: spec.Parameter(spec.Resolved)) -> Bool {
case param.explode {
Some(v) -> v
None ->
case param.style {
Some(spec.FormStyle) | Some(spec.DeepObjectStyle) | None -> True
_ -> False
}
}
}
/// Return the delimiter character for a parameter style.
/// pipeDelimited → "|", spaceDelimited → " ", all others → ","
pub fn delimiter_for_style(style: Option(spec.ParameterStyle)) -> String {
case style {
Some(spec.PipeDelimitedStyle) -> "|"
Some(spec.SpaceDelimitedStyle) -> " "
_ -> ","
}
}
/// Check if a parameter uses deepObject serialization.
/// True when: in=query, style=deepObject, and schema is an ObjectSchema.
pub fn is_deep_object_param(
param: spec.Parameter(spec.Resolved),
ctx: Context,
) -> Bool {
case param.in_, param.style, spec.parameter_schema(param) {
spec.InQuery,
Some(spec.DeepObjectStyle),
Some(schema.Reference(..) as schema_ref)
->
case resolver.resolve_schema_ref(schema_ref, context.spec(ctx)) {
Ok(schema.ObjectSchema(..)) -> True
_ -> False
}
spec.InQuery,
Some(spec.DeepObjectStyle),
Some(schema.Inline(schema.ObjectSchema(..)))
-> True
_, _, _ -> False
}
}