2025-09-28 22:12:16 +02:00
|
|
|
let accept_header_value =
|
2026-02-12 07:09:37 +01:00
|
|
|
Fmt.str "%a"
|
|
|
|
|
(Fmt.array ~sep:(Fmt.any ", ") Assets.Mimetype.pp)
|
|
|
|
|
Assets.Mimetype.arr
|
2025-09-28 22:12:16 +02:00
|
|
|
|
2025-09-28 18:36:25 +02:00
|
|
|
let avail_languages_header_value =
|
2026-02-12 07:09:37 +01:00
|
|
|
Fmt.str "%a" (Fmt.array ~sep:(Fmt.any ", ") Fmt.string) Assets.Language.arr
|
2025-09-28 18:36:25 +02:00
|
|
|
|
2026-03-03 10:09:03 +01:00
|
|
|
(* TODO better headers_lib
|
|
|
|
|
Cohttp raises on invalid *)
|
2025-09-28 19:37:49 +02:00
|
|
|
let select_mimetype headers =
|
2026-03-12 12:23:57 +01:00
|
|
|
let opt = Vifu.Headers.get headers "accept" in
|
2026-02-07 00:11:25 +01:00
|
|
|
Cohttp.Accept.media_ranges opt
|
2025-09-27 23:49:59 +02:00
|
|
|
|> Cohttp.Accept.qsort
|
2026-02-12 07:09:37 +01:00
|
|
|
|> List.find_map (fun (_q, (m, _p)) -> Assets.Mimetype.of_cohttp m)
|
2026-02-10 21:49:42 +01:00
|
|
|
|> function
|
2026-02-12 07:09:37 +01:00
|
|
|
| None -> Assets.Mimetype.default
|
2026-02-10 21:49:42 +01:00
|
|
|
| Some mime -> mime
|
2025-09-27 23:49:59 +02:00
|
|
|
|
|
|
|
|
let select_language headers =
|
2026-03-12 12:23:57 +01:00
|
|
|
let opt = Vifu.Headers.get headers "accept-language" in
|
2026-02-07 00:11:25 +01:00
|
|
|
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
|
2026-02-12 07:09:37 +01:00
|
|
|
|> List.find_map Assets.Language.of_cohttp
|
2026-02-10 21:49:42 +01:00
|
|
|
|> function
|
2026-02-12 07:09:37 +01:00
|
|
|
| None -> Assets.Language.default
|
2026-02-10 21:49:42 +01:00
|
|
|
| Some lang -> lang
|
2025-09-27 23:49:59 +02:00
|
|
|
|
|
|
|
|
let select_encoding headers =
|
2026-03-12 12:23:57 +01:00
|
|
|
let opt = Vifu.Headers.get headers "accept-encoding" in
|
2026-02-07 00:11:25 +01:00
|
|
|
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
|
2026-02-12 07:09:37 +01:00
|
|
|
| AnyEncoding -> Some Assets.Assets_config.default_encoding
|
2025-11-11 02:32:45 +01:00
|
|
|
| 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
|