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