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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
module Annotation_severity = struct
type t =
| Error
| Warning
| Info
[@@deriving of_yojson, sexp_of]
end
open! Ppx_yojson_conv_lib.Yojson_conv.Primitives
module User_handle = struct
type t = Vcs.User_handle.t [@@deriving sexp_of]
let t_of_yojson json = json |> string_of_yojson |> Vcs.User_handle.v
end
type t =
{ default_repo_owner : User_handle.t option [@yojson.option] [@sexp.option]
; user_mentions_whitelist : User_handle.t list option [@yojson.option] [@sexp.option]
; invalid_crs_annotation_severity : Annotation_severity.t option
[@yojson.option] [@sexp.option]
; crs_due_now_annotation_severity : Annotation_severity.t option
[@yojson.option] [@sexp.option]
}
[@@deriving of_yojson, sexp_of]
let create
?default_repo_owner
?user_mentions_whitelist
?invalid_crs_annotation_severity
?crs_due_now_annotation_severity
()
=
{ default_repo_owner
; user_mentions_whitelist
; invalid_crs_annotation_severity
; crs_due_now_annotation_severity
}
;;
let empty =
{ default_repo_owner = None
; user_mentions_whitelist = None
; invalid_crs_annotation_severity = None
; crs_due_now_annotation_severity = None
}
;;
let load_exn ~path =
match Yojson_five.Safe.from_file (Fpath.to_string path) with
| Error msg ->
Err.raise ~loc:(Loc.of_file ~path) [ Pp.text "Not a valid json file."; Pp.text msg ]
| Ok json ->
(match t_of_yojson json with
| t -> t
| exception Ppx_yojson_conv_lib.Yojson_conv.Of_yojson_error (exn, json) ->
Err.raise
~loc:(Loc.of_file ~path)
Pp.O.
[ Pp.text "Invalid config."
; Pp.text "In: " ++ Pp.text (Yojson.Safe.to_string json)
; Err.exn exn
])
;;