Packages
oaspec
0.29.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/internal/openapi/parser_error.gleam
//// Shared helpers for parser modules that need to turn a `yay`-level
//// extraction / selector failure into a `Diagnostic`. Split out of
//// `parser.gleam` so both top-level flow parsing and schema parsing can
//// depend on the same error shape without duplicating the hint-assembly
//// logic.
import gleam/int
import gleam/option.{Some}
import oaspec/openapi/diagnostic.{type Diagnostic, type SourceLoc, Diagnostic}
import yay
/// Build a `missing_field` diagnostic from a `yay.ExtractionError`, folding
/// the extractor-internal detail into the diagnostic's hint so nothing is
/// silently dropped.
pub fn missing_field_from_extraction(
err: yay.ExtractionError,
path path: String,
field field: String,
loc loc: SourceLoc,
) -> Diagnostic {
let base = diagnostic.missing_field(path:, field:, loc:)
Diagnostic(
..base,
hint: Some(
"Check your OpenAPI spec structure. ("
<> yay.extraction_error_to_string(err)
<> ")",
),
)
}
/// Build a `missing_field` diagnostic from a `yay.SelectorError`. The
/// selector error is collapsed to its constructor name since the detail
/// isn't meaningful to users, but we still thread it through rather than
/// discarding it outright.
pub fn missing_field_from_selector(
err: yay.SelectorError,
path path: String,
field field: String,
loc loc: SourceLoc,
) -> Diagnostic {
let detail = case err {
yay.NodeNotFound(at:) ->
"selector resolved up to segment " <> int.to_string(at)
yay.SelectorParseError -> "selector parse error"
}
let base = diagnostic.missing_field(path:, field:, loc:)
Diagnostic(
..base,
hint: Some("Check your OpenAPI spec structure. (" <> detail <> ")"),
)
}