| -- in.cue -- |
| #DeploymentManifest: #Manifest & {ref: kind: "deployment"} |
| |
| #Manifest: { |
| ref: #ManifestRef |
| description: #KumoriKinds[ref.kind] |
| } |
| |
| #ManifestRef: kind: #KindsNames |
| |
| #KindsNames: "service" | "deployment" |
| |
| #KumoriKinds: deployment: #Deployment |
| #KumoriKinds: [string]: {...} |
| |
| #DoDeploy: { |
| _params: manifest: #DeploymentManifest |
| deployment: { |
| description: { |
| let dep = _params.manifest.description |
| service: (#Configure & { |
| _params: hsize: dep.hsize |
| }).service |
| } |
| } |
| } |
| |
| #Configure: { |
| $p=_params: { |
| hsize: [string]: #RoleSize |
| } |
| service: { |
| description: { |
| let configed = (#RelabelService & { |
| _params: { |
| hsize: $p.hsize |
| } |
| }).out |
| |
| role: configed.role |
| } |
| } |
| } |
| |
| #RelabelService: { |
| $p=_params: { |
| hsize: #RoleSize |
| } |
| |
| out: { |
| labstr: $p.label |
| } |
| } |
| |
| #RoleSize: { |
| $_instances: >=0 | *1 |
| } |
| |
| #Deployment: { |
| service: #ServiceManifest |
| hsize: [service.description.#roles]: #RoleSize |
| } |
| |
| #ServiceManifest: #Manifest & {ref: kind: "service"} |
| -- out/eval -- |
| Errors: |
| _params.hsize.$_instances: conflicting values 1 and {$_instances:(>=0|*1)} (mismatched types int and struct): |
| ./in.cue:29:20 |
| ./in.cue:35:13 |
| ./in.cue:54:12 |
| ./in.cue:55:22 |
| _params.hsize.$_instances: conflicting values >=0 and {$_instances:(>=0|*1)} (mismatched types number and struct): |
| ./in.cue:29:20 |
| ./in.cue:35:13 |
| ./in.cue:54:12 |
| ./in.cue:55:15 |
| #DoDeploy._params.manifest.description.service.description: undefined field: service: |
| ./in.cue:5:28 |
| _params.hsize.$_instances: 2 errors in empty disjunction:: |
| ./in.cue:33:20 |
| #RelabelService.out.labstr: undefined field: label: |
| ./in.cue:50:14 |
| |
| Result: |
| (_|_){ |
| // [eval] |
| #DeploymentManifest: (#struct){ |
| ref: (#struct){ |
| kind: (string){ "deployment" } |
| } |
| description: (#struct){ |
| service: (#struct){ |
| ref: (#struct){ |
| kind: (string){ "service" } |
| } |
| description: (_|_){ |
| // [incomplete] #DeploymentManifest.description.service.description: undefined field: service: |
| // ./in.cue:5:28 |
| } |
| } |
| hsize: (#struct){ |
| } |
| } |
| } |
| #Manifest: (#struct){ |
| ref: (#struct){ |
| kind: (string){ |((string){ "service" }, (string){ "deployment" }) } |
| } |
| description: (_|_){ |
| // [incomplete] #Manifest.description: unresolved disjunction "service" | "deployment" (type string): |
| // ./in.cue:5:15 |
| } |
| } |
| #ManifestRef: (#struct){ |
| kind: (string){ |((string){ "service" }, (string){ "deployment" }) } |
| } |
| #KindsNames: (string){ |((string){ "service" }, (string){ "deployment" }) } |
| #KumoriKinds: (#struct){ |
| deployment: (#struct){ |
| service: (#struct){ |
| ref: (#struct){ |
| kind: (string){ "service" } |
| } |
| description: (_|_){ |
| // [incomplete] #KumoriKinds.deployment.service.description: undefined field: service: |
| // ./in.cue:5:28 |
| } |
| } |
| hsize: (#struct){ |
| } |
| } |
| } |
| #DoDeploy: (_|_){ |
| // [eval] |
| _params: (#struct){ |
| manifest: (#struct){ |
| ref: (#struct){ |
| kind: (string){ "deployment" } |
| } |
| description: (#struct){ |
| service: (#struct){ |
| ref: (#struct){ |
| kind: (string){ "service" } |
| } |
| description: (_|_){ |
| // [eval] #DoDeploy._params.manifest.description.service.description: undefined field: service: |
| // ./in.cue:5:28 |
| } |
| } |
| hsize: (#struct){ |
| } |
| } |
| } |
| } |
| deployment: (_|_){ |
| // [eval] |
| description: (_|_){ |
| // [eval] |
| service: (_|_){ |
| // [eval] #DoDeploy._params.manifest.description.service.description: undefined field: service: |
| // ./in.cue:5:28 |
| } |
| } |
| } |
| } |
| #Configure: (_|_){ |
| // [eval] |
| _params: (#struct){ |
| hsize: (#struct){ |
| } |
| } |
| service: (_|_){ |
| // [eval] |
| description: (_|_){ |
| // [eval] |
| role: (_|_){ |
| // [eval] _params.hsize.$_instances: conflicting values 1 and {$_instances:(>=0|*1)} (mismatched types int and struct): |
| // ./in.cue:29:20 |
| // ./in.cue:35:13 |
| // ./in.cue:54:12 |
| // ./in.cue:55:22 |
| // _params.hsize.$_instances: conflicting values >=0 and {$_instances:(>=0|*1)} (mismatched types number and struct): |
| // ./in.cue:29:20 |
| // ./in.cue:35:13 |
| // ./in.cue:54:12 |
| // ./in.cue:55:15 |
| // _params.hsize.$_instances: 2 errors in empty disjunction:: |
| // ./in.cue:33:20 |
| } |
| } |
| } |
| } |
| #RelabelService: (_|_){ |
| // [eval] |
| _params: (#struct){ |
| hsize: (#struct){ |
| $_instances: (number){ |(*(int){ 1 }, (number){ >=0 }) } |
| } |
| } |
| out: (_|_){ |
| // [eval] |
| labstr: (_|_){ |
| // [eval] #RelabelService.out.labstr: undefined field: label: |
| // ./in.cue:50:14 |
| } |
| } |
| } |
| #RoleSize: (#struct){ |
| $_instances: (number){ |(*(int){ 1 }, (number){ >=0 }) } |
| } |
| #Deployment: (#struct){ |
| service: (#struct){ |
| ref: (#struct){ |
| kind: (string){ "service" } |
| } |
| description: (_|_){ |
| // [incomplete] #Deployment.service.description: undefined field: service: |
| // ./in.cue:5:28 |
| } |
| } |
| hsize: (#struct){ |
| } |
| } |
| #ServiceManifest: (#struct){ |
| ref: (#struct){ |
| kind: (string){ "service" } |
| } |
| description: (_|_){ |
| // [incomplete] #ServiceManifest.description: undefined field: service: |
| // ./in.cue:5:28 |
| } |
| } |
| } |
| -- out/compile -- |
| --- in.cue |
| { |
| #DeploymentManifest: (〈0;#Manifest〉 & { |
| ref: { |
| kind: "deployment" |
| } |
| }) |
| #Manifest: { |
| ref: 〈1;#ManifestRef〉 |
| description: 〈1;#KumoriKinds〉[〈0;ref〉.kind] |
| } |
| #ManifestRef: { |
| kind: 〈1;#KindsNames〉 |
| } |
| #KindsNames: ("service"|"deployment") |
| #KumoriKinds: { |
| deployment: 〈1;#Deployment〉 |
| } |
| #KumoriKinds: { |
| [string]: { |
| ... |
| } |
| } |
| #DoDeploy: { |
| _params: { |
| manifest: 〈2;#DeploymentManifest〉 |
| } |
| deployment: { |
| description: { |
| service: (〈3;#Configure〉 & { |
| _params: { |
| hsize: 〈2;let dep〉.hsize |
| } |
| }).service |
| } |
| } |
| } |
| #Configure: { |
| _params: { |
| hsize: { |
| [string]: 〈3;#RoleSize〉 |
| } |
| } |
| service: { |
| description: { |
| role: 〈0;let configed〉.role |
| } |
| } |
| } |
| #RelabelService: { |
| _params: { |
| hsize: 〈2;#RoleSize〉 |
| } |
| out: { |
| labstr: 〈1;_params〉.label |
| } |
| } |
| #RoleSize: { |
| $_instances: (>=0|*1) |
| } |
| #Deployment: { |
| service: 〈1;#ServiceManifest〉 |
| hsize: { |
| [〈1;service〉.description.#roles]: 〈2;#RoleSize〉 |
| } |
| } |
| #ServiceManifest: (〈0;#Manifest〉 & { |
| ref: { |
| kind: "service" |
| } |
| }) |
| } |