...
1-- in.cue --
2#DeploymentManifest: #Manifest & {ref: kind: "deployment"}
3
4#Manifest: {
5 ref: #ManifestRef
6 description: #KumoriKinds[ref.kind]
7}
8
9#ManifestRef: kind: #KindsNames
10
11#KindsNames: "service" | "deployment"
12
13#KumoriKinds: deployment: #Deployment
14#KumoriKinds: [string]: {...}
15
16#DoDeploy: {
17 _params: manifest: #DeploymentManifest
18 deployment: {
19 description: {
20 let dep = _params.manifest.description
21 service: (#Configure & {
22 _params: hsize: dep.hsize
23 }).service
24 }
25 }
26}
27
28#Configure: {
29 $p=_params: {
30 hsize: [string]: #RoleSize
31 }
32 service: {
33 description: {
34 let configed = (#RelabelService & {
35 _params: {
36 hsize: $p.hsize
37 }
38 role: "admin"
39 }).out
40
41 role: configed.role
42 }
43 }
44}
45
46#RelabelService: {
47 $p=_params: {
48 hsize: #RoleSize
49 }
50
51 out: {
52 labstr: $p.label
53 }
54}
55
56#RoleSize: {
57 $_instances: >=0 | *1
58}
59
60#Deployment: {
61 service: #ServiceManifest
62 hsize: [service.description.#roles]: #RoleSize
63}
64
65#ServiceManifest: #Manifest & {ref: kind: "service"}
66-- out/eval/stats --
67Leaks: 16
68Freed: 117
69Reused: 108
70Allocs: 25
71Retain: 123
72
73Unifications: 107
74Conjuncts: 295
75Disjuncts: 240
76-- out/eval --
77Errors:
78#Configure.service.description.role: undefined field: role:
79 ./in.cue:40:19
80#DoDeploy.deployment.description.service.description.role: undefined field: role:
81 ./in.cue:40:19
82#RelabelService.out.labstr: undefined field: label:
83 ./in.cue:51:14
84
85Result:
86(_|_){
87 // [eval]
88 #DeploymentManifest: (#struct){
89 ref: (#struct){
90 kind: (string){ "deployment" }
91 }
92 description: (#struct){
93 service: (#struct){
94 ref: (#struct){
95 kind: (string){ "service" }
96 }
97 description: (_|_){
98 // [incomplete] #DeploymentManifest.description.service.description: undefined field: service:
99 // ./in.cue:5:28
100 }
101 }
102 hsize: (#struct){
103 }
104 }
105 }
106 #Manifest: (#struct){
107 ref: (#struct){
108 kind: (string){ |((string){ "service" }, (string){ "deployment" }) }
109 }
110 description: (_|_){
111 // [incomplete] #Manifest.description: unresolved disjunction "service" | "deployment" (type string):
112 // ./in.cue:5:15
113 }
114 }
115 #ManifestRef: (#struct){
116 kind: (string){ |((string){ "service" }, (string){ "deployment" }) }
117 }
118 #KindsNames: (string){ |((string){ "service" }, (string){ "deployment" }) }
119 #KumoriKinds: (#struct){
120 deployment: (#struct){
121 service: (#struct){
122 ref: (#struct){
123 kind: (string){ "service" }
124 }
125 description: (_|_){
126 // [incomplete] #KumoriKinds.deployment.service.description: undefined field: service:
127 // ./in.cue:5:28
128 }
129 }
130 hsize: (#struct){
131 }
132 }
133 }
134 #DoDeploy: (_|_){
135 // [eval]
136 _params: (#struct){
137 manifest: (#struct){
138 ref: (#struct){
139 kind: (string){ "deployment" }
140 }
141 description: (#struct){
142 service: (#struct){
143 ref: (#struct){
144 kind: (string){ "service" }
145 }
146 description: (_|_){
147 // [incomplete] #DoDeploy._params.manifest.description.service.description: undefined field: service:
148 // ./in.cue:5:28
149 }
150 }
151 hsize: (#struct){
152 }
153 }
154 }
155 }
156 deployment: (_|_){
157 // [eval]
158 description: (_|_){
159 // [eval]
160 let dep#1 = (#struct){
161 service: (#struct){
162 ref: (#struct){
163 kind: (string){ "service" }
164 }
165 description: (_|_){
166 // [incomplete] #DoDeploy.deployment.description.dep.service.description: undefined field: service:
167 // ./in.cue:5:28
168 }
169 }
170 hsize: (#struct){
171 }
172 }
173 service: (_|_){
174 // [eval]
175 description: (_|_){
176 // [eval]
177 let configed#2 = (_|_){
178 // [eval]
179 labstr: (_|_){
180 // [eval] #DoDeploy.deployment.description.service.description.configed.labstr: undefined field: label:
181 // ./in.cue:51:14
182 }
183 }
184 role: (_|_){
185 // [eval] #DoDeploy.deployment.description.service.description.role: undefined field: role:
186 // ./in.cue:40:19
187 }
188 }
189 }
190 }
191 }
192 }
193 #Configure: (_|_){
194 // [eval]
195 _params: (#struct){
196 hsize: (#struct){
197 }
198 }
199 service: (_|_){
200 // [eval]
201 description: (_|_){
202 // [eval]
203 let configed#2 = (_|_){
204 // [eval]
205 labstr: (_|_){
206 // [eval] #Configure.service.description.configed.labstr: undefined field: label:
207 // ./in.cue:51:14
208 }
209 }
210 role: (_|_){
211 // [eval] #Configure.service.description.role: undefined field: role:
212 // ./in.cue:40:19
213 }
214 }
215 }
216 }
217 #RelabelService: (_|_){
218 // [eval]
219 _params: (#struct){
220 hsize: (#struct){
221 $_instances: (number){ |(*(int){ 1 }, (number){ >=0 }) }
222 }
223 }
224 out: (_|_){
225 // [eval]
226 labstr: (_|_){
227 // [eval] #RelabelService.out.labstr: undefined field: label:
228 // ./in.cue:51:14
229 }
230 }
231 }
232 #RoleSize: (#struct){
233 $_instances: (number){ |(*(int){ 1 }, (number){ >=0 }) }
234 }
235 #Deployment: (#struct){
236 service: (#struct){
237 ref: (#struct){
238 kind: (string){ "service" }
239 }
240 description: (_|_){
241 // [incomplete] #Deployment.service.description: undefined field: service:
242 // ./in.cue:5:28
243 }
244 }
245 hsize: (#struct){
246 }
247 }
248 #ServiceManifest: (#struct){
249 ref: (#struct){
250 kind: (string){ "service" }
251 }
252 description: (_|_){
253 // [incomplete] #ServiceManifest.description: undefined field: service:
254 // ./in.cue:5:28
255 }
256 }
257}
258-- out/compile --
259--- in.cue
260{
261 #DeploymentManifest: (〈0;#Manifest〉 & {
262 ref: {
263 kind: "deployment"
264 }
265 })
266 #Manifest: {
267 ref: 〈1;#ManifestRef〉
268 description: 〈1;#KumoriKinds〉[〈0;ref〉.kind]
269 }
270 #ManifestRef: {
271 kind: 〈1;#KindsNames〉
272 }
273 #KindsNames: ("service"|"deployment")
274 #KumoriKinds: {
275 deployment: 〈1;#Deployment〉
276 }
277 #KumoriKinds: {
278 [string]: {
279 ...
280 }
281 }
282 #DoDeploy: {
283 _params: {
284 manifest: 〈2;#DeploymentManifest〉
285 }
286 deployment: {
287 description: {
288 let dep#1 = 〈2;_params〉.manifest.description
289 service: (〈3;#Configure〉 & {
290 _params: {
291 hsize: 〈2;let dep#1〉.hsize
292 }
293 }).service
294 }
295 }
296 }
297 #Configure: {
298 _params: {
299 hsize: {
300 [string]: 〈3;#RoleSize〉
301 }
302 }
303 service: {
304 description: {
305 let configed#2 = (〈3;#RelabelService〉 & {
306 _params: {
307 hsize: 〈4;_params〉.hsize
308 }
309 role: "admin"
310 }).out
311 role: 〈0;let configed#2〉.role
312 }
313 }
314 }
315 #RelabelService: {
316 _params: {
317 hsize: 〈2;#RoleSize〉
318 }
319 out: {
320 labstr: 〈1;_params〉.label
321 }
322 }
323 #RoleSize: {
324 $_instances: (>=0|*1)
325 }
326 #Deployment: {
327 service: 〈1;#ServiceManifest〉
328 hsize: {
329 [〈1;service〉.description.#roles]: 〈2;#RoleSize〉
330 }
331 }
332 #ServiceManifest: (〈0;#Manifest〉 & {
333 ref: {
334 kind: "service"
335 }
336 })
337}
View as plain text