diff options
Diffstat (limited to 'src/sdp/meta/read_config_files.d')
-rw-r--r-- | src/sdp/meta/read_config_files.d | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/src/sdp/meta/read_config_files.d b/src/sdp/meta/read_config_files.d new file mode 100644 index 0000000..2410316 --- /dev/null +++ b/src/sdp/meta/read_config_files.d @@ -0,0 +1,80 @@ +/++ + read configuration files<BR> + - read config files<BR> + meta_config_files.d ++/ +module sdp.meta.read_config_files; +template configIn() { + import + sdp.meta, + std.file, + std.path; + final string configIn(C,E)(C conf_sdl, E env) { + string dot_pwd = chainPath(to!string(env["pwd"]), ".sisu").array; + string underscore_pwd = chainPath(to!string(env["pwd"]), "_sisu").array; + string dot_home = chainPath(to!string(env["home"]), ".sisu").array; + string[] possible_config_path_locations = [ + dot_pwd, + underscore_pwd, + dot_home, + "/etc/sisu" + ]; + string config_file_str; + foreach(pth; possible_config_path_locations) { + auto conf_file = format( + "%s/%s", + pth, + conf_sdl, + ); + try { + if (exists(conf_file)) { + debug(configfile) { + writeln(conf_file); + } + config_file_str = conf_file.readText; + break; + } + } + catch (ErrnoException ex) { + } + catch (FileException ex) { + } + } + return config_file_str; + } +} +/+ + ++/ +template ConfigSDLang() { + import sdlang; + import + sdp.meta, + std.file, + std.path; + auto ConfigSDLang(string configuration, string conf_sdl_filename) { + Tag sdl_root_conf; + try { + sdl_root_conf = parseSource(configuration); + } + catch(ParseException e) { + stderr.writeln("SDLang problem with content for ", conf_sdl_filename); + stderr.writeln(e.msg); + } + return sdl_root_conf; + } +} +/+ ++/ +template configRead() { + import + sdp.meta, + std.file, + std.path; + + final auto configRead(C,E)(C conf_sdl, E env) { + auto configuration = configIn!()(conf_sdl, env); + auto sdl_root = ConfigSDLang!()(configuration, conf_sdl); + return sdl_root; + } +} |