@@ -28,6 +28,7 @@ import (
28
28
"cuelang.org/go/cue/ast"
29
29
"cuelang.org/go/cue/errors"
30
30
"cuelang.org/go/cue/token"
31
+ cuejson "cuelang.org/go/encoding/json"
31
32
"cuelang.org/go/internal"
32
33
"cuelang.org/go/internal/core/adt"
33
34
)
@@ -740,6 +741,26 @@ func (b *builder) object(v cue.Value) {
740
741
b .setSingle ("properties" , (* ast .StructLit )(properties ), false )
741
742
}
742
743
744
+ attr := v .Attribute ("openapi" )
745
+ for i := 0 ; i < attr .NumArgs (); i ++ {
746
+ key , value := attr .Arg (i )
747
+ if key != "extension" {
748
+ continue
749
+ }
750
+
751
+ parts := strings .SplitN (value , ":" , 2 )
752
+ if len (parts ) != 2 {
753
+ b .failf (v , "invalid openapi extension attribute %q: %v must be in the format key:value" , key , value )
754
+ } else {
755
+ extension , err := cuejson .Extract (key , []byte (parts [1 ]))
756
+ if err != nil {
757
+ b .failf (v , "invalid openapi extension attribute %q: %v" , key , err )
758
+ }
759
+
760
+ b .setSingle (parts [0 ], extension , true )
761
+ }
762
+ }
763
+
743
764
if t := v .LookupPath (cue .MakePath (cue .AnyString )); t .Exists () &&
744
765
(b .core == nil || b .core .items == nil ) && b .checkCycle (t ) {
745
766
schema := b .schema (nil , cue .AnyString , t )
0 commit comments