cue icon indicating copy to clipboard operation
cue copied to clipboard

internal/encoding/gotypes: embedded disjunction translates to empty struct

Open rogpeppe opened this issue 7 months ago • 0 comments

What version of CUE are you using (cue version)?

250524b0d6e0a2d64e2be220d55334ef62d65df6

Does this issue reproduce with the latest stable release?

Yes

What did you do?

Generate some CUE from a protobuf definition, then generate Go types from that:

exec cue import -I . x.proto
exec cat x.cue
exec cue exp gengotypes
grep commonField cue_types_v1_gen.go

-- foo.json --
{
	"x": {
		"something": true
	}
}
-- x.proto --
syntax = "proto3";

package something.v1;

message T {
  string commonField = 1;
  oneof foo {
    string foo = 2;
    int64 bar = 3;
  }
}

What did you expect to see?

A passing test: at least the common fields from the protobuf message should be present in the Go code.

What did you see instead?

Instead, all fields are omitted. One reason for this is that cue.Value.Fields will return an error in this case because the fields are not all known. Some new API or option is probably required to enable gengotypes to do its job properly here.

> exec cue import -I . x.proto
> exec cat x.cue
[stdout]
package v1

#T: {
	commonField?: string @protobuf(1,string)
	{} | {
		foo: string @protobuf(2,string)
	} | {
		bar: int64 @protobuf(3,int64)
	}
}
> exec cue exp gengotypes
> grep commonField cue_types_v1_gen.go
[cue_types_v1_gen.go]
// Code generated by "cue exp gengotypes"; DO NOT EDIT.

package v1

type T struct {
}

FAIL: /tmp/x.txtar:4: no match for `commonField` found in cue_types_v1_gen.go

rogpeppe avatar Jun 11 '25 10:06 rogpeppe