mte/src/headers.ml

48 lines
1.5 KiB
OCaml
Raw Normal View History

2026-02-10 21:49:42 +01:00
(* TODO header
Cohttp -> Http *)
2025-09-28 22:12:16 +02:00
let accept_header_value =
2026-02-10 21:49:42 +01:00
let pp_list pp_item item = Fmt.list ~sep:(Fmt.any ", ") pp_item item in
Fmt.str "%a" (pp_list Assets.Mimetype.pp) Assets.Mimetype.all_supported
2025-09-28 22:12:16 +02:00
2025-09-28 18:36:25 +02:00
let avail_languages_header_value =
2026-02-10 21:49:42 +01:00
let pp_array pp_item item = Fmt.array ~sep:(Fmt.any ", ") pp_item item in
let s = Fmt.str "%a" (pp_array Fmt.string) Assets.supported_lang_arr in
2025-09-28 18:36:25 +02:00
s
2025-09-28 19:37:49 +02:00
let select_mimetype headers =
2026-02-07 00:11:25 +01:00
let opt = Vif.Headers.get headers "accept" in
Cohttp.Accept.media_ranges opt
2025-09-27 23:49:59 +02:00
|> Cohttp.Accept.qsort
2026-02-10 21:49:42 +01:00
|> List.find_map (fun (_q, (m, _p)) -> Assets.Mimetype.of_cohttp_media m)
|> function
| None -> Assets.default_mimetype
| Some mime -> mime
2025-09-27 23:49:59 +02:00
let select_language headers =
2026-02-07 00:11:25 +01:00
let opt = Vif.Headers.get headers "accept-language" in
Cohttp.Accept.languages opt
2025-09-27 23:49:59 +02:00
|> Cohttp.Accept.qsort
2026-02-10 21:49:42 +01:00
|> List.map snd
|> List.find_map Assets.Language.of_cohttp_language
|> function
| None -> Assets.default_lang
| Some lang -> lang
2025-09-27 23:49:59 +02:00
let select_encoding headers =
2026-02-07 00:11:25 +01:00
let opt = Vif.Headers.get headers "accept-encoding" in
Cohttp.Accept.encodings opt
2025-09-27 23:49:59 +02:00
|> Cohttp.Accept.qsort
|> List.map snd
2026-02-10 21:49:42 +01:00
|> List.find_map (function
2025-11-11 02:32:45 +01:00
| Cohttp.Accept.Identity -> Some `Identity
| Deflate -> Some `DEFLATE
| Gzip -> Some `Gzip
| AnyEncoding -> Some Assets.default_encoding
| Encoding _ | Compress -> (* unsupported *) None)
2025-09-27 23:49:59 +02:00
|> function
2026-02-10 21:49:42 +01:00
| None -> None
| Some `Identity -> None
| Some `DEFLATE -> Some `DEFLATE
| Some `Gzip -> Some `Gzip