1 /** 2 * Модуль содержит методы для работы со совйствами приложения 3 * 4 * Copyright: (c) 2015-2020, Milofon Project. 5 * License: Subject to the terms of the BSD 3-Clause License, as written in the included LICENSE.md file. 6 * Author: <m.galanin@milofon.pro> Maksim Galanin 7 * Date: 2020-04-11 8 */ 9 10 module dango.system.properties; 11 12 private 13 { 14 import uniconf.core : UniConf, UniConfException; 15 } 16 17 18 /** 19 * Извление конфигурации 20 * 21 * Params: 22 * config = Объект содержащий необходимы ключ конфигурации 23 * msg = Сообщение об ошибке 24 * 25 * Returns: name 26 */ 27 T getOrEnforce(T)(UniConf config, string key, string msg) @safe 28 { 29 auto val = config.opt!T(key); 30 if (val.empty) 31 throw new UniConfException(msg); 32 return val.front; 33 } 34 35 @("Should work getOrEnforce method") 36 @safe unittest 37 { 38 import std.exception : assertThrown; 39 auto conf = UniConf(["__name": UniConf("method")]); 40 assert (conf.getOrEnforce!string("__name", "not found") == "method"); 41 conf = UniConf(1); 42 assertThrown!UniConfException(conf.getOrEnforce!int("name", "not found")); 43 } 44 45 /** 46 * Извление имени из объекта конфигурации 47 * 48 * Params: 49 * config = Объект содержащий необходимы ключ конфигурации 50 * msg = Сообщение об ошибке 51 * 52 * Returns: name 53 */ 54 string getNameOrEnforce(UniConf config, string msg) @safe 55 { 56 if (config.canMapping) 57 return config.getOrEnforce!string("__name", msg); 58 else 59 { 60 auto val = config.opt!string; 61 if (val.empty) 62 throw new UniConfException(msg); 63 return val.front; 64 } 65 } 66 67 @("Should work getNameOrEnforce method") 68 @safe unittest 69 { 70 import std.exception : assertThrown; 71 UniConf conf = UniConf("method"); 72 assert (conf.getNameOrEnforce("not found") == "method"); 73 conf = UniConf(["__name": UniConf("method")]); 74 assert (conf.getNameOrEnforce("not found") == "method"); 75 conf = UniConf(1); 76 assertThrown!UniConfException(conf.getNameOrEnforce("not found")); 77 } 78 79 80 /** 81 * Преобразует UniConf в массив 82 * 83 * Params: 84 * config = Объект конфигурации 85 */ 86 UniConf[] toSequence(UniConf config) @safe 87 { 88 if (config.canSequence) 89 return config.getSequence(); 90 else 91 return [config]; 92 } 93 94 @("Should work toSequence method") 95 @safe unittest 96 { 97 UniConf conf = UniConf(1); 98 assert (conf.toSequence == [UniConf(1)]); 99 conf = UniConf([UniConf(1), UniConf(2)]); 100 assert (conf.toSequence == [UniConf(1), UniConf(2)]); 101 } 102