let make_enum name get_enums default help =
let parse str =
let enum_lst = get_enums () in
if not (List.exists (fun (str', _) -> str = str') enum_lst) then
raise
(Parse_error
(Printf.sprintf
"%S is not an allowed value for %s."
str name));
str
in
let get =
make
~name
~parse
~print:(fun s -> s)
~default
~help
~fcli:
(fun get set ->
[cli_name name,
Arg.Symbol (List.map fst (get_enums ()), set),
" "^help])
()
in
fun conf ->
try
get conf, List.assoc (get conf) (get_enums ())
with Not_found ->
failwithf
"Enums list for %s has changed during execution." name