OCaml environment config with typed validation
OCaml
let getenv name = match Sys.getenv_opt name with Some v when String.trim v <> "" -> Some v | _ -> None
let required name =
match getenv name with
| Some value -> Ok value
| None -> Error (Printf.sprintf "missing required env var %s" name)
let int_var name ~default =
match getenv name with
| None -> Ok default
| Some raw ->
match int_of_string_opt (String.trim raw) with
| Some n -> Ok n
| None -> Error (Printf.sprintf "%s must be an integer, got %S" name raw)
let load () =
match (required "DATABASE_URL", int_var "PORT" ~default:8080) with
| Ok url, Ok port when port > 0 && port < 65_536 -> Ok (url, port)
| Ok _, Ok port -> Error (Printf.sprintf "PORT out of range: %d" port)
| Error e, _ | _, Error e -> Error e