Packages
oaspec
0.61.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_yay_error.gleam
//// `yay` → diagnostic bridge. Turns extractor and selector failures
//// from the `yay` YAML library into the project's `Diagnostic` type
//// via the pure `parser_error.missing_field_with_hint` helper.
////
//// Split out of `parser_error` so the diagnostic-assembly logic itself
//// stays target-neutral and only the yay-specific detail extraction
//// carries the BEAM coupling.
import gleam/int
import oaspec/internal/openapi/parser_error
import oaspec/openapi/diagnostic.{type Diagnostic, type SourceLoc}
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 {
parser_error.missing_field_with_hint(
detail: yay.extraction_error_to_string(err),
path:,
field:,
loc:,
)
}
/// 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"
}
parser_error.missing_field_with_hint(detail:, path:, field:, loc:)
}