-- 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 | 3

// 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"

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

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/encode --
enum: {
  asIs: "foo"
}
defEnum: {
  # Convert integers to strings
  foo: FOO
  bar: BAR
}
typeEnum: {
  foo: FOO
  bar: BAR
  baz: 3
}
singleEnum: single
