Source file cache_control.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
open Melange_json.Primitives
type breakpoint = Ephemeral
type ttl =
| Ttl_5m
| Ttl_1h
let ttl_to_string = function
| Ttl_5m -> "5m"
| Ttl_1h -> "1h"
let ttl_of_string = function
| "5m" -> Ttl_5m
| "1h" -> Ttl_1h
| other -> raise (Melange_json.Of_json_error (Melange_json.Unexpected_variant ("Unknown cache TTL: " ^ other)))
type breakpoint_json = {
type_ : string; [@json.key "type"]
ttl : string option; [@json.option] [@json.drop_default]
}
[@@deriving json]
type t = {
cache_type : breakpoint;
ttl : ttl option;
}
let to_json { cache_type; ttl } =
let type_ =
match cache_type with
| Ephemeral -> "ephemeral"
in
breakpoint_json_to_json { type_; ttl = Option.map ttl_to_string ttl }
let of_json json =
let { type_; ttl } = breakpoint_json_of_json json in
let cache_type =
match type_ with
| "ephemeral" -> Ephemeral
| other ->
raise (Melange_json.Of_json_error (Melange_json.Unexpected_variant ("Unknown cache breakpoint type: " ^ other)))
in
{ cache_type; ttl = Option.map ttl_of_string ttl }
let ephemeral = { cache_type = Ephemeral; ttl = None }
let ephemeral_1h = { cache_type = Ephemeral; ttl = Some Ttl_1h }
let to_json_fields = function
| None -> []
| Some cc -> [ "cache_control", to_json cc ]