Source file field.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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
(*****************************************************************************)
(*                                                                           *)
(*  Copyright (C) 2026 Yves Ndiaye                                           *)
(*                                                                           *)
(* This Source Code Form is subject to the terms of the Mozilla Public       *)
(* License, v. 2.0. If a copy of the MPL was not distributed with this       *)
(* file, You can obtain one at https://mozilla.org/MPL/2.0/.                 *)
(*                                                                           *)
(*****************************************************************************)

(** Operations on fields. *)

(** type of the fields. *)
type t =
  | FTitle
  | FArtist
  | FAlbum
  | FTitleSort
  | FAlbumArtist
  | FArtistSort
  | FAlbumSort
  | FTrack
  | FYear
  | FDisc
  | FCover
  | FGenre
  | FComment

(** [compare lhs rhs] is [Stdlib.compare lhs rhs]. *)
let compare : t -> t -> int = Stdlib.compare

(** [equal lhs rhs] is [Stdlib.( = ) lhs rhs]. *)
let equal : t -> t -> bool = ( = )

(** [to_string f] is the string representation of [f]. *)
let to_string = function
  | FTitle ->
      "title"
  | FArtist ->
      "artist"
  | FAlbum ->
      "album"
  | FAlbumArtist ->
      "album-artist"
  | FTitleSort ->
      "title-sort"
  | FArtistSort ->
      "artist-sort"
  | FAlbumSort ->
      "album-sort"
  | FTrack ->
      "track"
  | FYear ->
      "year"
  | FDisc ->
      "disc"
  | FCover ->
      "cover"
  | FGenre ->
      "genre"
  | FComment ->
      "comment"

(** [choices] is all fields associated with their string representation. *)
let choices =
  [
    ("title", FTitle);
    ("artist", FArtist);
    ("album", FAlbum);
    ("album-artist", FAlbumArtist);
    ("title-sort", FTitleSort);
    ("artist-sort", FArtistSort);
    ("album-sort", FAlbumSort);
    ("track", FTrack);
    ("year", FYear);
    ("disc", FDisc);
    ("cover", FCover);
    ("genre", FGenre);
    ("comment", FComment);
  ]