cmd/cue/cmd: extract cue constraints in tags in get go
Change-Id: I9bd0a2307a364c0ab9c8d9b3e8f69b8f162c29f6
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/6341
Reviewed-by: Marcel van Lohuizen <mpvl@golang.org>
diff --git a/cmd/cue/cmd/get_go.go b/cmd/cue/cmd/get_go.go
index d085723..9cefa8a 100644
--- a/cmd/cue/cmd/get_go.go
+++ b/cmd/cue/cmd/get_go.go
@@ -1075,6 +1075,14 @@
field, cueType := e.makeField(name, kind, f.Type(), docs[i], count > 0)
add(field)
+ if s := reflect.StructTag(tag).Get("cue"); s != "" {
+ expr, err := parser.ParseExpr("get go", s)
+ if err != nil {
+ e.logf("error parsing struct tag %q:", s, err)
+ }
+ field.Value = cueast.NewBinExpr(cuetoken.AND, field.Value, expr)
+ }
+
// Add field tag to convert back to Go.
typeName := f.Type().String()
// simplify type names:
diff --git a/cmd/cue/cmd/testdata/code/go/pkg1/file1.go b/cmd/cue/cmd/testdata/code/go/pkg1/file1.go
index d3d110a..1aa7be5 100644
--- a/cmd/cue/cmd/testdata/code/go/pkg1/file1.go
+++ b/cmd/cue/cmd/testdata/code/go/pkg1/file1.go
@@ -38,7 +38,7 @@
AnyJSON json.Marshaler
AnyText encoding.TextMarshaler
- Bar int `json:"bar,omitempty"`
+ Bar int `json:"bar,omitempty" cue:">10"`
exclude int
diff --git a/cmd/cue/cmd/testdata/pkg/cuelang.org/go/cmd/cue/cmd/testdata/code/go/pkg1/file1_go_gen.cue b/cmd/cue/cmd/testdata/pkg/cuelang.org/go/cmd/cue/cmd/testdata/code/go/pkg1/file1_go_gen.cue
index 3e1cdd5..5164026 100644
--- a/cmd/cue/cmd/testdata/pkg/cuelang.org/go/cmd/cue/cmd/testdata/code/go/pkg1/file1_go_gen.cue
+++ b/cmd/cue/cmd/testdata/pkg/cuelang.org/go/cmd/cue/cmd/testdata/code/go/pkg1/file1_go_gen.cue
@@ -21,7 +21,7 @@
CustomYAML?: null | #CustomYAML @go(,*CustomYAML)
AnyJSON: _ @go(,json.Marshaler)
AnyText: string @go(,encoding.TextMarshaler)
- bar?: int @go(Bar)
+ bar?: int & >10 @go(Bar)
// Time is mapped to CUE's internal type.
Time: time.Time