1 module glued.scannable; 2 3 import std.string; 4 import std.traits; 5 6 7 struct Scannable { 8 string root; 9 string qualifier = ""; 10 string testQualifier = "test"; 11 12 @property 13 string prefix(){ 14 return _prefix(qualifier); 15 } 16 17 @property 18 string testPrefix(){ 19 return _prefix(testQualifier); 20 } 21 22 private static string _prefix(string q){ 23 return q.length ? "_"~q : ""; 24 } 25 } 26 27 Scannable at(string root, string qualifier="", string testQualifier="test"){ 28 return Scannable(root, qualifier, testQualifier); 29 } 30 31 Scannable at(Scannable s){ 32 return s; 33 } 34 35 Scannable with_(Scannable s, string r="",string q="", string tq=""){ 36 with (s) { 37 if (r) 38 root = r; 39 if (q) 40 qualifier = q; 41 if (tq) 42 testQualifier = tq; 43 } 44 return s; 45 } 46 47 Scannable fromRoot(string moduleName, string qualifier="", string testQualifier="test"){ 48 string[] parts = moduleName.split("."); 49 assert(parts.length); 50 //todo add reading qualifiers from some source file 51 return Scannable(parts[0], qualifier, testQualifier); 52 } 53 54 enum fromRoot(T, string qualifier="", string testQualifier="test") = fromRoot(moduleName!T, qualifier, testQualifier); 55 56 enum fromRoot(string qualifier="", string testQualifier="test", string foo=__FUNCTION__) = from(foo, qualifier, testQualifier); 57