Documentation ¶
Index ¶
- Variables
- type Attempt
- func (*Attempt) Descriptor() ([]byte, []int)deprecated
- func (x *Attempt) GetActualStartTime() *timestamppb.Timestamp
- func (x *Attempt) GetBuilds() []*Build
- func (x *Attempt) GetClGroupKey() string
- func (x *Attempt) GetConfigGroup() string
- func (x *Attempt) GetEndTime() *timestamppb.Timestamp
- func (x *Attempt) GetEquivalentClGroupKey() string
- func (x *Attempt) GetGerritChanges() []*GerritChange
- func (x *Attempt) GetHasCustomRequirement() bool
- func (x *Attempt) GetKey() string
- func (x *Attempt) GetLuciProject() string
- func (x *Attempt) GetRunId() string
- func (x *Attempt) GetStartTime() *timestamppb.Timestamp
- func (x *Attempt) GetStatus() AttemptStatus
- func (x *Attempt) GetSubstatus() AttemptSubstatus
- func (*Attempt) ProtoMessage()
- func (x *Attempt) ProtoReflect() protoreflect.Message
- func (x *Attempt) Reset()
- func (x *Attempt) String() string
- type AttemptStatus
- func (AttemptStatus) Descriptor() protoreflect.EnumDescriptor
- func (x AttemptStatus) Enum() *AttemptStatus
- func (AttemptStatus) EnumDescriptor() ([]byte, []int)deprecated
- func (x AttemptStatus) Number() protoreflect.EnumNumber
- func (x AttemptStatus) String() string
- func (AttemptStatus) Type() protoreflect.EnumType
- type AttemptSubstatus
- func (AttemptSubstatus) Descriptor() protoreflect.EnumDescriptor
- func (x AttemptSubstatus) Enum() *AttemptSubstatus
- func (AttemptSubstatus) EnumDescriptor() ([]byte, []int)deprecated
- func (x AttemptSubstatus) Number() protoreflect.EnumNumber
- func (x AttemptSubstatus) String() string
- func (AttemptSubstatus) Type() protoreflect.EnumType
- type Build
- func (*Build) Descriptor() ([]byte, []int)deprecated
- func (x *Build) GetCritical() bool
- func (x *Build) GetHost() string
- func (x *Build) GetId() int64
- func (x *Build) GetOrigin() Build_Origin
- func (*Build) ProtoMessage()
- func (x *Build) ProtoReflect() protoreflect.Message
- func (x *Build) Reset()
- func (x *Build) String() string
- type Build_Origin
- func (Build_Origin) Descriptor() protoreflect.EnumDescriptor
- func (x Build_Origin) Enum() *Build_Origin
- func (Build_Origin) EnumDescriptor() ([]byte, []int)deprecated
- func (x Build_Origin) Number() protoreflect.EnumNumber
- func (x Build_Origin) String() string
- func (Build_Origin) Type() protoreflect.EnumType
- type GerritChange
- func (*GerritChange) Descriptor() ([]byte, []int)deprecated
- func (x *GerritChange) GetChange() int64
- func (x *GerritChange) GetEarliestEquivalentPatchset() int64
- func (x *GerritChange) GetHost() string
- func (x *GerritChange) GetIsOwnerBot() bool
- func (x *GerritChange) GetMode() Mode
- func (x *GerritChange) GetPatchset() int64
- func (x *GerritChange) GetProject() string
- func (x *GerritChange) GetSubmitStatus() GerritChange_SubmitStatus
- func (x *GerritChange) GetTriggerTime() *timestamppb.Timestamp
- func (*GerritChange) ProtoMessage()
- func (x *GerritChange) ProtoReflect() protoreflect.Message
- func (x *GerritChange) Reset()
- func (x *GerritChange) String() string
- type GerritChange_SubmitStatus
- func (GerritChange_SubmitStatus) Descriptor() protoreflect.EnumDescriptor
- func (x GerritChange_SubmitStatus) Enum() *GerritChange_SubmitStatus
- func (GerritChange_SubmitStatus) EnumDescriptor() ([]byte, []int)deprecated
- func (x GerritChange_SubmitStatus) Number() protoreflect.EnumNumber
- func (x GerritChange_SubmitStatus) String() string
- func (GerritChange_SubmitStatus) Type() protoreflect.EnumType
- type Mode
Constants ¶
This section is empty.
Variables ¶
var ( Mode_name = map[int32]string{ 0: "MODE_UNSPECIFIED", 1: "DRY_RUN", 2: "FULL_RUN", } Mode_value = map[string]int32{ "MODE_UNSPECIFIED": 0, "DRY_RUN": 1, "FULL_RUN": 2, } )
Enum value maps for Mode.
var ( AttemptStatus_name = map[int32]string{ 0: "ATTEMPT_STATUS_UNSPECIFIED", 1: "STARTED", 2: "SUCCESS", 3: "ABORTED", 4: "FAILURE", 5: "INFRA_FAILURE", } AttemptStatus_value = map[string]int32{ "ATTEMPT_STATUS_UNSPECIFIED": 0, "STARTED": 1, "SUCCESS": 2, "ABORTED": 3, "FAILURE": 4, "INFRA_FAILURE": 5, } )
Enum value maps for AttemptStatus.
var ( AttemptSubstatus_name = map[int32]string{ 0: "ATTEMPT_SUBSTATUS_UNSPECIFIED", 1: "NO_SUBSTATUS", 2: "FAILED_TRYJOBS", 3: "FAILED_LINT", 4: "UNAPPROVED", 5: "PERMISSION_DENIED", 6: "UNSATISFIED_DEPENDENCY", 7: "MANUAL_CANCEL", 8: "BUILDBUCKET_MISCONFIGURATION", } AttemptSubstatus_value = map[string]int32{ "ATTEMPT_SUBSTATUS_UNSPECIFIED": 0, "NO_SUBSTATUS": 1, "FAILED_TRYJOBS": 2, "FAILED_LINT": 3, "UNAPPROVED": 4, "PERMISSION_DENIED": 5, "UNSATISFIED_DEPENDENCY": 6, "MANUAL_CANCEL": 7, "BUILDBUCKET_MISCONFIGURATION": 8, } )
Enum value maps for AttemptSubstatus.
var ( GerritChange_SubmitStatus_name = map[int32]string{ 0: "SUBMIT_STATUS_UNSPECIFIED", 1: "PENDING", 2: "UNKNOWN", 3: "FAILURE", 4: "SUCCESS", } GerritChange_SubmitStatus_value = map[string]int32{ "SUBMIT_STATUS_UNSPECIFIED": 0, "PENDING": 1, "UNKNOWN": 2, "FAILURE": 3, "SUCCESS": 4, } )
Enum value maps for GerritChange_SubmitStatus.
var ( Build_Origin_name = map[int32]string{ 0: "ORIGIN_UNSPECIFIED", 1: "NOT_REUSABLE", 2: "NOT_REUSED", 3: "REUSED", } Build_Origin_value = map[string]int32{ "ORIGIN_UNSPECIFIED": 0, "NOT_REUSABLE": 1, "NOT_REUSED": 2, "REUSED": 3, } )
Enum value maps for Build_Origin.
var File_go_chromium_org_luci_cv_api_bigquery_v1_attempt_proto protoreflect.FileDescriptor
Functions ¶
This section is empty.
Types ¶
type Attempt ¶
type Attempt struct { // The opaque key unique to this Attempt. Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` // The LUCI project that this Attempt belongs to. LuciProject string `protobuf:"bytes,2,opt,name=luci_project,json=luciProject,proto3" json:"luci_project,omitempty"` // The ID of the corresponding LUCI CV Run of this attempt. RunId string `protobuf:"bytes,14,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"` // The name of the config group that this Attempt belongs to. ConfigGroup string `protobuf:"bytes,11,opt,name=config_group,json=configGroup,proto3" json:"config_group,omitempty"` // An opaque key that is unique for a given set of Gerrit change patchsets. // (or, equivalently, buildsets). The same cl_group_key will be used if // another Attempt is made for the same set of changes at a different time. ClGroupKey string `protobuf:"bytes,3,opt,name=cl_group_key,json=clGroupKey,proto3" json:"cl_group_key,omitempty"` // Similar to cl_group_key, except the key will be the same when the // earliest_equivalent_patchset values are the same, even if the patchset // values are different. // // For example, when a new "trivial" patchset is uploaded, then the // cl_group_key will change but the equivalent_cl_group_key will stay the // same. EquivalentClGroupKey string `protobuf:"bytes,4,opt,name=equivalent_cl_group_key,json=equivalentClGroupKey,proto3" json:"equivalent_cl_group_key,omitempty"` // The time when the Attempt started. // // Note: this is the trigger time of the last CL triggered (i.e. the time // user votes CQ+1 or +2) not the time LUCI CV started the run. Ideally, this // should be named `create_time` and `actual_start_time` should be named // `start_time`. StartTime *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"` // The time when the Attempt actually started in LUCI CV. // // In most cases, this should be very close to `start_time` as it only // involves the overhead of LUCI CV getting data from Gerrit. However, if the // run can not be started immediately due to user running out of quota, then // there could be a gap between `actual_start_time` and `start_time`. // // The `actual_start_time` could be absent if the Attempt is not able to // start (e.g. CL footer contains invalid tryjob directives) ActualStartTime *timestamppb.Timestamp `protobuf:"bytes,13,opt,name=actual_start_time,json=actualStartTime,proto3" json:"actual_start_time,omitempty"` // The time when the Attempt ended (released by CQ). EndTime *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"` // Gerrit changes, with specific patchsets, in this Attempt. // There should be one or more. GerritChanges []*GerritChange `protobuf:"bytes,7,rep,name=gerrit_changes,json=gerritChanges,proto3" json:"gerrit_changes,omitempty"` // Relevant builds as of this Attempt's end time. // // While Attempt is processed, CQ may consider more builds than included here. // // For example, the following builds will be not be included: // - builds triggered before this Attempt started, considered temporarily by // CQ, but then ignored because they ultimately failed such that CQ had to // trigger new builds instead. // - successful builds which were fresh enough at the Attempt start time, // but which were ignored after they became too old for consideration such // that CQ had to trigger new builds instead. // - builds triggered as part of this Attempt, which were later removed from // project CQ config and hence were no longer required by CQ by Attempt // end time. Builds []*Build `protobuf:"bytes,8,rep,name=builds,proto3" json:"builds,omitempty"` // Final status of the Attempt. Status AttemptStatus `protobuf:"varint,9,opt,name=status,proto3,enum=bigquery.AttemptStatus" json:"status,omitempty"` // A more fine-grained status the explains more details about the status. Substatus AttemptSubstatus `protobuf:"varint,10,opt,name=substatus,proto3,enum=bigquery.AttemptSubstatus" json:"substatus,omitempty"` // Whether or not the required builds for this attempt include additional // "opted-in" builders by the user via the `Cq-Include-Trybots` footer. HasCustomRequirement bool `protobuf:"varint,12,opt,name=has_custom_requirement,json=hasCustomRequirement,proto3" json:"has_custom_requirement,omitempty"` // contains filtered or unexported fields }
Attempt includes the state of one CQ attempt.
An attempt involves doing checks for one or more CLs that could potentially be submitted together.
Next ID: 14.
func (*Attempt) Descriptor
deprecated
func (*Attempt) GetActualStartTime ¶
func (x *Attempt) GetActualStartTime() *timestamppb.Timestamp
func (*Attempt) GetClGroupKey ¶
func (*Attempt) GetConfigGroup ¶
func (*Attempt) GetEndTime ¶
func (x *Attempt) GetEndTime() *timestamppb.Timestamp
func (*Attempt) GetEquivalentClGroupKey ¶
func (*Attempt) GetGerritChanges ¶
func (x *Attempt) GetGerritChanges() []*GerritChange
func (*Attempt) GetHasCustomRequirement ¶
func (*Attempt) GetLuciProject ¶
func (*Attempt) GetStartTime ¶
func (x *Attempt) GetStartTime() *timestamppb.Timestamp
func (*Attempt) GetStatus ¶
func (x *Attempt) GetStatus() AttemptStatus
func (*Attempt) GetSubstatus ¶
func (x *Attempt) GetSubstatus() AttemptSubstatus
func (*Attempt) ProtoMessage ¶
func (*Attempt) ProtoMessage()
func (*Attempt) ProtoReflect ¶
func (x *Attempt) ProtoReflect() protoreflect.Message
type AttemptStatus ¶
type AttemptStatus int32
const ( // Default, never set. AttemptStatus_ATTEMPT_STATUS_UNSPECIFIED AttemptStatus = 0 // Started but not completed. Used by CQ API, TBD. AttemptStatus_STARTED AttemptStatus = 1 // Ready to submit, all checks passed. AttemptStatus_SUCCESS AttemptStatus = 2 // Attempt stopped before completion, due to some external event and not // a failure of the CLs to pass all tests. For example, this may happen // when a new patchset is uploaded, a CL is deleted, etc. AttemptStatus_ABORTED AttemptStatus = 3 // Completed and failed some check. This may happen when a build failed, // footer syntax was incorrect, or CL was not approved. AttemptStatus_FAILURE AttemptStatus = 4 // Failure in CQ itself caused the Attempt to be dropped. AttemptStatus_INFRA_FAILURE AttemptStatus = 5 )
func (AttemptStatus) Descriptor ¶
func (AttemptStatus) Descriptor() protoreflect.EnumDescriptor
func (AttemptStatus) Enum ¶
func (x AttemptStatus) Enum() *AttemptStatus
func (AttemptStatus) EnumDescriptor
deprecated
func (AttemptStatus) EnumDescriptor() ([]byte, []int)
Deprecated: Use AttemptStatus.Descriptor instead.
func (AttemptStatus) Number ¶
func (x AttemptStatus) Number() protoreflect.EnumNumber
func (AttemptStatus) String ¶
func (x AttemptStatus) String() string
func (AttemptStatus) Type ¶
func (AttemptStatus) Type() protoreflect.EnumType
type AttemptSubstatus ¶
type AttemptSubstatus int32
const ( // Default, never set. AttemptSubstatus_ATTEMPT_SUBSTATUS_UNSPECIFIED AttemptSubstatus = 0 // There is no more detailed status set. AttemptSubstatus_NO_SUBSTATUS AttemptSubstatus = 1 // Failed at least one critical tryjob. AttemptSubstatus_FAILED_TRYJOBS AttemptSubstatus = 2 // Failed an initial quick check of CL and CL description state. AttemptSubstatus_FAILED_LINT AttemptSubstatus = 3 // A CL didn't get sufficient approval for submitting via CQ. AttemptSubstatus_UNAPPROVED AttemptSubstatus = 4 // A CQ triggerer doesn't have permission to trigger CQ. AttemptSubstatus_PERMISSION_DENIED AttemptSubstatus = 5 // There was a problem with a dependency CL, e.g. some dependencies // were not submitted or not grouped together in this attempt. AttemptSubstatus_UNSATISFIED_DEPENDENCY AttemptSubstatus = 6 // Aborted because of a manual cancelation. AttemptSubstatus_MANUAL_CANCEL AttemptSubstatus = 7 // A request to buildbucket failed because CQ didn't have permission to // trigger builds. AttemptSubstatus_BUILDBUCKET_MISCONFIGURATION AttemptSubstatus = 8 )
func (AttemptSubstatus) Descriptor ¶
func (AttemptSubstatus) Descriptor() protoreflect.EnumDescriptor
func (AttemptSubstatus) Enum ¶
func (x AttemptSubstatus) Enum() *AttemptSubstatus
func (AttemptSubstatus) EnumDescriptor
deprecated
func (AttemptSubstatus) EnumDescriptor() ([]byte, []int)
Deprecated: Use AttemptSubstatus.Descriptor instead.
func (AttemptSubstatus) Number ¶
func (x AttemptSubstatus) Number() protoreflect.EnumNumber
func (AttemptSubstatus) String ¶
func (x AttemptSubstatus) String() string
func (AttemptSubstatus) Type ¶
func (AttemptSubstatus) Type() protoreflect.EnumType
type Build ¶
type Build struct { // Buildbucket build ID, unique per Buildbucket instance. Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` // Buildbucket host, e.g. "cr-buildbucket.appspot.com". Host string `protobuf:"bytes,2,opt,name=host,proto3" json:"host,omitempty"` // Information about whether this build was triggered previously and reused, // or triggered because there was no reusable build, or because builds by // this builder are all not reusable. Origin Build_Origin `protobuf:"varint,3,opt,name=origin,proto3,enum=bigquery.Build_Origin" json:"origin,omitempty"` // Whether the CQ must wait for this build to pass in order for the CLs to be // considered ready to submit. True means this builder must pass, false means // this builder is "optional", and so this build should not be used to assess // the correctness of the CLs in the Attempt. For example, builds added // because of the Cq-Include-Trybots footer are still critical; experimental // builders are not. // // Tip: join this with the Buildbucket BigQuery table to figure out which // builder this build belongs to. Critical bool `protobuf:"varint,4,opt,name=critical,proto3" json:"critical,omitempty"` // contains filtered or unexported fields }
Build represents one tryjob Buildbucket build.
See also: Build in buildbucket/proto/build.proto.
func (*Build) Descriptor
deprecated
func (*Build) GetCritical ¶
func (*Build) GetOrigin ¶
func (x *Build) GetOrigin() Build_Origin
func (*Build) ProtoMessage ¶
func (*Build) ProtoMessage()
func (*Build) ProtoReflect ¶
func (x *Build) ProtoReflect() protoreflect.Message
type Build_Origin ¶
type Build_Origin int32
const ( // Default. Never set. Build_ORIGIN_UNSPECIFIED Build_Origin = 0 // Build was triggered as part of this attempt // because reuse was disabled for its builder. Build_NOT_REUSABLE Build_Origin = 1 // Build was triggered as part of this attempt, // but if there was an already existing build it would have been reused. Build_NOT_REUSED Build_Origin = 2 // Build was reused. Build_REUSED Build_Origin = 3 )
func (Build_Origin) Descriptor ¶
func (Build_Origin) Descriptor() protoreflect.EnumDescriptor
func (Build_Origin) Enum ¶
func (x Build_Origin) Enum() *Build_Origin
func (Build_Origin) EnumDescriptor
deprecated
func (Build_Origin) EnumDescriptor() ([]byte, []int)
Deprecated: Use Build_Origin.Descriptor instead.
func (Build_Origin) Number ¶
func (x Build_Origin) Number() protoreflect.EnumNumber
func (Build_Origin) String ¶
func (x Build_Origin) String() string
func (Build_Origin) Type ¶
func (Build_Origin) Type() protoreflect.EnumType
type GerritChange ¶
type GerritChange struct { // Gerrit hostname, e.g. "chromium-review.googlesource.com". Host string `protobuf:"bytes,1,opt,name=host,proto3" json:"host,omitempty"` // Gerrit project, e.g. "chromium/src". Project string `protobuf:"bytes,2,opt,name=project,proto3" json:"project,omitempty"` // Change number, e.g. 12345. Change int64 `protobuf:"varint,3,opt,name=change,proto3" json:"change,omitempty"` // Patch set number, e.g. 1. Patchset int64 `protobuf:"varint,4,opt,name=patchset,proto3" json:"patchset,omitempty"` // The earliest patchset of the CL that is considered equivalent to the // patchset above. EarliestEquivalentPatchset int64 `` /* 142-byte string literal not displayed */ // The time that the CQ was triggered for this CL in this Attempt. TriggerTime *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=trigger_time,json=triggerTime,proto3" json:"trigger_time,omitempty"` // CQ Mode for this CL, e.g. dry run or full run. Mode Mode `protobuf:"varint,7,opt,name=mode,proto3,enum=bigquery.Mode" json:"mode,omitempty"` // Whether CQ tried to submit this change and the result of the operation. SubmitStatus GerritChange_SubmitStatus `` /* 138-byte string literal not displayed */ // Indicates whether the owner of the CL is bot or not. // // owner is considered as a bot if any of the following conditions are met: // - owner is in Gerrit Service Users group: // https://gerrit-review.googlesource.com/Documentation/access-control.html#service_users // - owner email ends with "gserviceaccount.com" // - owner email ends with "prod.google.com" IsOwnerBot bool `protobuf:"varint,10,opt,name=is_owner_bot,json=isOwnerBot,proto3" json:"is_owner_bot,omitempty"` // contains filtered or unexported fields }
GerritChange represents one revision (patchset) of one Gerrit change in an Attempt.
See also: GerritChange in buildbucket/proto/common.proto.
func (*GerritChange) Descriptor
deprecated
func (*GerritChange) Descriptor() ([]byte, []int)
Deprecated: Use GerritChange.ProtoReflect.Descriptor instead.
func (*GerritChange) GetChange ¶
func (x *GerritChange) GetChange() int64
func (*GerritChange) GetEarliestEquivalentPatchset ¶
func (x *GerritChange) GetEarliestEquivalentPatchset() int64
func (*GerritChange) GetHost ¶
func (x *GerritChange) GetHost() string
func (*GerritChange) GetIsOwnerBot ¶
func (x *GerritChange) GetIsOwnerBot() bool
func (*GerritChange) GetMode ¶
func (x *GerritChange) GetMode() Mode
func (*GerritChange) GetPatchset ¶
func (x *GerritChange) GetPatchset() int64
func (*GerritChange) GetProject ¶
func (x *GerritChange) GetProject() string
func (*GerritChange) GetSubmitStatus ¶
func (x *GerritChange) GetSubmitStatus() GerritChange_SubmitStatus
func (*GerritChange) GetTriggerTime ¶
func (x *GerritChange) GetTriggerTime() *timestamppb.Timestamp
func (*GerritChange) ProtoMessage ¶
func (*GerritChange) ProtoMessage()
func (*GerritChange) ProtoReflect ¶
func (x *GerritChange) ProtoReflect() protoreflect.Message
func (*GerritChange) Reset ¶
func (x *GerritChange) Reset()
func (*GerritChange) String ¶
func (x *GerritChange) String() string
type GerritChange_SubmitStatus ¶
type GerritChange_SubmitStatus int32
const ( // Default. Never set. GerritChange_SUBMIT_STATUS_UNSPECIFIED GerritChange_SubmitStatus = 0 // CQ didn't try submitting this CL. // // Includes a case where CQ tried submitting the CL, but submission failed // due to transient error leaving CL as is, and CQ didn't try again. GerritChange_PENDING GerritChange_SubmitStatus = 1 // CQ tried to submit, but got presumably transient errors and couldn't // ascertain whether submission was successful. // // It's possible that change was actually submitted, but CQ didn't receive // a confirmation from Gerrit and follow up checks of the change status // failed, too. GerritChange_UNKNOWN GerritChange_SubmitStatus = 2 // CQ tried to submit, but Gerrit rejected the submission because this // Change can't be submitted. // Typically, this is because a rebase conflict needs to be resolved, // or rarely because the change needs some kind of approval. GerritChange_FAILURE GerritChange_SubmitStatus = 3 // CQ submitted this change (aka "merged" in Gerrit jargon). // // Submission of Gerrit CLs in an Attempt is not an atomic operation, // so it's possible that only some of the GerritChanges are submitted. GerritChange_SUCCESS GerritChange_SubmitStatus = 4 )
func (GerritChange_SubmitStatus) Descriptor ¶
func (GerritChange_SubmitStatus) Descriptor() protoreflect.EnumDescriptor
func (GerritChange_SubmitStatus) Enum ¶
func (x GerritChange_SubmitStatus) Enum() *GerritChange_SubmitStatus
func (GerritChange_SubmitStatus) EnumDescriptor
deprecated
func (GerritChange_SubmitStatus) EnumDescriptor() ([]byte, []int)
Deprecated: Use GerritChange_SubmitStatus.Descriptor instead.
func (GerritChange_SubmitStatus) Number ¶
func (x GerritChange_SubmitStatus) Number() protoreflect.EnumNumber
func (GerritChange_SubmitStatus) String ¶
func (x GerritChange_SubmitStatus) String() string
func (GerritChange_SubmitStatus) Type ¶
func (GerritChange_SubmitStatus) Type() protoreflect.EnumType
type Mode ¶
type Mode int32
func (Mode) Descriptor ¶
func (Mode) Descriptor() protoreflect.EnumDescriptor
func (Mode) EnumDescriptor
deprecated
func (Mode) Number ¶
func (x Mode) Number() protoreflect.EnumNumber
func (Mode) Type ¶
func (Mode) Type() protoreflect.EnumType