encoding/openapi: add support for deprecated field from protobuf
protos may be marked as `deprecated=true` in their definitions,
these fields can be mapped to openapi field `deprecated`.
Change-Id: I41204b1cd7e32e2822145622c6dfeab5d8184d65
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/2900
Reviewed-by: Marcel van Lohuizen <mpvl@golang.org>
diff --git a/encoding/openapi/build.go b/encoding/openapi/build.go
index 6a32f5d..8d690d1 100644
--- a/encoding/openapi/build.go
+++ b/encoding/openapi/build.go
@@ -212,6 +212,7 @@
b.setValueType(v)
b.format = extractFormat(v)
+ b.deprecated = getDeprecated(v)
if b.core == nil || len(b.core.values) > 1 {
isRef := b.value(v, nil)
@@ -952,6 +953,7 @@
singleFields *oaSchema
current *oaSchema
allOf []*oaSchema
+ deprecated bool
// Building structural schema
core *builder
@@ -1072,6 +1074,9 @@
b.singleFields.kvs = append(b.singleFields.kvs, t.kvs...)
t = b.singleFields
}
+ if b.deprecated {
+ t.Set("deprecated", true)
+ }
setType(t, b)
sortSchema(t)
return t
diff --git a/encoding/openapi/testdata/simple-filter.json b/encoding/openapi/testdata/simple-filter.json
index 0acf4a4..76b3d29 100644
--- a/encoding/openapi/testdata/simple-filter.json
+++ b/encoding/openapi/testdata/simple-filter.json
@@ -12,7 +12,8 @@
"mediumNum",
"smallNum",
"float",
- "double"
+ "double",
+ "deprecatedField"
],
"properties": {
"mediumNum": {
@@ -29,6 +30,11 @@
"double": {
"type": "number",
"format": "double"
+ },
+ "deprecatedField": {
+ "type": "string",
+ "format": "string",
+ "deprecated": true
}
}
}
diff --git a/encoding/openapi/testdata/simple.cue b/encoding/openapi/testdata/simple.cue
index 0504d4c..003be57 100644
--- a/encoding/openapi/testdata/simple.cue
+++ b/encoding/openapi/testdata/simple.cue
@@ -4,4 +4,6 @@
float: float32
double: float64
+
+ deprecatedField: string @protobuf(5,deprecated)
}
diff --git a/encoding/openapi/testdata/simple.json b/encoding/openapi/testdata/simple.json
index 8ccb0f3..c2e88d3 100644
--- a/encoding/openapi/testdata/simple.json
+++ b/encoding/openapi/testdata/simple.json
@@ -12,7 +12,8 @@
"mediumNum",
"smallNum",
"float",
- "double"
+ "double",
+ "deprecatedField"
],
"properties": {
"mediumNum": {
@@ -31,6 +32,11 @@
"double": {
"type": "number",
"format": "double"
+ },
+ "deprecatedField": {
+ "type": "string",
+ "format": "string",
+ "deprecated": true
}
}
}
diff --git a/encoding/openapi/types.go b/encoding/openapi/types.go
index d46fd2b..209dda6 100644
--- a/encoding/openapi/types.go
+++ b/encoding/openapi/types.go
@@ -62,6 +62,13 @@
return cueToOpenAPI[s]
}
+func getDeprecated(v cue.Value) bool {
+ // only looking at protobuf attribute for now.
+ a := v.Attribute("protobuf")
+ r, _ := a.Flag(1, "deprecated")
+ return r
+}
+
func simplify(b *builder, t *OrderedMap) {
if b.format == "" {
return