2025-09-28 22:12:16 +02:00
|
|
|
let accept_header_value =
|
|
|
|
|
let s = Fmt.str "%a" Util.(pp_array pp_mime) Assets.supported_mimetype_arr in
|
|
|
|
|
s
|
|
|
|
|
|
2025-09-28 18:36:25 +02:00
|
|
|
let avail_languages_header_value =
|
2025-09-28 22:12:16 +02:00
|
|
|
let s = Fmt.str "%a" (Util.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 =
|
2025-09-27 23:49:59 +02:00
|
|
|
let accept = Vif.Headers.get headers "accept" in
|
|
|
|
|
Cohttp.Accept.media_ranges accept
|
|
|
|
|
|> Cohttp.Accept.qsort
|
2025-09-29 00:45:45 +02:00
|
|
|
|> List.filter_map (fun (_q, (m, _p)) -> Util.Mimetype.of_cohttp_media m)
|
2025-09-28 19:37:49 +02:00
|
|
|
|> List.find_opt Assets.is_supported_mimetype
|
2025-09-27 23:49:59 +02:00
|
|
|
|
|
|
|
|
let select_language headers =
|
|
|
|
|
let accept_language = Vif.Headers.get headers "accept-language" in
|
|
|
|
|
Cohttp.Accept.languages accept_language
|
|
|
|
|
|> Cohttp.Accept.qsort
|
|
|
|
|
|> List.map (fun (_q, lang) -> lang)
|
|
|
|
|
|> List.map (function
|
2025-10-13 03:16:45 +02:00
|
|
|
| Cohttp.Accept.AnyLanguage -> Config.default_lang
|
2025-09-27 23:49:59 +02:00
|
|
|
| Language language_range -> (
|
|
|
|
|
(* ignore language subtags (e.g. "en-US" -> "en") *)
|
|
|
|
|
match language_range with
|
|
|
|
|
| [] -> assert false
|
|
|
|
|
| primary_tag :: _ -> primary_tag))
|
|
|
|
|
|> List.find_opt Assets.is_supported_lang
|
2025-10-13 03:16:45 +02:00
|
|
|
|> Option.value ~default:Config.default_lang
|
2025-09-27 23:49:59 +02:00
|
|
|
|
|
|
|
|
let select_encoding headers =
|
|
|
|
|
Vif.Headers.get headers "accept-encoding"
|
|
|
|
|
|> Cohttp.Accept.encodings
|
|
|
|
|
|> Cohttp.Accept.qsort
|
|
|
|
|
|> List.map snd
|
|
|
|
|
|> List.filter_map (function
|
|
|
|
|
| Cohttp.Accept.Identity -> Some `Identity
|
|
|
|
|
| Deflate -> Some `DEFLATE
|
|
|
|
|
| Gzip -> Some `Gzip
|
2025-10-13 03:16:45 +02:00
|
|
|
| AnyEncoding -> Some Config.default_encoding
|
2025-09-27 23:49:59 +02:00
|
|
|
| Encoding _ | Compress -> (* unsupported *) None)
|
|
|
|
|
|> function
|
|
|
|
|
| [] -> assert false
|
|
|
|
|
| `Identity :: _ -> None
|
|
|
|
|
| `DEFLATE :: _ -> Some `DEFLATE
|
|
|
|
|
| `Gzip :: _ -> Some `Gzip
|