-- schema.cue --
enum: {
	[string]:
		{"foo", #enumValue: 1} |
		{"bar", #enumValue: 2} @protobuf(1,Enum)
}

defEnum: {
	[string]: #foo | #bar @protobuf(2,Enum)
}

#foo: 1
#bar: 2

typeEnum: {
	[string]: #Enum @protobuf(3,Enum)
}

#Enum: #foo | #bar

// TODO: consider supporting @symbol(foo) or @json(,symbol=foo)
// symbolEnum: [string]:
//     { 1, @symbol(foo) } |
//     { 2, @symbol(bar) }

singleEnum: #single @protobuf(3,Enum)

#single: 1

badEnum: {string, #enumValue: 1} | {"two", #enumValue: 2}
-- value.cue --
enum: asIs:        "foo"
enum: asIsUnknown: "foobar"

// Convert integers to strings
defEnum: foo: 1
defEnum: bar: 2
defEnum: baz: 3

typeEnum: foo: 1
typeEnum: bar: 2
typeEnum: baz: 3

// TODO: consider supporting @symbol(foo) or @json(,symbol=foo)
// symbolEnum: foo: "foo"
// symbolEnum: bar: "bar"
// symbolEnum: baz: "baz"

singleEnum: 1
-- out/jsonpb --
enum: asIs:        "foo"
enum: asIsUnknown: "foobar"

// Convert integers to strings
defEnum: foo: "foo"
defEnum: bar: "bar"
defEnum: baz: 3

typeEnum: foo: "foo"
typeEnum: bar: "bar"
typeEnum: baz: 3

// TODO: consider supporting @symbol(foo) or @json(,symbol=foo)
// symbolEnum: foo: "foo"
// symbolEnum: bar: "bar"
// symbolEnum: baz: "baz"

singleEnum: 1
