From 6f95f4191699186a14a3109f08822189d0f8331e Mon Sep 17 00:00:00 2001 From: Daniil Baturin Date: Thu, 15 Dec 2016 09:54:13 +0600 Subject: Add Directories module for storing directory structure information. --- src/directories.ml | 42 ++++++++++++++++++++++++++++++++++++++++++ src/directories.mli | 11 +++++++++++ 2 files changed, 53 insertions(+) create mode 100644 src/directories.ml create mode 100644 src/directories.mli diff --git a/src/directories.ml b/src/directories.ml new file mode 100644 index 0000000..625b2e3 --- /dev/null +++ b/src/directories.ml @@ -0,0 +1,42 @@ +module F = Filename +module FU = FileUtil + +type t = { + components: string; + validators: string; + migrators: string; + component_definitions: string; + interface_definitions: string; +} + +let relative_dirs = { + components = "components"; + validators = "validators"; + migrators = "migration"; + component_definitions = "components"; + interface_definitions = "interfaces"; +} + +let make conf = + let open Vyconf_config in + { + components = F.concat conf.program_dir relative_dirs.components; + validators = F.concat conf.program_dir relative_dirs.validators; + migrators = F.concat conf.program_dir relative_dirs.migrators; + component_definitions = F.concat conf.data_dir relative_dirs.component_definitions; + interface_definitions = F.concat conf.data_dir relative_dirs.interface_definitions + } + +(** Check if required directories exist + We do not try to check if they are readable at this point, it's just to fail early + if they don't even exist and we shouldn't bother trying + *) +let test dirs = + let check_dir d = + if FU.test FU.Is_dir d then () + else raise (Failure (Printf.sprintf "%s does not exist or is not a directory" d)) in + let l = [dirs.components; dirs.validators; dirs.migrators; + dirs.component_definitions; dirs.interface_definitions] in + try + List.iter check_dir l; Ok () + with Failure msg -> Error msg diff --git a/src/directories.mli b/src/directories.mli new file mode 100644 index 0000000..623d6f1 --- /dev/null +++ b/src/directories.mli @@ -0,0 +1,11 @@ +type t = { + components: string; + validators: string; + migrators: string; + component_definitions: string; + interface_definitions: string; +} + +val make : Vyconf_config.t -> t + +val test : t -> (unit, string) result -- cgit v1.2.3