encoding/openapi: convert CUE to openapi schemas
Change-Id: Iea3369d702f7cb91e49e61153518c04d6845f03c
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/2120
Reviewed-by: Marcel van Lohuizen <mpvl@google.com>
diff --git a/encoding/openapi/testdata/openapi.json b/encoding/openapi/testdata/openapi.json
new file mode 100644
index 0000000..c6cc8cb
--- /dev/null
+++ b/encoding/openapi/testdata/openapi.json
@@ -0,0 +1,287 @@
+{
+ "openapi": "3.0.0",
+ "components": {
+ "schema": {
+ "MyMessage": {
+ "description": "MyMessage is my message.",
+ "allOf": [
+ {
+ "type": "object",
+ "required": [
+ "foo",
+ "bar"
+ ],
+ "properties": {
+ "bar": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": []
+ },
+ "foo": {
+ "allOf": [
+ {
+ "$ref": "#/components/schema/Int32"
+ },
+ {
+ "type": "number",
+ "exclusiveMinimum": 10,
+ "exclusiveMaximum": 1000
+ }
+ ]
+ },
+ "port": {
+ "$ref": "#/components/schema/Port",
+ "type": "object"
+ }
+ }
+ },
+ {
+ "type": "object",
+ "anyOf": [
+ {
+ "type": "object",
+ "required": [
+ "a"
+ ],
+ "properties": {
+ "a": {
+ "description": "Field a.",
+ "type": "integer",
+ "enum": [
+ 1
+ ]
+ }
+ }
+ },
+ {
+ "type": "object",
+ "required": [
+ "b"
+ ],
+ "properties": {
+ "b": {
+ "type": "string"
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "Port": {
+ "type": "object",
+ "required": [
+ "port",
+ "obj"
+ ],
+ "properties": {
+ "obj": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ },
+ "default": []
+ },
+ "port": {
+ "type": "integer"
+ }
+ }
+ },
+ "Int32": {
+ "type": "integer",
+ "minimum": -2147483648,
+ "maximum": 2147483647
+ },
+ "YourMessage": {
+ "anyOf": [
+ {
+ "type": "object",
+ "required": [
+ "b"
+ ],
+ "properties": {
+ "a": {
+ "type": "string"
+ },
+ "b": {
+ "type": "string"
+ }
+ }
+ },
+ {
+ "type": "object",
+ "required": [
+ "b"
+ ],
+ "properties": {
+ "a": {
+ "type": "string"
+ },
+ "b": {
+ "type": "number"
+ }
+ }
+ }
+ ]
+ },
+ "YourMessage2": {
+ "allOf": [
+ {
+ "anyOf": [
+ {
+ "type": "object",
+ "required": [
+ "a"
+ ],
+ "properties": {
+ "a": {
+ "type": "number"
+ }
+ }
+ },
+ {
+ "type": "object",
+ "required": [
+ "b"
+ ],
+ "properties": {
+ "b": {
+ "type": "number"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "anyOf": [
+ {
+ "type": "object",
+ "required": [
+ "c"
+ ],
+ "properties": {
+ "c": {
+ "type": "number"
+ }
+ }
+ },
+ {
+ "type": "object",
+ "required": [
+ "d"
+ ],
+ "properties": {
+ "d": {
+ "type": "number"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "anyOf": [
+ {
+ "type": "object",
+ "required": [
+ "e"
+ ],
+ "properties": {
+ "e": {
+ "type": "number"
+ }
+ }
+ },
+ {
+ "type": "object",
+ "required": [
+ "f"
+ ],
+ "properties": {
+ "f": {
+ "type": "number"
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "Msg2": {
+ "anyOf": [
+ {
+ "type": "object",
+ "required": [
+ "b"
+ ],
+ "properties": {
+ "b": {
+ "type": "number"
+ }
+ }
+ },
+ {
+ "type": "object",
+ "required": [
+ "a"
+ ],
+ "properties": {
+ "a": {
+ "type": "string"
+ }
+ }
+ }
+ ]
+ },
+ "Enum": {
+ "enum": [
+ "foo",
+ "bar",
+ "baz"
+ ]
+ },
+ "List": {
+ "type": "array",
+ "items": {
+ "type": "number"
+ },
+ "default": [
+ 1,
+ 2,
+ 3
+ ]
+ },
+ "DefaultStruct": {
+ "allOf": [
+ {
+ "anyOf": [
+ {
+ "$ref": "#/components/schema/Port"
+ },
+ {
+ "type": "object",
+ "required": [
+ "port"
+ ],
+ "properties": {
+ "port": {
+ "type": "integer",
+ "enum": [
+ 1
+ ]
+ }
+ }
+ }
+ ]
+ },
+ {
+ "default": {
+ "port": 1
+ }
+ }
+ ]
+ }
+ }
+ }
+}
\ No newline at end of file