# CUE to OpenAPI ```go package main import ( "bytes" "encoding/json" "fmt" "cuelang.org/go/cue" "cuelang.org/go/encoding/openapi" ) func genOpenAPI(inst *cue.Instance) ([]byte, error) { b, err := openapi.Gen(inst, nil) if err != nil { return nil, err } var out = &bytes.Buffer{} _ = json.Indent(out, b, "", " ") return out.Bytes(), nil } func main() { r := &cue.Runtime{} inst, err := r.Compile("./app.cue", nil) if err != nil { panic(err) } b, err := genOpenAPI(inst) if err != nil { panic(err) } fmt.Println(string(b)) } ``` CUE file: ```yaml output: { apiVersion: "apps/v1" kind: "Deployment" spec: { selector: matchLabels: { "app.oam.dev/component": context.name } template: { metadata: labels: { "app.oam.dev/component": context.name } spec: { containers: [{ name: context.name image: #parameter.image if #parameter["cmd"] != _|_ { command: #parameter.cmd } }] } } selector: matchLabels: "app.oam.dev/component": context.name } } context: { name: string } #parameter: { // +usage=Which image would you like to use for your service // +short=i image: string // +usage=Commands to run in the container cmd?: [...string] } ``` Output: ```json { "openapi": "3.0.0", "info": { "title": "Generated by cue.", "version": "no version" }, "paths": {}, "components": { "schemas": { "parameter": { "type": "object", "required": [ "image" ], "properties": { "cmd": { "description": "+usage=Commands to run in the container", "type": "array", "items": { "type": "string" } }, "image": { "description": "+usage=Which image would you like to use for your service\n+short=i", "type": "string" } } } } } } ```