Source file extension_kind.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
52
53
54
55
56
57
58
59
open! Base
open! Import
module Level = struct
type t =
[ `Debug
| `Info
| `Error
]
[@@deriving enumerate]
let to_expression t ~loc =
match t with
| `Debug -> [%expr `Debug]
| `Info -> [%expr `Info]
| `Error -> [%expr `Error]
;;
let to_string = function
| `Debug -> "debug"
| `Info -> "info"
| `Error -> "error"
;;
end
module Format = struct
type t =
[ `String
| `Message
| `Sexp
| `Printf
]
[@@deriving enumerate]
let extension_suffix = function
| `Message -> None
| `Sexp -> Some "sexp"
| `Printf -> Some "format"
| `String -> Some "string"
;;
end
type t =
{ level : Level.t option
; log_kind : unit Log_kind.t
; format : Format.t
}
[@@deriving enumerate]
let name { format; level; log_kind } =
let level_str = Option.map level ~f:Level.to_string in
let format_suffix = Format.extension_suffix format in
let extension_prefix = Log_kind.extension_prefix log_kind in
match level_str, format_suffix with
| None, None -> extension_prefix
| None, Some suffix -> extension_prefix ^ "." ^ suffix
| Some level, None -> extension_prefix ^ "." ^ level
| Some level, Some suffix -> extension_prefix ^ "." ^ level ^ "_" ^ suffix
;;