1 /**
2 * Copyright © DiamondMVC 2019
3 * License: MIT (https://github.com/DiamondMVC/Diamond/blob/master/LICENSE)
4 * Author: Jacob Jensen (bausshf)
5 */
6 module diamond.views.viewroute;
7
8 import diamond.core.apptype;
9
10 static if (isWebServer || !isWeb)
11 {
12 /// Mixin template for generating the getView() function.
13 mixin template GenerateGetView()
14 {
15 import diamond.core.apptype;
16 import std..string : format;
17 import diamondapp;
18
19 static if (isWebServer)
20 {
21 import diamond.http;
22
23 /**
24 * Generates the getView() function.
25 * Returns:
26 * The resulting string of the getView() function to use in a mixin.
27 */
28 string generateGetView()
29 {
30 string getViewMixin = "
31 View getView(HttpClient client, Route route, bool checkRoute, bool keepRoute = false)
32 {
33 auto viewName =
34 routableViews.get(route.name, checkRoute ? null : route.name);
35
36 if (!viewName)
37 {
38 import diamond.http.routing;
39 viewName = getViewNameFromRoute(route.name);
40 }
41
42 if (!viewName)
43 {
44 return null;
45 }
46
47 switch (viewName)
48 {
49 ";
50
51 mixin LoadViewData!true;
52
53 foreach (viewName; getViewData().keys)
54 {
55 getViewMixin ~= format(q{
56 case "%s":
57 {
58 if (!keepRoute)
59 {
60 client.route = route;
61 }
62
63 return new view_%s(client, "%s");
64 }
65 }, viewName, viewName, viewName);
66 }
67
68 getViewMixin ~= "
69 default: return null; // 404 ...
70 }
71 }
72 ";
73
74 return getViewMixin;
75 }
76 }
77 else
78 {
79 /**
80 * Generates the getView() function.
81 * Returns:
82 * The resulting string of the getView() function to use in a mixin.
83 */
84 string generateGetView()
85 {
86 string getViewMixin = "
87 View getView(string viewName)
88 {
89 if (!viewName || !viewName.length)
90 {
91 return null;
92 }
93
94 switch (viewName)
95 {
96 ";
97
98 mixin LoadViewData!true;
99
100 foreach (viewName; getViewData().keys)
101 {
102 getViewMixin ~= format(q{
103 case "%s":
104 {
105 return new view_%s("%s");
106 }
107 }, viewName, viewName, viewName);
108 }
109
110 getViewMixin ~= "
111 default: return null; // 404 ...
112 }
113 }
114 ";
115
116 return getViewMixin;
117 }
118 }
119
120 mixin(generateGetView);
121 }
122 }