1 module reggae.types;
2 
3 import reggae.rules: exeExt;
4 import std.path: baseName, stripExtension, defaultExtension;
5 
6 //Wrapper structs to ensure type-safety and readability
7 
8 struct App {
9     string srcFileName;
10     string exeFileName;
11 
12     this(string srcFileName) @safe pure nothrow {
13         immutable stripped = srcFileName.baseName.stripExtension;
14         immutable exeFileName =  exeExt == "" ? stripped : stripped.defaultExtension(exeExt);
15 
16         this(srcFileName, exeFileName);
17     }
18 
19     this(string srcFileName, string exeFileName) @safe pure nothrow {
20         this.srcFileName = srcFileName;
21         this.exeFileName = exeFileName;
22     }
23 }
24 
25 
26 struct Flags {
27     string flags;
28 }
29 
30 struct ImportPaths {
31     string[] paths;
32 }
33 
34 struct StringImportPaths {
35     string[] paths;
36 }
37 
38 struct SrcDirs {
39     string[] paths;
40 }
41 
42 struct SrcFiles {
43     string[] paths;
44 }
45 
46 struct ExcludeFiles {
47     string[] paths;
48 }
49 
50 struct ExeName {
51     string name;
52 }
53 
54 struct Configuration {
55     string config = "default";
56 }