You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.2 KiB
45 lines
1.2 KiB
(*
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*)
|
|
|
|
(** Configuration options from config file *)
|
|
|
|
let config_file_env_var = "SLEDGE_CONFIG"
|
|
let exe_relative_config_file_path = "config"
|
|
|
|
let config_file =
|
|
match Sys.getenv config_file_env_var with
|
|
| Some file -> file
|
|
| None ->
|
|
Filename.concat
|
|
(Filename.dirname Sys.executable_name)
|
|
exe_relative_config_file_path
|
|
|
|
let contents =
|
|
try Yojson.Basic.from_file config_file
|
|
with Sys_error _ ->
|
|
warn
|
|
"could not read config file %s@\n\
|
|
The path to the config file can be overridden by the %s environment \
|
|
variable."
|
|
config_file config_file_env_var () ;
|
|
`Assoc []
|
|
|
|
module YBU = Yojson.Basic.Util
|
|
|
|
let find key =
|
|
try YBU.to_string_option (YBU.member key contents)
|
|
with YBU.Type_error _ -> None
|
|
|
|
let find_list key =
|
|
try YBU.filter_string (YBU.to_list (YBU.member key contents))
|
|
with YBU.Type_error _ -> []
|
|
|
|
let find_exn key =
|
|
match find key with
|
|
| Some data -> data
|
|
| None -> fail "%s not specified in config file %s" key config_file ()
|