Packages
oaspec
0.6.3
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/util/http.gleam
import gleam/int
import gleam/list
/// Shared HTTP status code utilities for code generation.
/// Get a human-readable suffix for a given HTTP status code.
/// Used to build anonymous type names like "ListPetsResponseOk".
pub fn status_code_suffix(code: String) -> String {
case code {
"200" -> "Ok"
"201" -> "Created"
"204" -> "NoContent"
"400" -> "BadRequest"
"401" -> "Unauthorized"
"403" -> "Forbidden"
"404" -> "NotFound"
"409" -> "Conflict"
"422" -> "UnprocessableEntity"
"500" -> "InternalServerError"
"default" -> "Default"
"1XX" | "1xx" -> "Status1xx"
"2XX" | "2xx" -> "Status2xx"
"3XX" | "3xx" -> "Status3xx"
"4XX" | "4xx" -> "Status4xx"
"5XX" | "5xx" -> "Status5xx"
other -> "Status" <> other
}
}
/// Convert a status code string to a valid Gleam case pattern.
/// Exact codes become integer literals, range codes become guard expressions,
/// and "default" becomes "_" (catch-all).
pub fn status_code_to_int_pattern(code: String) -> String {
case code {
"default" -> "_"
"1XX" | "1xx" -> "status if status >= 100 && status <= 199"
"2XX" | "2xx" -> "status if status >= 200 && status <= 299"
"3XX" | "3xx" -> "status if status >= 300 && status <= 399"
"4XX" | "4xx" -> "status if status >= 400 && status <= 499"
"5XX" | "5xx" -> "status if status >= 500 && status <= 599"
_ -> code
}
}
/// Sort response entries so that exact codes come before ranges,
/// and ranges come before the default catch-all. This ensures
/// correct pattern matching order in generated case expressions.
pub fn sort_response_entries(entries: List(#(String, a))) -> List(#(String, a)) {
list.sort(entries, fn(a, b) {
int.compare(status_sort_priority(a.0), status_sort_priority(b.0))
})
}
/// Convert a status code string to an integer string for use in ServerResponse.
/// Range codes and "default" map to a representative status code.
pub fn status_code_to_int(code: String) -> String {
case code {
"default" -> "500"
"1XX" | "1xx" -> "100"
"2XX" | "2xx" -> "200"
"3XX" | "3xx" -> "300"
"4XX" | "4xx" -> "400"
"5XX" | "5xx" -> "500"
_ -> code
}
}
fn status_sort_priority(code: String) -> Int {
case code {
"default" -> 9999
"1XX" | "1xx" -> 1100
"2XX" | "2xx" -> 1200
"3XX" | "3xx" -> 1300
"4XX" | "4xx" -> 1400
"5XX" | "5xx" -> 1500
_ -> {
case int.parse(code) {
Ok(n) -> n
Error(_) -> 9998
}
}
}
}