diff --git a/go/gen/sift/reports/v1/reports.pb.go b/go/gen/sift/reports/v1/reports.pb.go index 3d8b2aa9e..e2125ce8a 100644 --- a/go/gen/sift/reports/v1/reports.pb.go +++ b/go/gen/sift/reports/v1/reports.pb.go @@ -1433,7 +1433,8 @@ type ListReportsRequest struct { // the call that provided the page token. Optional. PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` // A [Common Expression Language (CEL)](https://github.com/google/cel-spec) filter string. - // Available fields to filter by are `report_id`, `report_template_id`, `tag_name`, `name`, `run_id`, `is_archived`, and `archived_date`. + // Available fields to filter by are `report_id`, `report_template_id`, `tag_name`, `name`, `run_id`, `is_archived`, `archived_date`, `created_date`, + // `created_by_user_id`, `metadata`, `modified_date`, and `modified_by_user_id`. // For further information about how to use CELs, please refer to [this guide](https://github.com/google/cel-spec/blob/master/doc/langdef.md#standard-definitions). // For more information about the fields used for filtering, please refer to [this definition](/docs/api/grpc/protocol-buffers/reports#report). Optional. Filter string `protobuf:"bytes,3,opt,name=filter,proto3" json:"filter,omitempty"` diff --git a/go/gen/sift/rules/v1/rules.pb.go b/go/gen/sift/rules/v1/rules.pb.go index 10b613a4a..428e87e86 100644 --- a/go/gen/sift/rules/v1/rules.pb.go +++ b/go/gen/sift/rules/v1/rules.pb.go @@ -3291,7 +3291,7 @@ type ListRulesRequest struct { PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` // A [Common Expression Language (CEL)](https://github.com/google/cel-spec) filter string. // Available fields to filter by are `rule_id`, `client_key`, `name`, `description`, `is_external`, `asset_id`, `tag_id`, - // `created_date`, `created_by_user_id`, `modified_date`, `modified_by_user_id`, `deleted_date`, `is_archived`, and `archived_date`. + // `created_date`, `created_by_user_id`, `metadata`, `modified_date`, `modified_by_user_id`, `deleted_date`, `is_archived`, and `archived_date`. // For further information about how to use CELs, please refer to [this guide](https://github.com/google/cel-spec/blob/master/doc/langdef.md#standard-definitions). // Optional. Filter string `protobuf:"bytes,3,opt,name=filter,proto3" json:"filter,omitempty"` diff --git a/go/gen/sift/test_reports/v1/test_reports.pb.go b/go/gen/sift/test_reports/v1/test_reports.pb.go new file mode 100644 index 000000000..40996d2a8 --- /dev/null +++ b/go/gen/sift/test_reports/v1/test_reports.pb.go @@ -0,0 +1,4119 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc (unknown) +// source: sift/test_reports/v1/test_reports.proto + +package test_reportsv1 + +import ( + _ "github.com/sift-stack/sift/go/gen/google/api" + _ "github.com/sift-stack/sift/go/gen/protoc-gen-openapiv2/options" + v1 "github.com/sift-stack/sift/go/gen/sift/metadata/v1" + v2 "github.com/sift-stack/sift/go/gen/sift/unit/v2" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + fieldmaskpb "google.golang.org/protobuf/types/known/fieldmaskpb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type TestStatus int32 + +const ( + TestStatus_TEST_STATUS_UNSPECIFIED TestStatus = 0 + TestStatus_TEST_STATUS_DRAFT TestStatus = 1 // Barebones test report created, waiting for file processing + TestStatus_TEST_STATUS_PASSED TestStatus = 2 + TestStatus_TEST_STATUS_FAILED TestStatus = 3 + TestStatus_TEST_STATUS_ABORTED TestStatus = 4 + TestStatus_TEST_STATUS_ERROR TestStatus = 5 + TestStatus_TEST_STATUS_IN_PROGRESS TestStatus = 6 + TestStatus_TEST_STATUS_SKIPPED TestStatus = 7 +) + +// Enum value maps for TestStatus. +var ( + TestStatus_name = map[int32]string{ + 0: "TEST_STATUS_UNSPECIFIED", + 1: "TEST_STATUS_DRAFT", + 2: "TEST_STATUS_PASSED", + 3: "TEST_STATUS_FAILED", + 4: "TEST_STATUS_ABORTED", + 5: "TEST_STATUS_ERROR", + 6: "TEST_STATUS_IN_PROGRESS", + 7: "TEST_STATUS_SKIPPED", + } + TestStatus_value = map[string]int32{ + "TEST_STATUS_UNSPECIFIED": 0, + "TEST_STATUS_DRAFT": 1, + "TEST_STATUS_PASSED": 2, + "TEST_STATUS_FAILED": 3, + "TEST_STATUS_ABORTED": 4, + "TEST_STATUS_ERROR": 5, + "TEST_STATUS_IN_PROGRESS": 6, + "TEST_STATUS_SKIPPED": 7, + } +) + +func (x TestStatus) Enum() *TestStatus { + p := new(TestStatus) + *p = x + return p +} + +func (x TestStatus) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (TestStatus) Descriptor() protoreflect.EnumDescriptor { + return file_sift_test_reports_v1_test_reports_proto_enumTypes[0].Descriptor() +} + +func (TestStatus) Type() protoreflect.EnumType { + return &file_sift_test_reports_v1_test_reports_proto_enumTypes[0] +} + +func (x TestStatus) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use TestStatus.Descriptor instead. +func (TestStatus) EnumDescriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{0} +} + +type TestStepType int32 + +const ( + TestStepType_TEST_STEP_TYPE_UNSPECIFIED TestStepType = 0 + TestStepType_TEST_STEP_TYPE_SEQUENCE TestStepType = 1 // ResultSet/MainSequence - top-level test sequence + TestStepType_TEST_STEP_TYPE_GROUP TestStepType = 2 // TestGroup - logical grouping of test steps + TestStepType_TEST_STEP_TYPE_ACTION TestStepType = 3 // SessionAction - individual executable action + TestStepType_TEST_STEP_TYPE_FLOW_CONTROL TestStepType = 4 // Flow control elements (While, If, etc.) +) + +// Enum value maps for TestStepType. +var ( + TestStepType_name = map[int32]string{ + 0: "TEST_STEP_TYPE_UNSPECIFIED", + 1: "TEST_STEP_TYPE_SEQUENCE", + 2: "TEST_STEP_TYPE_GROUP", + 3: "TEST_STEP_TYPE_ACTION", + 4: "TEST_STEP_TYPE_FLOW_CONTROL", + } + TestStepType_value = map[string]int32{ + "TEST_STEP_TYPE_UNSPECIFIED": 0, + "TEST_STEP_TYPE_SEQUENCE": 1, + "TEST_STEP_TYPE_GROUP": 2, + "TEST_STEP_TYPE_ACTION": 3, + "TEST_STEP_TYPE_FLOW_CONTROL": 4, + } +) + +func (x TestStepType) Enum() *TestStepType { + p := new(TestStepType) + *p = x + return p +} + +func (x TestStepType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (TestStepType) Descriptor() protoreflect.EnumDescriptor { + return file_sift_test_reports_v1_test_reports_proto_enumTypes[1].Descriptor() +} + +func (TestStepType) Type() protoreflect.EnumType { + return &file_sift_test_reports_v1_test_reports_proto_enumTypes[1] +} + +func (x TestStepType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use TestStepType.Descriptor instead. +func (TestStepType) EnumDescriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{1} +} + +type TestMeasurementType int32 + +const ( + TestMeasurementType_TEST_MEASUREMENT_TYPE_UNSPECIFIED TestMeasurementType = 0 + TestMeasurementType_TEST_MEASUREMENT_TYPE_DOUBLE TestMeasurementType = 1 + TestMeasurementType_TEST_MEASUREMENT_TYPE_STRING TestMeasurementType = 3 + TestMeasurementType_TEST_MEASUREMENT_TYPE_BOOLEAN TestMeasurementType = 4 + TestMeasurementType_TEST_MEASUREMENT_TYPE_LIMIT TestMeasurementType = 5 +) + +// Enum value maps for TestMeasurementType. +var ( + TestMeasurementType_name = map[int32]string{ + 0: "TEST_MEASUREMENT_TYPE_UNSPECIFIED", + 1: "TEST_MEASUREMENT_TYPE_DOUBLE", + 3: "TEST_MEASUREMENT_TYPE_STRING", + 4: "TEST_MEASUREMENT_TYPE_BOOLEAN", + 5: "TEST_MEASUREMENT_TYPE_LIMIT", + } + TestMeasurementType_value = map[string]int32{ + "TEST_MEASUREMENT_TYPE_UNSPECIFIED": 0, + "TEST_MEASUREMENT_TYPE_DOUBLE": 1, + "TEST_MEASUREMENT_TYPE_STRING": 3, + "TEST_MEASUREMENT_TYPE_BOOLEAN": 4, + "TEST_MEASUREMENT_TYPE_LIMIT": 5, + } +) + +func (x TestMeasurementType) Enum() *TestMeasurementType { + p := new(TestMeasurementType) + *p = x + return p +} + +func (x TestMeasurementType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (TestMeasurementType) Descriptor() protoreflect.EnumDescriptor { + return file_sift_test_reports_v1_test_reports_proto_enumTypes[2].Descriptor() +} + +func (TestMeasurementType) Type() protoreflect.EnumType { + return &file_sift_test_reports_v1_test_reports_proto_enumTypes[2] +} + +func (x TestMeasurementType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use TestMeasurementType.Descriptor instead. +func (TestMeasurementType) EnumDescriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{2} +} + +type TestReport struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Unique identifier for the run + TestReportId string `protobuf:"bytes,1,opt,name=test_report_id,json=testReportId,proto3" json:"test_report_id,omitempty"` + // The status of the test run + Status TestStatus `protobuf:"varint,2,opt,name=status,proto3,enum=sift.test_reports.v1.TestStatus" json:"status,omitempty"` + // The name of the test run + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + // The name of the test system + TestSystemName string `protobuf:"bytes,4,opt,name=test_system_name,json=testSystemName,proto3" json:"test_system_name,omitempty"` + // The test case that was run + TestCase string `protobuf:"bytes,5,opt,name=test_case,json=testCase,proto3" json:"test_case,omitempty"` + // The start time of the test run + StartTime *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"` + // The end time of the test run + EndTime *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"` + // The metadata values associated with this test run + Metadata []*v1.MetadataValue `protobuf:"bytes,8,rep,name=metadata,proto3" json:"metadata,omitempty"` + // The serial number for the DUT + SerialNumber string `protobuf:"bytes,9,opt,name=serial_number,json=serialNumber,proto3" json:"serial_number,omitempty"` + // The part number for the DUT + PartNumber string `protobuf:"bytes,10,opt,name=part_number,json=partNumber,proto3" json:"part_number,omitempty"` + // Unique identifier for user owner + SystemOperator string `protobuf:"bytes,11,opt,name=system_operator,json=systemOperator,proto3" json:"system_operator,omitempty"` + // The date and time the test run was archived (internal) + ArchivedDate *timestamppb.Timestamp `protobuf:"bytes,12,opt,name=archived_date,json=archivedDate,proto3" json:"archived_date,omitempty"` + // Whether the test run is archived (externally exposed) + IsArchived bool `protobuf:"varint,13,opt,name=is_archived,json=isArchived,proto3" json:"is_archived,omitempty"` +} + +func (x *TestReport) Reset() { + *x = TestReport{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TestReport) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TestReport) ProtoMessage() {} + +func (x *TestReport) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TestReport.ProtoReflect.Descriptor instead. +func (*TestReport) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{0} +} + +func (x *TestReport) GetTestReportId() string { + if x != nil { + return x.TestReportId + } + return "" +} + +func (x *TestReport) GetStatus() TestStatus { + if x != nil { + return x.Status + } + return TestStatus_TEST_STATUS_UNSPECIFIED +} + +func (x *TestReport) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *TestReport) GetTestSystemName() string { + if x != nil { + return x.TestSystemName + } + return "" +} + +func (x *TestReport) GetTestCase() string { + if x != nil { + return x.TestCase + } + return "" +} + +func (x *TestReport) GetStartTime() *timestamppb.Timestamp { + if x != nil { + return x.StartTime + } + return nil +} + +func (x *TestReport) GetEndTime() *timestamppb.Timestamp { + if x != nil { + return x.EndTime + } + return nil +} + +func (x *TestReport) GetMetadata() []*v1.MetadataValue { + if x != nil { + return x.Metadata + } + return nil +} + +func (x *TestReport) GetSerialNumber() string { + if x != nil { + return x.SerialNumber + } + return "" +} + +func (x *TestReport) GetPartNumber() string { + if x != nil { + return x.PartNumber + } + return "" +} + +func (x *TestReport) GetSystemOperator() string { + if x != nil { + return x.SystemOperator + } + return "" +} + +func (x *TestReport) GetArchivedDate() *timestamppb.Timestamp { + if x != nil { + return x.ArchivedDate + } + return nil +} + +func (x *TestReport) GetIsArchived() bool { + if x != nil { + return x.IsArchived + } + return false +} + +type TestStep struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // unique identifier for the step + TestStepId string `protobuf:"bytes,1,opt,name=test_step_id,json=testStepId,proto3" json:"test_step_id,omitempty"` + // pointer to overall test run + TestReportId string `protobuf:"bytes,2,opt,name=test_report_id,json=testReportId,proto3" json:"test_report_id,omitempty"` + // pointer to parent step, if any + ParentStepId string `protobuf:"bytes,3,opt,name=parent_step_id,json=parentStepId,proto3" json:"parent_step_id,omitempty"` + // Name of the test step for display + Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` + // Description of the test step from test controller + Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"` + // Semantic type of the test step + StepType TestStepType `protobuf:"varint,6,opt,name=step_type,json=stepType,proto3,enum=sift.test_reports.v1.TestStepType" json:"step_type,omitempty"` + // Hierarchical path (e.g., "1", "1.1", "1.2.3") + StepPath string `protobuf:"bytes,7,opt,name=step_path,json=stepPath,proto3" json:"step_path,omitempty"` + // Status of the test step + Status TestStatus `protobuf:"varint,8,opt,name=status,proto3,enum=sift.test_reports.v1.TestStatus" json:"status,omitempty"` + // Start time of the test step + StartTime *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"` + // End time of the test step + EndTime *timestamppb.Timestamp `protobuf:"bytes,10,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"` + // Error information of the test step + ErrorInfo *ErrorInfo `protobuf:"bytes,11,opt,name=error_info,json=errorInfo,proto3" json:"error_info,omitempty"` +} + +func (x *TestStep) Reset() { + *x = TestStep{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TestStep) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TestStep) ProtoMessage() {} + +func (x *TestStep) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TestStep.ProtoReflect.Descriptor instead. +func (*TestStep) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{1} +} + +func (x *TestStep) GetTestStepId() string { + if x != nil { + return x.TestStepId + } + return "" +} + +func (x *TestStep) GetTestReportId() string { + if x != nil { + return x.TestReportId + } + return "" +} + +func (x *TestStep) GetParentStepId() string { + if x != nil { + return x.ParentStepId + } + return "" +} + +func (x *TestStep) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *TestStep) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *TestStep) GetStepType() TestStepType { + if x != nil { + return x.StepType + } + return TestStepType_TEST_STEP_TYPE_UNSPECIFIED +} + +func (x *TestStep) GetStepPath() string { + if x != nil { + return x.StepPath + } + return "" +} + +func (x *TestStep) GetStatus() TestStatus { + if x != nil { + return x.Status + } + return TestStatus_TEST_STATUS_UNSPECIFIED +} + +func (x *TestStep) GetStartTime() *timestamppb.Timestamp { + if x != nil { + return x.StartTime + } + return nil +} + +func (x *TestStep) GetEndTime() *timestamppb.Timestamp { + if x != nil { + return x.EndTime + } + return nil +} + +func (x *TestStep) GetErrorInfo() *ErrorInfo { + if x != nil { + return x.ErrorInfo + } + return nil +} + +type ErrorInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ErrorCode int32 `protobuf:"varint,1,opt,name=error_code,json=errorCode,proto3" json:"error_code,omitempty"` + ErrorMessage string `protobuf:"bytes,2,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"` +} + +func (x *ErrorInfo) Reset() { + *x = ErrorInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ErrorInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ErrorInfo) ProtoMessage() {} + +func (x *ErrorInfo) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ErrorInfo.ProtoReflect.Descriptor instead. +func (*ErrorInfo) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{2} +} + +func (x *ErrorInfo) GetErrorCode() int32 { + if x != nil { + return x.ErrorCode + } + return 0 +} + +func (x *ErrorInfo) GetErrorMessage() string { + if x != nil { + return x.ErrorMessage + } + return "" +} + +type TestMeasurement struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MeasurementId string `protobuf:"bytes,1,opt,name=measurement_id,json=measurementId,proto3" json:"measurement_id,omitempty"` + MeasurementType TestMeasurementType `protobuf:"varint,2,opt,name=measurement_type,json=measurementType,proto3,enum=sift.test_reports.v1.TestMeasurementType" json:"measurement_type,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + TestStepId string `protobuf:"bytes,4,opt,name=test_step_id,json=testStepId,proto3" json:"test_step_id,omitempty"` + TestReportId string `protobuf:"bytes,5,opt,name=test_report_id,json=testReportId,proto3" json:"test_report_id,omitempty"` + // Types that are assignable to Value: + // + // *TestMeasurement_NumericValue + // *TestMeasurement_StringValue + // *TestMeasurement_BooleanValue + Value isTestMeasurement_Value `protobuf_oneof:"value"` + Unit *v2.Unit `protobuf:"bytes,9,opt,name=unit,proto3" json:"unit,omitempty"` + // Types that are assignable to Bounds: + // + // *TestMeasurement_NumericBounds + // *TestMeasurement_StringBounds + Bounds isTestMeasurement_Bounds `protobuf_oneof:"bounds"` + Passed bool `protobuf:"varint,12,opt,name=passed,proto3" json:"passed,omitempty"` + Timestamp *timestamppb.Timestamp `protobuf:"bytes,13,opt,name=timestamp,proto3" json:"timestamp,omitempty"` +} + +func (x *TestMeasurement) Reset() { + *x = TestMeasurement{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TestMeasurement) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TestMeasurement) ProtoMessage() {} + +func (x *TestMeasurement) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TestMeasurement.ProtoReflect.Descriptor instead. +func (*TestMeasurement) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{3} +} + +func (x *TestMeasurement) GetMeasurementId() string { + if x != nil { + return x.MeasurementId + } + return "" +} + +func (x *TestMeasurement) GetMeasurementType() TestMeasurementType { + if x != nil { + return x.MeasurementType + } + return TestMeasurementType_TEST_MEASUREMENT_TYPE_UNSPECIFIED +} + +func (x *TestMeasurement) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *TestMeasurement) GetTestStepId() string { + if x != nil { + return x.TestStepId + } + return "" +} + +func (x *TestMeasurement) GetTestReportId() string { + if x != nil { + return x.TestReportId + } + return "" +} + +func (m *TestMeasurement) GetValue() isTestMeasurement_Value { + if m != nil { + return m.Value + } + return nil +} + +func (x *TestMeasurement) GetNumericValue() float64 { + if x, ok := x.GetValue().(*TestMeasurement_NumericValue); ok { + return x.NumericValue + } + return 0 +} + +func (x *TestMeasurement) GetStringValue() string { + if x, ok := x.GetValue().(*TestMeasurement_StringValue); ok { + return x.StringValue + } + return "" +} + +func (x *TestMeasurement) GetBooleanValue() bool { + if x, ok := x.GetValue().(*TestMeasurement_BooleanValue); ok { + return x.BooleanValue + } + return false +} + +func (x *TestMeasurement) GetUnit() *v2.Unit { + if x != nil { + return x.Unit + } + return nil +} + +func (m *TestMeasurement) GetBounds() isTestMeasurement_Bounds { + if m != nil { + return m.Bounds + } + return nil +} + +func (x *TestMeasurement) GetNumericBounds() *NumericBounds { + if x, ok := x.GetBounds().(*TestMeasurement_NumericBounds); ok { + return x.NumericBounds + } + return nil +} + +func (x *TestMeasurement) GetStringBounds() *StringBounds { + if x, ok := x.GetBounds().(*TestMeasurement_StringBounds); ok { + return x.StringBounds + } + return nil +} + +func (x *TestMeasurement) GetPassed() bool { + if x != nil { + return x.Passed + } + return false +} + +func (x *TestMeasurement) GetTimestamp() *timestamppb.Timestamp { + if x != nil { + return x.Timestamp + } + return nil +} + +type isTestMeasurement_Value interface { + isTestMeasurement_Value() +} + +type TestMeasurement_NumericValue struct { + NumericValue float64 `protobuf:"fixed64,6,opt,name=numeric_value,json=numericValue,proto3,oneof"` +} + +type TestMeasurement_StringValue struct { + StringValue string `protobuf:"bytes,7,opt,name=string_value,json=stringValue,proto3,oneof"` +} + +type TestMeasurement_BooleanValue struct { + BooleanValue bool `protobuf:"varint,8,opt,name=boolean_value,json=booleanValue,proto3,oneof"` +} + +func (*TestMeasurement_NumericValue) isTestMeasurement_Value() {} + +func (*TestMeasurement_StringValue) isTestMeasurement_Value() {} + +func (*TestMeasurement_BooleanValue) isTestMeasurement_Value() {} + +type isTestMeasurement_Bounds interface { + isTestMeasurement_Bounds() +} + +type TestMeasurement_NumericBounds struct { + NumericBounds *NumericBounds `protobuf:"bytes,10,opt,name=numeric_bounds,json=numericBounds,proto3,oneof"` +} + +type TestMeasurement_StringBounds struct { + StringBounds *StringBounds `protobuf:"bytes,11,opt,name=string_bounds,json=stringBounds,proto3,oneof"` +} + +func (*TestMeasurement_NumericBounds) isTestMeasurement_Bounds() {} + +func (*TestMeasurement_StringBounds) isTestMeasurement_Bounds() {} + +type NumericBounds struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Min *float64 `protobuf:"fixed64,1,opt,name=min,proto3,oneof" json:"min,omitempty"` + Max *float64 `protobuf:"fixed64,2,opt,name=max,proto3,oneof" json:"max,omitempty"` +} + +func (x *NumericBounds) Reset() { + *x = NumericBounds{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NumericBounds) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NumericBounds) ProtoMessage() {} + +func (x *NumericBounds) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NumericBounds.ProtoReflect.Descriptor instead. +func (*NumericBounds) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{4} +} + +func (x *NumericBounds) GetMin() float64 { + if x != nil && x.Min != nil { + return *x.Min + } + return 0 +} + +func (x *NumericBounds) GetMax() float64 { + if x != nil && x.Max != nil { + return *x.Max + } + return 0 +} + +type StringBounds struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ExpectedValue string `protobuf:"bytes,1,opt,name=expected_value,json=expectedValue,proto3" json:"expected_value,omitempty"` +} + +func (x *StringBounds) Reset() { + *x = StringBounds{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StringBounds) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StringBounds) ProtoMessage() {} + +func (x *StringBounds) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StringBounds.ProtoReflect.Descriptor instead. +func (*StringBounds) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{5} +} + +func (x *StringBounds) GetExpectedValue() string { + if x != nil { + return x.ExpectedValue + } + return "" +} + +// Request message for ImportTestReport +type ImportTestReportRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The remote file ID containing the XML test data + RemoteFileId string `protobuf:"bytes,1,opt,name=remote_file_id,json=remoteFileId,proto3" json:"remote_file_id,omitempty"` +} + +func (x *ImportTestReportRequest) Reset() { + *x = ImportTestReportRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ImportTestReportRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ImportTestReportRequest) ProtoMessage() {} + +func (x *ImportTestReportRequest) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ImportTestReportRequest.ProtoReflect.Descriptor instead. +func (*ImportTestReportRequest) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{6} +} + +func (x *ImportTestReportRequest) GetRemoteFileId() string { + if x != nil { + return x.RemoteFileId + } + return "" +} + +// Response message for ImportTestReport +type ImportTestReportResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The imported test report + TestReport *TestReport `protobuf:"bytes,1,opt,name=test_report,json=testReport,proto3" json:"test_report,omitempty"` +} + +func (x *ImportTestReportResponse) Reset() { + *x = ImportTestReportResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ImportTestReportResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ImportTestReportResponse) ProtoMessage() {} + +func (x *ImportTestReportResponse) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ImportTestReportResponse.ProtoReflect.Descriptor instead. +func (*ImportTestReportResponse) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{7} +} + +func (x *ImportTestReportResponse) GetTestReport() *TestReport { + if x != nil { + return x.TestReport + } + return nil +} + +// Request message for CreateTestReport +type CreateTestReportRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The status of the test run + Status TestStatus `protobuf:"varint,1,opt,name=status,proto3,enum=sift.test_reports.v1.TestStatus" json:"status,omitempty"` + // The name of the test run + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // The name of the test system + TestSystemName string `protobuf:"bytes,3,opt,name=test_system_name,json=testSystemName,proto3" json:"test_system_name,omitempty"` + // The test case that was run + TestCase string `protobuf:"bytes,4,opt,name=test_case,json=testCase,proto3" json:"test_case,omitempty"` + // The start time of the test run + StartTime *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"` + // The end time of the test run + EndTime *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"` + // The metadata values associated with this test run + Metadata []*v1.MetadataValue `protobuf:"bytes,7,rep,name=metadata,proto3" json:"metadata,omitempty"` + // The serial number for the DUT + SerialNumber string `protobuf:"bytes,8,opt,name=serial_number,json=serialNumber,proto3" json:"serial_number,omitempty"` + // The part number for the DUT + PartNumber string `protobuf:"bytes,9,opt,name=part_number,json=partNumber,proto3" json:"part_number,omitempty"` + // Unique identifier for user owner + SystemOperator string `protobuf:"bytes,10,opt,name=system_operator,json=systemOperator,proto3" json:"system_operator,omitempty"` +} + +func (x *CreateTestReportRequest) Reset() { + *x = CreateTestReportRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateTestReportRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateTestReportRequest) ProtoMessage() {} + +func (x *CreateTestReportRequest) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateTestReportRequest.ProtoReflect.Descriptor instead. +func (*CreateTestReportRequest) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{8} +} + +func (x *CreateTestReportRequest) GetStatus() TestStatus { + if x != nil { + return x.Status + } + return TestStatus_TEST_STATUS_UNSPECIFIED +} + +func (x *CreateTestReportRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *CreateTestReportRequest) GetTestSystemName() string { + if x != nil { + return x.TestSystemName + } + return "" +} + +func (x *CreateTestReportRequest) GetTestCase() string { + if x != nil { + return x.TestCase + } + return "" +} + +func (x *CreateTestReportRequest) GetStartTime() *timestamppb.Timestamp { + if x != nil { + return x.StartTime + } + return nil +} + +func (x *CreateTestReportRequest) GetEndTime() *timestamppb.Timestamp { + if x != nil { + return x.EndTime + } + return nil +} + +func (x *CreateTestReportRequest) GetMetadata() []*v1.MetadataValue { + if x != nil { + return x.Metadata + } + return nil +} + +func (x *CreateTestReportRequest) GetSerialNumber() string { + if x != nil { + return x.SerialNumber + } + return "" +} + +func (x *CreateTestReportRequest) GetPartNumber() string { + if x != nil { + return x.PartNumber + } + return "" +} + +func (x *CreateTestReportRequest) GetSystemOperator() string { + if x != nil { + return x.SystemOperator + } + return "" +} + +// Response message for CreateTestReport +type CreateTestReportResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The created test report + TestReport *TestReport `protobuf:"bytes,1,opt,name=test_report,json=testReport,proto3" json:"test_report,omitempty"` +} + +func (x *CreateTestReportResponse) Reset() { + *x = CreateTestReportResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateTestReportResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateTestReportResponse) ProtoMessage() {} + +func (x *CreateTestReportResponse) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateTestReportResponse.ProtoReflect.Descriptor instead. +func (*CreateTestReportResponse) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{9} +} + +func (x *CreateTestReportResponse) GetTestReport() *TestReport { + if x != nil { + return x.TestReport + } + return nil +} + +// Request message for GetTestReport +type GetTestReportRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID of the test report to get + TestReportId string `protobuf:"bytes,1,opt,name=test_report_id,json=testReportId,proto3" json:"test_report_id,omitempty"` +} + +func (x *GetTestReportRequest) Reset() { + *x = GetTestReportRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetTestReportRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetTestReportRequest) ProtoMessage() {} + +func (x *GetTestReportRequest) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetTestReportRequest.ProtoReflect.Descriptor instead. +func (*GetTestReportRequest) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{10} +} + +func (x *GetTestReportRequest) GetTestReportId() string { + if x != nil { + return x.TestReportId + } + return "" +} + +// Response message for GetTestReport +type GetTestReportResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The test report + TestReport *TestReport `protobuf:"bytes,1,opt,name=test_report,json=testReport,proto3" json:"test_report,omitempty"` +} + +func (x *GetTestReportResponse) Reset() { + *x = GetTestReportResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetTestReportResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetTestReportResponse) ProtoMessage() {} + +func (x *GetTestReportResponse) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetTestReportResponse.ProtoReflect.Descriptor instead. +func (*GetTestReportResponse) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{11} +} + +func (x *GetTestReportResponse) GetTestReport() *TestReport { + if x != nil { + return x.TestReport + } + return nil +} + +// Request message for ListTestReports +type ListTestReportsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The maximum number of test reports to return. + // The service may return fewer than this value. + // If unspecified, at most 50 test reports will be returned. + // The maximum value is 1000; values above 1000 will be coerced to 1000. + PageSize uint32 `protobuf:"varint,1,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + // A page token, received from a previous `ListTestReports` call. + // Provide this to retrieve the subsequent page. + // When paginating, all other parameters provided to `ListTestReports` must match + // the call that provided the page token. + PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` + // A [Common Expression Language (CEL)](https://github.com/google/cel-spec) filter string. + // Available fields to filter by are `test_report_id`, `status`, `name`, `test_system_name`, + // `test_case`, `start_time`, `end_time`, `serial_number`, `created_by_user_id`, `modified_by_user_id`, + // `part_number`, `system_operator`, `archived_date`, and `metadata`. + // Metadata can be used in filters by using `metadata.{metadata_key_name}` as the field name. + // For further information about how to use CELs, please refer to [this guide](https://github.com/google/cel-spec/blob/master/doc/langdef.md#standard-definitions). + // For more information about the fields used for filtering, please refer to [this definition](/docs/api/grpc/protocol-buffers/test-results#testreport). Optional. + Filter string `protobuf:"bytes,3,opt,name=filter,proto3" json:"filter,omitempty"` + // How to order the retrieved test reports. Formatted as a comma-separated string i.e. "FIELD_NAME[ desc],...". + // Available fields to order_by are `test_report_id`, `name`, `test_system_name`, `test_case`, `start_time`, `end_time`, + // `created_date`, and `modified_date`. + // If left empty, items are ordered by `start_time` in descending order (newest-first). + // For more information about the format of this field, read [this](https://google.aip.dev/132#ordering) + // Example: "start_time desc,name" + OrderBy string `protobuf:"bytes,4,opt,name=order_by,json=orderBy,proto3" json:"order_by,omitempty"` +} + +func (x *ListTestReportsRequest) Reset() { + *x = ListTestReportsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListTestReportsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListTestReportsRequest) ProtoMessage() {} + +func (x *ListTestReportsRequest) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListTestReportsRequest.ProtoReflect.Descriptor instead. +func (*ListTestReportsRequest) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{12} +} + +func (x *ListTestReportsRequest) GetPageSize() uint32 { + if x != nil { + return x.PageSize + } + return 0 +} + +func (x *ListTestReportsRequest) GetPageToken() string { + if x != nil { + return x.PageToken + } + return "" +} + +func (x *ListTestReportsRequest) GetFilter() string { + if x != nil { + return x.Filter + } + return "" +} + +func (x *ListTestReportsRequest) GetOrderBy() string { + if x != nil { + return x.OrderBy + } + return "" +} + +// Response message for ListTestReports +type ListTestReportsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The list of test reports + TestReports []*TestReport `protobuf:"bytes,1,rep,name=test_reports,json=testReports,proto3" json:"test_reports,omitempty"` + // The next page token for pagination + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` +} + +func (x *ListTestReportsResponse) Reset() { + *x = ListTestReportsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListTestReportsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListTestReportsResponse) ProtoMessage() {} + +func (x *ListTestReportsResponse) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListTestReportsResponse.ProtoReflect.Descriptor instead. +func (*ListTestReportsResponse) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{13} +} + +func (x *ListTestReportsResponse) GetTestReports() []*TestReport { + if x != nil { + return x.TestReports + } + return nil +} + +func (x *ListTestReportsResponse) GetNextPageToken() string { + if x != nil { + return x.NextPageToken + } + return "" +} + +// Request message for UpdateTestReport +type UpdateTestReportRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The test report to update + TestReport *TestReport `protobuf:"bytes,1,opt,name=test_report,json=testReport,proto3" json:"test_report,omitempty"` + // The field mask specifying which fields to update. The fields available to be updated are + // `status`, `name`, `test_system_name`, `test_case`, `start_time`, `end_time`, `serial_number`, + // `part_number`, `system_operator`, and `is_archived`. + UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` +} + +func (x *UpdateTestReportRequest) Reset() { + *x = UpdateTestReportRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateTestReportRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateTestReportRequest) ProtoMessage() {} + +func (x *UpdateTestReportRequest) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateTestReportRequest.ProtoReflect.Descriptor instead. +func (*UpdateTestReportRequest) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{14} +} + +func (x *UpdateTestReportRequest) GetTestReport() *TestReport { + if x != nil { + return x.TestReport + } + return nil +} + +func (x *UpdateTestReportRequest) GetUpdateMask() *fieldmaskpb.FieldMask { + if x != nil { + return x.UpdateMask + } + return nil +} + +// Response message for UpdateTestReport +type UpdateTestReportResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The updated test report + TestReport *TestReport `protobuf:"bytes,1,opt,name=test_report,json=testReport,proto3" json:"test_report,omitempty"` +} + +func (x *UpdateTestReportResponse) Reset() { + *x = UpdateTestReportResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateTestReportResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateTestReportResponse) ProtoMessage() {} + +func (x *UpdateTestReportResponse) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateTestReportResponse.ProtoReflect.Descriptor instead. +func (*UpdateTestReportResponse) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{15} +} + +func (x *UpdateTestReportResponse) GetTestReport() *TestReport { + if x != nil { + return x.TestReport + } + return nil +} + +// Request message for DeleteTestReport +type DeleteTestReportRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID of the test report to delete + TestReportId string `protobuf:"bytes,1,opt,name=test_report_id,json=testReportId,proto3" json:"test_report_id,omitempty"` +} + +func (x *DeleteTestReportRequest) Reset() { + *x = DeleteTestReportRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteTestReportRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteTestReportRequest) ProtoMessage() {} + +func (x *DeleteTestReportRequest) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteTestReportRequest.ProtoReflect.Descriptor instead. +func (*DeleteTestReportRequest) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{16} +} + +func (x *DeleteTestReportRequest) GetTestReportId() string { + if x != nil { + return x.TestReportId + } + return "" +} + +// Response message for DeleteTestReport +type DeleteTestReportResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *DeleteTestReportResponse) Reset() { + *x = DeleteTestReportResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteTestReportResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteTestReportResponse) ProtoMessage() {} + +func (x *DeleteTestReportResponse) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteTestReportResponse.ProtoReflect.Descriptor instead. +func (*DeleteTestReportResponse) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{17} +} + +// Request message for CreateTestStep +type CreateTestStepRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The test step to create + TestStep *TestStep `protobuf:"bytes,1,opt,name=test_step,json=testStep,proto3" json:"test_step,omitempty"` +} + +func (x *CreateTestStepRequest) Reset() { + *x = CreateTestStepRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateTestStepRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateTestStepRequest) ProtoMessage() {} + +func (x *CreateTestStepRequest) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateTestStepRequest.ProtoReflect.Descriptor instead. +func (*CreateTestStepRequest) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{18} +} + +func (x *CreateTestStepRequest) GetTestStep() *TestStep { + if x != nil { + return x.TestStep + } + return nil +} + +// Response message for CreateTestStep +type CreateTestStepResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The created test step + TestStep *TestStep `protobuf:"bytes,1,opt,name=test_step,json=testStep,proto3" json:"test_step,omitempty"` +} + +func (x *CreateTestStepResponse) Reset() { + *x = CreateTestStepResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateTestStepResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateTestStepResponse) ProtoMessage() {} + +func (x *CreateTestStepResponse) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateTestStepResponse.ProtoReflect.Descriptor instead. +func (*CreateTestStepResponse) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{19} +} + +func (x *CreateTestStepResponse) GetTestStep() *TestStep { + if x != nil { + return x.TestStep + } + return nil +} + +// Request message for ListTestSteps +type ListTestStepsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The maximum number of test steps to return. + // The service may return fewer than this value. + // If unspecified, at most 50 test steps will be returned. + // The maximum value is 1000; values above 1000 will be coerced to 1000. + PageSize uint32 `protobuf:"varint,1,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + // A page token, received from a previous `ListTestSteps` call. + // Provide this to retrieve the subsequent page. + // When paginating, all other parameters provided to `ListTestSteps` must match + // the call that provided the page token. + PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` + // A [Common Expression Language (CEL)](https://github.com/google/cel-spec) filter string. + // Available fields to filter by are `test_step_id`, `test_report_id`, `parent_step_id`, `name`, + // `description`, `step_type`, `step_path`, `status`, `start_time`, `end_time`, + // `error_code`, `error_message`, `created_date`, and `modified_date`. + // For further information about how to use CELs, please refer to [this guide](https://github.com/google/cel-spec/blob/master/doc/langdef.md#standard-definitions). + // For more information about the fields used for filtering, please refer to [this definition](/docs/api/grpc/protocol-buffers/test-results#teststep). Optional. + Filter string `protobuf:"bytes,3,opt,name=filter,proto3" json:"filter,omitempty"` + // How to order the retrieved test steps. Formatted as a comma-separated string i.e. "FIELD_NAME[ desc],...". + // Available fields to order_by are `test_step_id`, `name`, `step_type`, `step_path`, `status`, + // `start_time`, `end_time`, `created_date`, and `modified_date`. + // If left empty, items are ordered by `step_path` in ascending order. + // For more information about the format of this field, read [this](https://google.aip.dev/132#ordering) + // Example: "step_path asc,start_time desc" + OrderBy string `protobuf:"bytes,4,opt,name=order_by,json=orderBy,proto3" json:"order_by,omitempty"` +} + +func (x *ListTestStepsRequest) Reset() { + *x = ListTestStepsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListTestStepsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListTestStepsRequest) ProtoMessage() {} + +func (x *ListTestStepsRequest) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListTestStepsRequest.ProtoReflect.Descriptor instead. +func (*ListTestStepsRequest) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{20} +} + +func (x *ListTestStepsRequest) GetPageSize() uint32 { + if x != nil { + return x.PageSize + } + return 0 +} + +func (x *ListTestStepsRequest) GetPageToken() string { + if x != nil { + return x.PageToken + } + return "" +} + +func (x *ListTestStepsRequest) GetFilter() string { + if x != nil { + return x.Filter + } + return "" +} + +func (x *ListTestStepsRequest) GetOrderBy() string { + if x != nil { + return x.OrderBy + } + return "" +} + +// Response message for ListTestSteps +type ListTestStepsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The list of test steps + TestSteps []*TestStep `protobuf:"bytes,1,rep,name=test_steps,json=testSteps,proto3" json:"test_steps,omitempty"` + // The next page token for pagination + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` +} + +func (x *ListTestStepsResponse) Reset() { + *x = ListTestStepsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListTestStepsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListTestStepsResponse) ProtoMessage() {} + +func (x *ListTestStepsResponse) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListTestStepsResponse.ProtoReflect.Descriptor instead. +func (*ListTestStepsResponse) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{21} +} + +func (x *ListTestStepsResponse) GetTestSteps() []*TestStep { + if x != nil { + return x.TestSteps + } + return nil +} + +func (x *ListTestStepsResponse) GetNextPageToken() string { + if x != nil { + return x.NextPageToken + } + return "" +} + +// Request message for UpdateTestStep +type UpdateTestStepRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The test step to update + TestStep *TestStep `protobuf:"bytes,1,opt,name=test_step,json=testStep,proto3" json:"test_step,omitempty"` + // The field mask specifying which fields to update. The fields available to be updated are + // `name`, `description`, `step_type`, `step_path`, `test_case`, `status`, + // `start_time`, `end_time`, and `error_info`. + UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` +} + +func (x *UpdateTestStepRequest) Reset() { + *x = UpdateTestStepRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateTestStepRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateTestStepRequest) ProtoMessage() {} + +func (x *UpdateTestStepRequest) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateTestStepRequest.ProtoReflect.Descriptor instead. +func (*UpdateTestStepRequest) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{22} +} + +func (x *UpdateTestStepRequest) GetTestStep() *TestStep { + if x != nil { + return x.TestStep + } + return nil +} + +func (x *UpdateTestStepRequest) GetUpdateMask() *fieldmaskpb.FieldMask { + if x != nil { + return x.UpdateMask + } + return nil +} + +// Response message for UpdateTestStep +type UpdateTestStepResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The updated test step + TestStep *TestStep `protobuf:"bytes,1,opt,name=test_step,json=testStep,proto3" json:"test_step,omitempty"` +} + +func (x *UpdateTestStepResponse) Reset() { + *x = UpdateTestStepResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateTestStepResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateTestStepResponse) ProtoMessage() {} + +func (x *UpdateTestStepResponse) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateTestStepResponse.ProtoReflect.Descriptor instead. +func (*UpdateTestStepResponse) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{23} +} + +func (x *UpdateTestStepResponse) GetTestStep() *TestStep { + if x != nil { + return x.TestStep + } + return nil +} + +// Request message for DeleteTestStep +type DeleteTestStepRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID of the test step to delete + TestStepId string `protobuf:"bytes,1,opt,name=test_step_id,json=testStepId,proto3" json:"test_step_id,omitempty"` +} + +func (x *DeleteTestStepRequest) Reset() { + *x = DeleteTestStepRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteTestStepRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteTestStepRequest) ProtoMessage() {} + +func (x *DeleteTestStepRequest) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[24] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteTestStepRequest.ProtoReflect.Descriptor instead. +func (*DeleteTestStepRequest) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{24} +} + +func (x *DeleteTestStepRequest) GetTestStepId() string { + if x != nil { + return x.TestStepId + } + return "" +} + +// Response message for DeleteTestStep +type DeleteTestStepResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *DeleteTestStepResponse) Reset() { + *x = DeleteTestStepResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteTestStepResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteTestStepResponse) ProtoMessage() {} + +func (x *DeleteTestStepResponse) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[25] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteTestStepResponse.ProtoReflect.Descriptor instead. +func (*DeleteTestStepResponse) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{25} +} + +// Request message for CreateTestMeasurement +type CreateTestMeasurementRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The test measurement to create + TestMeasurement *TestMeasurement `protobuf:"bytes,1,opt,name=test_measurement,json=testMeasurement,proto3" json:"test_measurement,omitempty"` +} + +func (x *CreateTestMeasurementRequest) Reset() { + *x = CreateTestMeasurementRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateTestMeasurementRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateTestMeasurementRequest) ProtoMessage() {} + +func (x *CreateTestMeasurementRequest) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[26] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateTestMeasurementRequest.ProtoReflect.Descriptor instead. +func (*CreateTestMeasurementRequest) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{26} +} + +func (x *CreateTestMeasurementRequest) GetTestMeasurement() *TestMeasurement { + if x != nil { + return x.TestMeasurement + } + return nil +} + +// Response message for CreateTestMeasurement +type CreateTestMeasurementResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The created test measurement + TestMeasurement *TestMeasurement `protobuf:"bytes,1,opt,name=test_measurement,json=testMeasurement,proto3" json:"test_measurement,omitempty"` +} + +func (x *CreateTestMeasurementResponse) Reset() { + *x = CreateTestMeasurementResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateTestMeasurementResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateTestMeasurementResponse) ProtoMessage() {} + +func (x *CreateTestMeasurementResponse) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[27] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateTestMeasurementResponse.ProtoReflect.Descriptor instead. +func (*CreateTestMeasurementResponse) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{27} +} + +func (x *CreateTestMeasurementResponse) GetTestMeasurement() *TestMeasurement { + if x != nil { + return x.TestMeasurement + } + return nil +} + +// Request message for CreateTestMeasurements +type CreateTestMeasurementsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The test measurements to create + TestMeasurements []*TestMeasurement `protobuf:"bytes,1,rep,name=test_measurements,json=testMeasurements,proto3" json:"test_measurements,omitempty"` +} + +func (x *CreateTestMeasurementsRequest) Reset() { + *x = CreateTestMeasurementsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateTestMeasurementsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateTestMeasurementsRequest) ProtoMessage() {} + +func (x *CreateTestMeasurementsRequest) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[28] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateTestMeasurementsRequest.ProtoReflect.Descriptor instead. +func (*CreateTestMeasurementsRequest) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{28} +} + +func (x *CreateTestMeasurementsRequest) GetTestMeasurements() []*TestMeasurement { + if x != nil { + return x.TestMeasurements + } + return nil +} + +// Response message for CreateTestMeasurements +type CreateTestMeasurementsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The number of test measurements successfully created + MeasurementsCreatedCount int32 `protobuf:"varint,1,opt,name=measurements_created_count,json=measurementsCreatedCount,proto3" json:"measurements_created_count,omitempty"` + // The IDs of the created test measurements + MeasurementIds []string `protobuf:"bytes,2,rep,name=measurement_ids,json=measurementIds,proto3" json:"measurement_ids,omitempty"` +} + +func (x *CreateTestMeasurementsResponse) Reset() { + *x = CreateTestMeasurementsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateTestMeasurementsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateTestMeasurementsResponse) ProtoMessage() {} + +func (x *CreateTestMeasurementsResponse) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[29] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateTestMeasurementsResponse.ProtoReflect.Descriptor instead. +func (*CreateTestMeasurementsResponse) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{29} +} + +func (x *CreateTestMeasurementsResponse) GetMeasurementsCreatedCount() int32 { + if x != nil { + return x.MeasurementsCreatedCount + } + return 0 +} + +func (x *CreateTestMeasurementsResponse) GetMeasurementIds() []string { + if x != nil { + return x.MeasurementIds + } + return nil +} + +// Request message for ListTestMeasurements +type ListTestMeasurementsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The maximum number of test measurements to return. + // The service may return fewer than this value. + // If unspecified, at most 50 test measurements will be returned. + // The maximum value is 1000; values above 1000 will be coerced to 1000. + PageSize uint32 `protobuf:"varint,1,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + // A page token, received from a previous `ListTestMeasurements` call. + // Provide this to retrieve the subsequent page. + // When paginating, all other parameters provided to `ListTestMeasurements` must match + // the call that provided the page token. + PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` + // A [Common Expression Language (CEL)](https://github.com/google/cel-spec) filter string. + // Available fields to filter by are `measurement_id`, `measurement_type`, `name`, `test_step_id`, + // `test_report_id`, `numeric_value`, `string_value`, `boolean_value`, `passed`, `timestamp`, + // `created_date`, and `modified_date`. + // For further information about how to use CELs, please refer to [this guide](https://github.com/google/cel-spec/blob/master/doc/langdef.md#standard-definitions). + // For more information about the fields used for filtering, please refer to [this definition](/docs/api/grpc/protocol-buffers/test-results#testmeasurement). Optional. + Filter string `protobuf:"bytes,3,opt,name=filter,proto3" json:"filter,omitempty"` + // How to order the retrieved test measurements. Formatted as a comma-separated string i.e. "FIELD_NAME[ desc],...". + // Available fields to order_by are `measurement_id`, `name`, `measurement_type`, `test_step_id`, `test_report_id`, + // `passed`, `timestamp`, `created_date`, and `modified_date`. + // If left empty, items are ordered by `timestamp` in ascending order. + // For more information about the format of this field, read [this](https://google.aip.dev/132#ordering) + // Example: "timestamp asc,name" + OrderBy string `protobuf:"bytes,4,opt,name=order_by,json=orderBy,proto3" json:"order_by,omitempty"` +} + +func (x *ListTestMeasurementsRequest) Reset() { + *x = ListTestMeasurementsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListTestMeasurementsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListTestMeasurementsRequest) ProtoMessage() {} + +func (x *ListTestMeasurementsRequest) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[30] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListTestMeasurementsRequest.ProtoReflect.Descriptor instead. +func (*ListTestMeasurementsRequest) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{30} +} + +func (x *ListTestMeasurementsRequest) GetPageSize() uint32 { + if x != nil { + return x.PageSize + } + return 0 +} + +func (x *ListTestMeasurementsRequest) GetPageToken() string { + if x != nil { + return x.PageToken + } + return "" +} + +func (x *ListTestMeasurementsRequest) GetFilter() string { + if x != nil { + return x.Filter + } + return "" +} + +func (x *ListTestMeasurementsRequest) GetOrderBy() string { + if x != nil { + return x.OrderBy + } + return "" +} + +// Response message for ListTestMeasurements +type ListTestMeasurementsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The list of test measurements + TestMeasurements []*TestMeasurement `protobuf:"bytes,1,rep,name=test_measurements,json=testMeasurements,proto3" json:"test_measurements,omitempty"` + // The next page token for pagination + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` +} + +func (x *ListTestMeasurementsResponse) Reset() { + *x = ListTestMeasurementsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListTestMeasurementsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListTestMeasurementsResponse) ProtoMessage() {} + +func (x *ListTestMeasurementsResponse) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[31] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListTestMeasurementsResponse.ProtoReflect.Descriptor instead. +func (*ListTestMeasurementsResponse) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{31} +} + +func (x *ListTestMeasurementsResponse) GetTestMeasurements() []*TestMeasurement { + if x != nil { + return x.TestMeasurements + } + return nil +} + +func (x *ListTestMeasurementsResponse) GetNextPageToken() string { + if x != nil { + return x.NextPageToken + } + return "" +} + +// Request message for CountTestSteps +type CountTestStepsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // A [Common Expression Language (CEL)](https://github.com/google/cel-spec) filter string. + // Available fields to filter by are `test_step_id`, `test_report_id`, `parent_step_id`, `name`, + // `description`, `step_type`, `step_path`, `status`, `start_time`, `end_time`, + // `error_code`, `error_message`, `created_date`, and `modified_date`. + // For further information about how to use CELs, please refer to [this guide](https://github.com/google/cel-spec/blob/master/doc/langdef.md#standard-definitions). + // For more information about the fields used for filtering, please refer to [this definition](/docs/api/grpc/protocol-buffers/test-results#teststep). Optional. + Filter string `protobuf:"bytes,1,opt,name=filter,proto3" json:"filter,omitempty"` +} + +func (x *CountTestStepsRequest) Reset() { + *x = CountTestStepsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CountTestStepsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CountTestStepsRequest) ProtoMessage() {} + +func (x *CountTestStepsRequest) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[32] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CountTestStepsRequest.ProtoReflect.Descriptor instead. +func (*CountTestStepsRequest) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{32} +} + +func (x *CountTestStepsRequest) GetFilter() string { + if x != nil { + return x.Filter + } + return "" +} + +// Response message for CountTestSteps +type CountTestStepsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The total count of test steps matching the filter + Count int64 `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"` +} + +func (x *CountTestStepsResponse) Reset() { + *x = CountTestStepsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CountTestStepsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CountTestStepsResponse) ProtoMessage() {} + +func (x *CountTestStepsResponse) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[33] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CountTestStepsResponse.ProtoReflect.Descriptor instead. +func (*CountTestStepsResponse) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{33} +} + +func (x *CountTestStepsResponse) GetCount() int64 { + if x != nil { + return x.Count + } + return 0 +} + +// Request message for CountTestMeasurements +type CountTestMeasurementsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // A [Common Expression Language (CEL)](https://github.com/google/cel-spec) filter string. + // Available fields to filter by are `measurement_id`, `measurement_type`, `name`, `test_step_id`, + // `test_report_id`, `numeric_value`, `string_value`, `boolean_value`, `passed`, `timestamp`, + // `created_date`, and `modified_date`. + // For further information about how to use CELs, please refer to [this guide](https://github.com/google/cel-spec/blob/master/doc/langdef.md#standard-definitions). + // For more information about the fields used for filtering, please refer to [this definition](/docs/api/grpc/protocol-buffers/test-results#testmeasurement). Optional. + Filter string `protobuf:"bytes,1,opt,name=filter,proto3" json:"filter,omitempty"` +} + +func (x *CountTestMeasurementsRequest) Reset() { + *x = CountTestMeasurementsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CountTestMeasurementsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CountTestMeasurementsRequest) ProtoMessage() {} + +func (x *CountTestMeasurementsRequest) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[34] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CountTestMeasurementsRequest.ProtoReflect.Descriptor instead. +func (*CountTestMeasurementsRequest) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{34} +} + +func (x *CountTestMeasurementsRequest) GetFilter() string { + if x != nil { + return x.Filter + } + return "" +} + +// Response message for CountTestMeasurements +type CountTestMeasurementsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The total count of test measurements matching the filter + Count int64 `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"` +} + +func (x *CountTestMeasurementsResponse) Reset() { + *x = CountTestMeasurementsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CountTestMeasurementsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CountTestMeasurementsResponse) ProtoMessage() {} + +func (x *CountTestMeasurementsResponse) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[35] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CountTestMeasurementsResponse.ProtoReflect.Descriptor instead. +func (*CountTestMeasurementsResponse) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{35} +} + +func (x *CountTestMeasurementsResponse) GetCount() int64 { + if x != nil { + return x.Count + } + return 0 +} + +// Request message for UpdateTestMeasurement +type UpdateTestMeasurementRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The test measurement to update + TestMeasurement *TestMeasurement `protobuf:"bytes,1,opt,name=test_measurement,json=testMeasurement,proto3" json:"test_measurement,omitempty"` + // The field mask specifying which fields to update. The fields available to be updated are + // `name`, `measurement_type`, `numeric_value`, `string_value`, `boolean_value`, `unit`, `numeric_bounds`, + // `string_bounds`, `passed`, and `timestamp`. + UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` +} + +func (x *UpdateTestMeasurementRequest) Reset() { + *x = UpdateTestMeasurementRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateTestMeasurementRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateTestMeasurementRequest) ProtoMessage() {} + +func (x *UpdateTestMeasurementRequest) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[36] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateTestMeasurementRequest.ProtoReflect.Descriptor instead. +func (*UpdateTestMeasurementRequest) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{36} +} + +func (x *UpdateTestMeasurementRequest) GetTestMeasurement() *TestMeasurement { + if x != nil { + return x.TestMeasurement + } + return nil +} + +func (x *UpdateTestMeasurementRequest) GetUpdateMask() *fieldmaskpb.FieldMask { + if x != nil { + return x.UpdateMask + } + return nil +} + +// Response message for UpdateTestMeasurement +type UpdateTestMeasurementResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The updated test measurement + TestMeasurement *TestMeasurement `protobuf:"bytes,1,opt,name=test_measurement,json=testMeasurement,proto3" json:"test_measurement,omitempty"` +} + +func (x *UpdateTestMeasurementResponse) Reset() { + *x = UpdateTestMeasurementResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateTestMeasurementResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateTestMeasurementResponse) ProtoMessage() {} + +func (x *UpdateTestMeasurementResponse) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[37] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateTestMeasurementResponse.ProtoReflect.Descriptor instead. +func (*UpdateTestMeasurementResponse) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{37} +} + +func (x *UpdateTestMeasurementResponse) GetTestMeasurement() *TestMeasurement { + if x != nil { + return x.TestMeasurement + } + return nil +} + +// Request message for DeleteTestMeasurement +type DeleteTestMeasurementRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID of the test measurement to delete + MeasurementId string `protobuf:"bytes,1,opt,name=measurement_id,json=measurementId,proto3" json:"measurement_id,omitempty"` +} + +func (x *DeleteTestMeasurementRequest) Reset() { + *x = DeleteTestMeasurementRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteTestMeasurementRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteTestMeasurementRequest) ProtoMessage() {} + +func (x *DeleteTestMeasurementRequest) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[38] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteTestMeasurementRequest.ProtoReflect.Descriptor instead. +func (*DeleteTestMeasurementRequest) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{38} +} + +func (x *DeleteTestMeasurementRequest) GetMeasurementId() string { + if x != nil { + return x.MeasurementId + } + return "" +} + +// Response message for DeleteTestMeasurement +type DeleteTestMeasurementResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *DeleteTestMeasurementResponse) Reset() { + *x = DeleteTestMeasurementResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteTestMeasurementResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteTestMeasurementResponse) ProtoMessage() {} + +func (x *DeleteTestMeasurementResponse) ProtoReflect() protoreflect.Message { + mi := &file_sift_test_reports_v1_test_reports_proto_msgTypes[39] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteTestMeasurementResponse.ProtoReflect.Descriptor instead. +func (*DeleteTestMeasurementResponse) Descriptor() ([]byte, []int) { + return file_sift_test_reports_v1_test_reports_proto_rawDescGZIP(), []int{39} +} + +var File_sift_test_reports_v1_test_reports_proto protoreflect.FileDescriptor + +var file_sift_test_reports_v1_test_reports_proto_rawDesc = []byte{ + 0x0a, 0x27, 0x73, 0x69, 0x66, 0x74, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x14, 0x73, 0x69, 0x66, 0x74, 0x2e, + 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x1a, + 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, + 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, + 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, + 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x1f, 0x73, 0x69, 0x66, 0x74, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x17, 0x73, 0x69, 0x66, 0x74, 0x2f, 0x75, 0x6e, 0x69, 0x74, 0x2f, 0x76, 0x32, + 0x2f, 0x75, 0x6e, 0x69, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x88, 0x05, 0x0a, 0x0a, + 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x29, 0x0a, 0x0e, 0x74, 0x65, + 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0c, 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, + 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, + 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, + 0x10, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0e, 0x74, 0x65, + 0x73, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x09, + 0x74, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x03, 0xe0, 0x41, 0x02, 0x52, 0x08, 0x74, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x3e, + 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, + 0xe0, 0x41, 0x02, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3a, + 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, + 0x02, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x08, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x73, + 0x69, 0x66, 0x74, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x2e, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x03, 0xe0, + 0x41, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x28, 0x0a, 0x0d, + 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, + 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x5f, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, + 0x52, 0x0a, 0x70, 0x61, 0x72, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x0f, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0e, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x44, 0x0a, 0x0d, 0x61, 0x72, + 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, + 0x41, 0x01, 0x52, 0x0c, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x44, 0x61, 0x74, 0x65, + 0x12, 0x24, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x08, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0a, 0x69, 0x73, 0x41, 0x72, + 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x22, 0xaf, 0x04, 0x0a, 0x08, 0x54, 0x65, 0x73, 0x74, 0x53, + 0x74, 0x65, 0x70, 0x12, 0x25, 0x0a, 0x0c, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x74, 0x65, 0x70, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0a, + 0x74, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x49, 0x64, 0x12, 0x29, 0x0a, 0x0e, 0x74, 0x65, + 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0c, 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x29, 0x0a, 0x0e, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, + 0x73, 0x74, 0x65, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, + 0x41, 0x01, 0x52, 0x0c, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x65, 0x70, 0x49, 0x64, + 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, + 0xe0, 0x41, 0x02, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, + 0xe0, 0x41, 0x01, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x44, 0x0a, 0x09, 0x73, 0x74, 0x65, 0x70, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, + 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, + 0x74, 0x65, 0x70, 0x54, 0x79, 0x70, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x08, 0x73, 0x74, + 0x65, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x09, 0x73, 0x74, 0x65, 0x70, 0x5f, 0x70, + 0x61, 0x74, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x08, + 0x73, 0x74, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, 0x12, 0x3d, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, + 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x09, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, + 0x69, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x69, 0x6e, 0x66, + 0x6f, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, + 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x09, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x59, 0x0a, 0x09, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x22, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, + 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x09, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x28, 0x0a, 0x0d, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0xab, 0x05, 0x0a, 0x0f, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, 0x73, + 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x0e, 0x6d, 0x65, 0x61, 0x73, 0x75, + 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0d, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x49, 0x64, 0x12, 0x59, 0x0a, 0x10, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, + 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0f, 0x6d, + 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x17, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, + 0x02, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0c, 0x74, 0x65, 0x73, 0x74, 0x5f, + 0x73, 0x74, 0x65, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, + 0x41, 0x02, 0x52, 0x0a, 0x74, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x49, 0x64, 0x12, 0x29, + 0x0a, 0x0e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0c, 0x74, 0x65, 0x73, + 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0d, 0x6e, 0x75, 0x6d, + 0x65, 0x72, 0x69, 0x63, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, + 0x48, 0x00, 0x52, 0x0c, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x23, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0d, 0x62, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0c, + 0x62, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2b, 0x0a, 0x04, + 0x75, 0x6e, 0x69, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x69, 0x66, + 0x74, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x42, 0x03, + 0xe0, 0x41, 0x01, 0x52, 0x04, 0x75, 0x6e, 0x69, 0x74, 0x12, 0x4c, 0x0a, 0x0e, 0x6e, 0x75, 0x6d, + 0x65, 0x72, 0x69, 0x63, 0x5f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, + 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x48, 0x01, 0x52, 0x0d, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, + 0x63, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x12, 0x49, 0x0a, 0x0d, 0x73, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x5f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, + 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x6f, 0x75, 0x6e, + 0x64, 0x73, 0x48, 0x01, 0x52, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x6f, 0x75, 0x6e, + 0x64, 0x73, 0x12, 0x1b, 0x0a, 0x06, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x18, 0x0c, 0x20, 0x01, + 0x28, 0x08, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x06, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x12, + 0x3d, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x0d, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, + 0xe0, 0x41, 0x02, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x07, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x08, 0x0a, 0x06, 0x62, 0x6f, 0x75, 0x6e, 0x64, + 0x73, 0x22, 0x57, 0x0a, 0x0d, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x42, 0x6f, 0x75, 0x6e, + 0x64, 0x73, 0x12, 0x1a, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x42, + 0x03, 0xe0, 0x41, 0x01, 0x48, 0x00, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x1a, + 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x42, 0x03, 0xe0, 0x41, 0x01, + 0x48, 0x01, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x6d, + 0x69, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x6d, 0x61, 0x78, 0x22, 0x3a, 0x0a, 0x0c, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x12, 0x2a, 0x0a, 0x0e, 0x65, 0x78, + 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0d, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, + 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x44, 0x0a, 0x17, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, + 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x29, 0x0a, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0c, + 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x22, 0x5d, 0x0a, 0x18, + 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x0b, 0x74, 0x65, 0x73, 0x74, + 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, + 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, + 0x0a, 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x22, 0xfe, 0x03, 0x0a, 0x17, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, + 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, + 0x65, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x2d, 0x0a, 0x10, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0e, + 0x74, 0x65, 0x73, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, + 0x0a, 0x09, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x08, 0x74, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, + 0x12, 0x3e, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, + 0x12, 0x3a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, + 0xe0, 0x41, 0x02, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, + 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, + 0x03, 0xe0, 0x41, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x28, + 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x69, + 0x61, 0x6c, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x74, + 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, + 0x41, 0x01, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2c, + 0x0a, 0x0f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, + 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0e, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x5d, 0x0a, 0x18, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x0b, 0x74, 0x65, 0x73, 0x74, + 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, + 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, + 0x0a, 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x41, 0x0a, 0x14, 0x47, + 0x65, 0x74, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x0e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, + 0x52, 0x0c, 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x22, 0x5a, + 0x0a, 0x15, 0x47, 0x65, 0x74, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x0b, 0x74, 0x65, 0x73, 0x74, 0x5f, + 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, + 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x0a, + 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x9b, 0x01, 0x0a, 0x16, 0x4c, + 0x69, 0x73, 0x74, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, + 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x08, 0x70, + 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x22, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, + 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1b, 0x0a, 0x06, 0x66, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, + 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, + 0x72, 0x5f, 0x62, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, + 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x22, 0x86, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x73, + 0x74, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0c, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x69, 0x66, + 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x0b, 0x74, 0x65, + 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, + 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x22, 0xa3, 0x01, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, + 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, + 0x0b, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0a, 0x74, 0x65, 0x73, 0x74, 0x52, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x40, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, + 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, + 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0a, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x5d, 0x0a, 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x0b, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, + 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x0a, 0x74, 0x65, 0x73, 0x74, + 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x44, 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x29, 0x0a, 0x0e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0c, + 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x22, 0x1a, 0x0a, 0x18, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x59, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x40, 0x0a, 0x09, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, + 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, + 0x53, 0x74, 0x65, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x08, 0x74, 0x65, 0x73, 0x74, 0x53, + 0x74, 0x65, 0x70, 0x22, 0x55, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, + 0x74, 0x53, 0x74, 0x65, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, + 0x09, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1e, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, + 0x52, 0x08, 0x74, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x22, 0x99, 0x01, 0x0a, 0x14, 0x4c, + 0x69, 0x73, 0x74, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x08, 0x70, 0x61, 0x67, + 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x22, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x09, + 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1b, 0x0a, 0x06, 0x66, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x06, + 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, + 0x62, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x07, 0x6f, + 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x22, 0x7e, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, + 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x3d, 0x0a, 0x0a, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, + 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, + 0x74, 0x65, 0x70, 0x52, 0x09, 0x74, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x73, 0x12, 0x26, + 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, + 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x9b, 0x01, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x40, 0x0a, 0x09, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, + 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, + 0x74, 0x65, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x08, 0x74, 0x65, 0x73, 0x74, 0x53, 0x74, + 0x65, 0x70, 0x12, 0x40, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, + 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, + 0x61, 0x73, 0x6b, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x55, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, + 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, + 0x0a, 0x09, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1e, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, + 0x70, 0x52, 0x08, 0x74, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x22, 0x3e, 0x0a, 0x15, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0c, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x74, 0x65, + 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, + 0x0a, 0x74, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x49, 0x64, 0x22, 0x18, 0x0a, 0x16, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x75, 0x0a, 0x1c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x55, 0x0a, 0x10, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6d, 0x65, + 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x25, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, + 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0f, 0x74, 0x65, 0x73, + 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x71, 0x0a, 0x1d, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x50, 0x0a, + 0x10, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, + 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0f, + 0x74, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x22, + 0x78, 0x0a, 0x1d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, + 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x57, 0x0a, 0x11, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, 0x69, + 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x10, 0x74, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, + 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x91, 0x01, 0x0a, 0x1e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x1a, + 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x18, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x2c, 0x0a, 0x0f, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, + 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0e, 0x6d, + 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x73, 0x22, 0xa0, 0x01, + 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, + 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, + 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, + 0x22, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x12, 0x1b, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x12, 0x1e, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, + 0x22, 0x9a, 0x01, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, + 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x52, 0x0a, 0x11, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, + 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x52, 0x10, 0x74, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, + 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x34, 0x0a, + 0x15, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x06, 0x66, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x22, 0x2e, 0x0a, 0x16, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x65, 0x73, 0x74, + 0x53, 0x74, 0x65, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, + 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x22, 0x3b, 0x0a, 0x1c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x65, 0x73, 0x74, + 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x22, 0x35, 0x0a, 0x1d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, + 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xb7, 0x01, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x55, 0x0a, 0x10, 0x74, 0x65, 0x73, 0x74, + 0x5f, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, + 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0f, + 0x74, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, + 0x40, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, + 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, + 0x6b, 0x22, 0x71, 0x0a, 0x1d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x4d, + 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x50, 0x0a, 0x10, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x61, 0x73, 0x75, + 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, + 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x52, 0x0f, 0x74, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x4a, 0x0a, 0x1c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, + 0x73, 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x0e, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, + 0x02, 0x52, 0x0d, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, + 0x22, 0x1f, 0x0a, 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, + 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x2a, 0xd6, 0x01, 0x0a, 0x0a, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x1b, 0x0a, 0x17, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, + 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, 0x0a, + 0x11, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x52, 0x41, + 0x46, 0x54, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x53, 0x54, 0x41, + 0x54, 0x55, 0x53, 0x5f, 0x50, 0x41, 0x53, 0x53, 0x45, 0x44, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, + 0x54, 0x45, 0x53, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x41, 0x49, 0x4c, + 0x45, 0x44, 0x10, 0x03, 0x12, 0x17, 0x0a, 0x13, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x53, 0x54, 0x41, + 0x54, 0x55, 0x53, 0x5f, 0x41, 0x42, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x15, 0x0a, + 0x11, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x52, 0x52, + 0x4f, 0x52, 0x10, 0x05, 0x12, 0x1b, 0x0a, 0x17, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x53, 0x54, 0x41, + 0x54, 0x55, 0x53, 0x5f, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, + 0x06, 0x12, 0x17, 0x0a, 0x13, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, + 0x5f, 0x53, 0x4b, 0x49, 0x50, 0x50, 0x45, 0x44, 0x10, 0x07, 0x2a, 0xa1, 0x01, 0x0a, 0x0c, 0x54, + 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x1a, 0x54, + 0x45, 0x53, 0x54, 0x5f, 0x53, 0x54, 0x45, 0x50, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, + 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x54, + 0x45, 0x53, 0x54, 0x5f, 0x53, 0x54, 0x45, 0x50, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x45, + 0x51, 0x55, 0x45, 0x4e, 0x43, 0x45, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x54, 0x45, 0x53, 0x54, + 0x5f, 0x53, 0x54, 0x45, 0x50, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, + 0x10, 0x02, 0x12, 0x19, 0x0a, 0x15, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x53, 0x54, 0x45, 0x50, 0x5f, + 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x03, 0x12, 0x1f, 0x0a, + 0x1b, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x53, 0x54, 0x45, 0x50, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x10, 0x04, 0x2a, 0xc4, + 0x01, 0x0a, 0x13, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x25, 0x0a, 0x21, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x4d, + 0x45, 0x41, 0x53, 0x55, 0x52, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x20, 0x0a, + 0x1c, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x4d, 0x45, 0x41, 0x53, 0x55, 0x52, 0x45, 0x4d, 0x45, 0x4e, + 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x4f, 0x55, 0x42, 0x4c, 0x45, 0x10, 0x01, 0x12, + 0x20, 0x0a, 0x1c, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x4d, 0x45, 0x41, 0x53, 0x55, 0x52, 0x45, 0x4d, + 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, + 0x03, 0x12, 0x21, 0x0a, 0x1d, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x4d, 0x45, 0x41, 0x53, 0x55, 0x52, + 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x4f, 0x4f, 0x4c, 0x45, + 0x41, 0x4e, 0x10, 0x04, 0x12, 0x1f, 0x0a, 0x1b, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x4d, 0x45, 0x41, + 0x53, 0x55, 0x52, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4c, 0x49, + 0x4d, 0x49, 0x54, 0x10, 0x05, 0x32, 0xd7, 0x1c, 0x0a, 0x11, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xe4, 0x01, 0x0a, 0x10, + 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x12, 0x2d, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x65, + 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2e, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x65, 0x73, + 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x71, 0x92, 0x41, 0x48, 0x12, 0x10, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x65, 0x73, 0x74, + 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x1a, 0x34, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x20, + 0x61, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x66, 0x72, + 0x6f, 0x6d, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x2d, 0x75, 0x70, + 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x20, 0x3a, 0x01, 0x2a, 0x22, 0x1b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, + 0x65, 0x73, 0x74, 0x2d, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x3a, 0x69, 0x6d, 0x70, 0x6f, + 0x72, 0x74, 0x12, 0xbe, 0x01, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, + 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x2d, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, + 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, + 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x92, 0x41, 0x29, 0x12, 0x10, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x1a, 0x15, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x73, 0x20, 0x61, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x72, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x01, 0x2a, 0x22, 0x14, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x2d, 0x72, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x73, 0x12, 0xc4, 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x54, 0x65, 0x73, 0x74, 0x52, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x2a, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, + 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2b, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x73, 0x74, + 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5a, + 0x92, 0x41, 0x2a, 0x12, 0x0d, 0x47, 0x65, 0x74, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x1a, 0x19, 0x47, 0x65, 0x74, 0x73, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, + 0x65, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x27, 0x12, 0x25, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, + 0x74, 0x2d, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x73, 0x74, 0x5f, + 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xcc, 0x01, 0x0a, 0x0f, 0x4c, + 0x69, 0x73, 0x74, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x2c, + 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x73, + 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5c, 0x92, 0x41, 0x3d, + 0x12, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x73, 0x1a, 0x2a, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x72, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, + 0x74, 0x2d, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x12, 0xbe, 0x01, 0x0a, 0x10, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x2d, + 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, + 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, + 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x52, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x92, + 0x41, 0x29, 0x12, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x1a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x20, 0x61, 0x20, + 0x74, 0x65, 0x73, 0x74, 0x20, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x19, 0x3a, 0x01, 0x2a, 0x32, 0x14, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, + 0x73, 0x74, 0x2d, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x12, 0xcc, 0x01, 0x0a, 0x10, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, + 0x2d, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x73, + 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, + 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, + 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x59, + 0x92, 0x41, 0x29, 0x12, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x52, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x1a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x20, 0x61, + 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x27, 0x2a, 0x25, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, + 0x2d, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xb2, 0x01, 0x0a, 0x0e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x12, 0x2b, 0x2e, 0x73, + 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, + 0x65, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x73, 0x69, 0x66, 0x74, + 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x45, 0x92, 0x41, 0x25, 0x12, 0x0e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x1a, 0x13, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x73, 0x20, 0x61, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x73, 0x74, 0x65, + 0x70, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x3a, 0x01, 0x2a, 0x22, 0x12, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x2d, 0x73, 0x74, 0x65, 0x70, 0x73, 0x12, 0xc0, + 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x73, + 0x12, 0x2a, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x73, 0x74, + 0x53, 0x74, 0x65, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x73, + 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x92, 0x41, 0x39, 0x12, 0x0d, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x73, 0x1a, 0x28, 0x4c, + 0x69, 0x73, 0x74, 0x73, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x73, 0x74, 0x65, 0x70, 0x73, 0x20, + 0x77, 0x69, 0x74, 0x68, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x66, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x2d, 0x73, 0x74, 0x65, 0x70, + 0x73, 0x12, 0xb2, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, + 0x53, 0x74, 0x65, 0x70, 0x12, 0x2b, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, + 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2c, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, + 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x45, 0x92, 0x41, 0x25, 0x12, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, + 0x53, 0x74, 0x65, 0x70, 0x1a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x20, 0x61, 0x20, + 0x74, 0x65, 0x73, 0x74, 0x20, 0x73, 0x74, 0x65, 0x70, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x3a, + 0x01, 0x2a, 0x32, 0x12, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, + 0x2d, 0x73, 0x74, 0x65, 0x70, 0x73, 0x12, 0xbe, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x12, 0x2b, 0x2e, 0x73, 0x69, 0x66, 0x74, + 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, + 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x51, 0x92, 0x41, 0x25, 0x12, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x1a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x73, 0x20, 0x61, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x73, 0x74, 0x65, 0x70, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x23, 0x2a, 0x21, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, + 0x73, 0x74, 0x2d, 0x73, 0x74, 0x65, 0x70, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x73, + 0x74, 0x65, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xdc, 0x01, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x12, 0x32, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, + 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5a, 0x92, 0x41, 0x33, 0x12, + 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, + 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x1a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x73, 0x20, + 0x61, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x22, 0x19, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x2d, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x82, 0x02, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x12, 0x33, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, + 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7d, 0x92, 0x41, + 0x50, 0x12, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, + 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0x36, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x73, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x20, 0x74, 0x65, 0x73, 0x74, + 0x20, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x69, 0x6e, + 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x01, 0x2a, 0x22, 0x1f, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x2d, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x3a, 0x62, 0x61, 0x74, 0x63, 0x68, 0x12, 0xea, 0x01, 0x0a, 0x14, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x12, 0x31, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, + 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, + 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6b, 0x92, 0x41, 0x47, + 0x12, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0x2f, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x20, 0x74, 0x65, + 0x73, 0x74, 0x20, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, + 0x77, 0x69, 0x74, 0x68, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x66, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x2d, 0x6d, 0x65, 0x61, 0x73, + 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0xcb, 0x01, 0x0a, 0x0e, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x73, 0x12, 0x2b, 0x2e, 0x73, 0x69, + 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, + 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5e, 0x92, 0x41, 0x3b, 0x12, 0x0e, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x73, 0x1a, 0x29, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x73, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x73, 0x74, 0x65, 0x70, 0x73, 0x20, 0x77, + 0x69, 0x74, 0x68, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x66, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x2d, 0x73, 0x74, 0x65, 0x70, 0x73, + 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0xf5, 0x01, 0x0a, 0x15, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x12, 0x32, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x65, 0x73, + 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, + 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x73, 0x92, 0x41, 0x49, 0x12, 0x15, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0x30, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x20, 0x74, 0x65, + 0x73, 0x74, 0x20, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, + 0x77, 0x69, 0x74, 0x68, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x66, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x12, 0x1f, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x2d, 0x6d, 0x65, 0x61, 0x73, + 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0xdc, + 0x01, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, + 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x32, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, + 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x73, + 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, + 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x5a, 0x92, 0x41, 0x33, 0x12, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, + 0x73, 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x1a, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x20, 0x61, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, + 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, + 0x01, 0x2a, 0x32, 0x19, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, + 0x2d, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0xea, 0x01, + 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, 0x73, + 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x32, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, + 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x73, 0x69, + 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x61, + 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x68, 0x92, 0x41, 0x33, 0x12, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x73, + 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x1a, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x73, 0x20, 0x61, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x61, + 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x2a, 0x2a, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x2d, 0x6d, 0x65, 0x61, + 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x6d, 0x65, 0x61, 0x73, 0x75, + 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x1a, 0x23, 0x92, 0x41, 0x20, 0x12, + 0x1e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x6d, 0x61, 0x6e, 0x61, + 0x67, 0x65, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x42, + 0xfc, 0x01, 0x0a, 0x18, 0x63, 0x6f, 0x6d, 0x2e, 0x73, 0x69, 0x66, 0x74, 0x2e, 0x74, 0x65, 0x73, + 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x42, 0x10, 0x54, 0x65, + 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, + 0x5a, 0x45, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x69, 0x66, + 0x74, 0x2d, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x73, 0x69, 0x66, 0x74, 0x2f, 0x67, 0x6f, 0x2f, + 0x67, 0x65, 0x6e, 0x2f, 0x73, 0x69, 0x66, 0x74, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x73, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x53, 0x54, 0x58, 0xaa, 0x02, 0x13, + 0x53, 0x69, 0x66, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, + 0x2e, 0x56, 0x31, 0xca, 0x02, 0x13, 0x53, 0x69, 0x66, 0x74, 0x5c, 0x54, 0x65, 0x73, 0x74, 0x52, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1f, 0x53, 0x69, 0x66, 0x74, + 0x5c, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5c, 0x56, 0x31, 0x5c, + 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x15, 0x53, 0x69, + 0x66, 0x74, 0x3a, 0x3a, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x3a, + 0x3a, 0x56, 0x31, 0x92, 0x41, 0x18, 0x12, 0x16, 0x0a, 0x14, 0x54, 0x65, 0x73, 0x74, 0x20, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_sift_test_reports_v1_test_reports_proto_rawDescOnce sync.Once + file_sift_test_reports_v1_test_reports_proto_rawDescData = file_sift_test_reports_v1_test_reports_proto_rawDesc +) + +func file_sift_test_reports_v1_test_reports_proto_rawDescGZIP() []byte { + file_sift_test_reports_v1_test_reports_proto_rawDescOnce.Do(func() { + file_sift_test_reports_v1_test_reports_proto_rawDescData = protoimpl.X.CompressGZIP(file_sift_test_reports_v1_test_reports_proto_rawDescData) + }) + return file_sift_test_reports_v1_test_reports_proto_rawDescData +} + +var file_sift_test_reports_v1_test_reports_proto_enumTypes = make([]protoimpl.EnumInfo, 3) +var file_sift_test_reports_v1_test_reports_proto_msgTypes = make([]protoimpl.MessageInfo, 40) +var file_sift_test_reports_v1_test_reports_proto_goTypes = []interface{}{ + (TestStatus)(0), // 0: sift.test_reports.v1.TestStatus + (TestStepType)(0), // 1: sift.test_reports.v1.TestStepType + (TestMeasurementType)(0), // 2: sift.test_reports.v1.TestMeasurementType + (*TestReport)(nil), // 3: sift.test_reports.v1.TestReport + (*TestStep)(nil), // 4: sift.test_reports.v1.TestStep + (*ErrorInfo)(nil), // 5: sift.test_reports.v1.ErrorInfo + (*TestMeasurement)(nil), // 6: sift.test_reports.v1.TestMeasurement + (*NumericBounds)(nil), // 7: sift.test_reports.v1.NumericBounds + (*StringBounds)(nil), // 8: sift.test_reports.v1.StringBounds + (*ImportTestReportRequest)(nil), // 9: sift.test_reports.v1.ImportTestReportRequest + (*ImportTestReportResponse)(nil), // 10: sift.test_reports.v1.ImportTestReportResponse + (*CreateTestReportRequest)(nil), // 11: sift.test_reports.v1.CreateTestReportRequest + (*CreateTestReportResponse)(nil), // 12: sift.test_reports.v1.CreateTestReportResponse + (*GetTestReportRequest)(nil), // 13: sift.test_reports.v1.GetTestReportRequest + (*GetTestReportResponse)(nil), // 14: sift.test_reports.v1.GetTestReportResponse + (*ListTestReportsRequest)(nil), // 15: sift.test_reports.v1.ListTestReportsRequest + (*ListTestReportsResponse)(nil), // 16: sift.test_reports.v1.ListTestReportsResponse + (*UpdateTestReportRequest)(nil), // 17: sift.test_reports.v1.UpdateTestReportRequest + (*UpdateTestReportResponse)(nil), // 18: sift.test_reports.v1.UpdateTestReportResponse + (*DeleteTestReportRequest)(nil), // 19: sift.test_reports.v1.DeleteTestReportRequest + (*DeleteTestReportResponse)(nil), // 20: sift.test_reports.v1.DeleteTestReportResponse + (*CreateTestStepRequest)(nil), // 21: sift.test_reports.v1.CreateTestStepRequest + (*CreateTestStepResponse)(nil), // 22: sift.test_reports.v1.CreateTestStepResponse + (*ListTestStepsRequest)(nil), // 23: sift.test_reports.v1.ListTestStepsRequest + (*ListTestStepsResponse)(nil), // 24: sift.test_reports.v1.ListTestStepsResponse + (*UpdateTestStepRequest)(nil), // 25: sift.test_reports.v1.UpdateTestStepRequest + (*UpdateTestStepResponse)(nil), // 26: sift.test_reports.v1.UpdateTestStepResponse + (*DeleteTestStepRequest)(nil), // 27: sift.test_reports.v1.DeleteTestStepRequest + (*DeleteTestStepResponse)(nil), // 28: sift.test_reports.v1.DeleteTestStepResponse + (*CreateTestMeasurementRequest)(nil), // 29: sift.test_reports.v1.CreateTestMeasurementRequest + (*CreateTestMeasurementResponse)(nil), // 30: sift.test_reports.v1.CreateTestMeasurementResponse + (*CreateTestMeasurementsRequest)(nil), // 31: sift.test_reports.v1.CreateTestMeasurementsRequest + (*CreateTestMeasurementsResponse)(nil), // 32: sift.test_reports.v1.CreateTestMeasurementsResponse + (*ListTestMeasurementsRequest)(nil), // 33: sift.test_reports.v1.ListTestMeasurementsRequest + (*ListTestMeasurementsResponse)(nil), // 34: sift.test_reports.v1.ListTestMeasurementsResponse + (*CountTestStepsRequest)(nil), // 35: sift.test_reports.v1.CountTestStepsRequest + (*CountTestStepsResponse)(nil), // 36: sift.test_reports.v1.CountTestStepsResponse + (*CountTestMeasurementsRequest)(nil), // 37: sift.test_reports.v1.CountTestMeasurementsRequest + (*CountTestMeasurementsResponse)(nil), // 38: sift.test_reports.v1.CountTestMeasurementsResponse + (*UpdateTestMeasurementRequest)(nil), // 39: sift.test_reports.v1.UpdateTestMeasurementRequest + (*UpdateTestMeasurementResponse)(nil), // 40: sift.test_reports.v1.UpdateTestMeasurementResponse + (*DeleteTestMeasurementRequest)(nil), // 41: sift.test_reports.v1.DeleteTestMeasurementRequest + (*DeleteTestMeasurementResponse)(nil), // 42: sift.test_reports.v1.DeleteTestMeasurementResponse + (*timestamppb.Timestamp)(nil), // 43: google.protobuf.Timestamp + (*v1.MetadataValue)(nil), // 44: sift.metadata.v1.MetadataValue + (*v2.Unit)(nil), // 45: sift.unit.v2.Unit + (*fieldmaskpb.FieldMask)(nil), // 46: google.protobuf.FieldMask +} +var file_sift_test_reports_v1_test_reports_proto_depIdxs = []int32{ + 0, // 0: sift.test_reports.v1.TestReport.status:type_name -> sift.test_reports.v1.TestStatus + 43, // 1: sift.test_reports.v1.TestReport.start_time:type_name -> google.protobuf.Timestamp + 43, // 2: sift.test_reports.v1.TestReport.end_time:type_name -> google.protobuf.Timestamp + 44, // 3: sift.test_reports.v1.TestReport.metadata:type_name -> sift.metadata.v1.MetadataValue + 43, // 4: sift.test_reports.v1.TestReport.archived_date:type_name -> google.protobuf.Timestamp + 1, // 5: sift.test_reports.v1.TestStep.step_type:type_name -> sift.test_reports.v1.TestStepType + 0, // 6: sift.test_reports.v1.TestStep.status:type_name -> sift.test_reports.v1.TestStatus + 43, // 7: sift.test_reports.v1.TestStep.start_time:type_name -> google.protobuf.Timestamp + 43, // 8: sift.test_reports.v1.TestStep.end_time:type_name -> google.protobuf.Timestamp + 5, // 9: sift.test_reports.v1.TestStep.error_info:type_name -> sift.test_reports.v1.ErrorInfo + 2, // 10: sift.test_reports.v1.TestMeasurement.measurement_type:type_name -> sift.test_reports.v1.TestMeasurementType + 45, // 11: sift.test_reports.v1.TestMeasurement.unit:type_name -> sift.unit.v2.Unit + 7, // 12: sift.test_reports.v1.TestMeasurement.numeric_bounds:type_name -> sift.test_reports.v1.NumericBounds + 8, // 13: sift.test_reports.v1.TestMeasurement.string_bounds:type_name -> sift.test_reports.v1.StringBounds + 43, // 14: sift.test_reports.v1.TestMeasurement.timestamp:type_name -> google.protobuf.Timestamp + 3, // 15: sift.test_reports.v1.ImportTestReportResponse.test_report:type_name -> sift.test_reports.v1.TestReport + 0, // 16: sift.test_reports.v1.CreateTestReportRequest.status:type_name -> sift.test_reports.v1.TestStatus + 43, // 17: sift.test_reports.v1.CreateTestReportRequest.start_time:type_name -> google.protobuf.Timestamp + 43, // 18: sift.test_reports.v1.CreateTestReportRequest.end_time:type_name -> google.protobuf.Timestamp + 44, // 19: sift.test_reports.v1.CreateTestReportRequest.metadata:type_name -> sift.metadata.v1.MetadataValue + 3, // 20: sift.test_reports.v1.CreateTestReportResponse.test_report:type_name -> sift.test_reports.v1.TestReport + 3, // 21: sift.test_reports.v1.GetTestReportResponse.test_report:type_name -> sift.test_reports.v1.TestReport + 3, // 22: sift.test_reports.v1.ListTestReportsResponse.test_reports:type_name -> sift.test_reports.v1.TestReport + 3, // 23: sift.test_reports.v1.UpdateTestReportRequest.test_report:type_name -> sift.test_reports.v1.TestReport + 46, // 24: sift.test_reports.v1.UpdateTestReportRequest.update_mask:type_name -> google.protobuf.FieldMask + 3, // 25: sift.test_reports.v1.UpdateTestReportResponse.test_report:type_name -> sift.test_reports.v1.TestReport + 4, // 26: sift.test_reports.v1.CreateTestStepRequest.test_step:type_name -> sift.test_reports.v1.TestStep + 4, // 27: sift.test_reports.v1.CreateTestStepResponse.test_step:type_name -> sift.test_reports.v1.TestStep + 4, // 28: sift.test_reports.v1.ListTestStepsResponse.test_steps:type_name -> sift.test_reports.v1.TestStep + 4, // 29: sift.test_reports.v1.UpdateTestStepRequest.test_step:type_name -> sift.test_reports.v1.TestStep + 46, // 30: sift.test_reports.v1.UpdateTestStepRequest.update_mask:type_name -> google.protobuf.FieldMask + 4, // 31: sift.test_reports.v1.UpdateTestStepResponse.test_step:type_name -> sift.test_reports.v1.TestStep + 6, // 32: sift.test_reports.v1.CreateTestMeasurementRequest.test_measurement:type_name -> sift.test_reports.v1.TestMeasurement + 6, // 33: sift.test_reports.v1.CreateTestMeasurementResponse.test_measurement:type_name -> sift.test_reports.v1.TestMeasurement + 6, // 34: sift.test_reports.v1.CreateTestMeasurementsRequest.test_measurements:type_name -> sift.test_reports.v1.TestMeasurement + 6, // 35: sift.test_reports.v1.ListTestMeasurementsResponse.test_measurements:type_name -> sift.test_reports.v1.TestMeasurement + 6, // 36: sift.test_reports.v1.UpdateTestMeasurementRequest.test_measurement:type_name -> sift.test_reports.v1.TestMeasurement + 46, // 37: sift.test_reports.v1.UpdateTestMeasurementRequest.update_mask:type_name -> google.protobuf.FieldMask + 6, // 38: sift.test_reports.v1.UpdateTestMeasurementResponse.test_measurement:type_name -> sift.test_reports.v1.TestMeasurement + 9, // 39: sift.test_reports.v1.TestReportService.ImportTestReport:input_type -> sift.test_reports.v1.ImportTestReportRequest + 11, // 40: sift.test_reports.v1.TestReportService.CreateTestReport:input_type -> sift.test_reports.v1.CreateTestReportRequest + 13, // 41: sift.test_reports.v1.TestReportService.GetTestReport:input_type -> sift.test_reports.v1.GetTestReportRequest + 15, // 42: sift.test_reports.v1.TestReportService.ListTestReports:input_type -> sift.test_reports.v1.ListTestReportsRequest + 17, // 43: sift.test_reports.v1.TestReportService.UpdateTestReport:input_type -> sift.test_reports.v1.UpdateTestReportRequest + 19, // 44: sift.test_reports.v1.TestReportService.DeleteTestReport:input_type -> sift.test_reports.v1.DeleteTestReportRequest + 21, // 45: sift.test_reports.v1.TestReportService.CreateTestStep:input_type -> sift.test_reports.v1.CreateTestStepRequest + 23, // 46: sift.test_reports.v1.TestReportService.ListTestSteps:input_type -> sift.test_reports.v1.ListTestStepsRequest + 25, // 47: sift.test_reports.v1.TestReportService.UpdateTestStep:input_type -> sift.test_reports.v1.UpdateTestStepRequest + 27, // 48: sift.test_reports.v1.TestReportService.DeleteTestStep:input_type -> sift.test_reports.v1.DeleteTestStepRequest + 29, // 49: sift.test_reports.v1.TestReportService.CreateTestMeasurement:input_type -> sift.test_reports.v1.CreateTestMeasurementRequest + 31, // 50: sift.test_reports.v1.TestReportService.CreateTestMeasurements:input_type -> sift.test_reports.v1.CreateTestMeasurementsRequest + 33, // 51: sift.test_reports.v1.TestReportService.ListTestMeasurements:input_type -> sift.test_reports.v1.ListTestMeasurementsRequest + 35, // 52: sift.test_reports.v1.TestReportService.CountTestSteps:input_type -> sift.test_reports.v1.CountTestStepsRequest + 37, // 53: sift.test_reports.v1.TestReportService.CountTestMeasurements:input_type -> sift.test_reports.v1.CountTestMeasurementsRequest + 39, // 54: sift.test_reports.v1.TestReportService.UpdateTestMeasurement:input_type -> sift.test_reports.v1.UpdateTestMeasurementRequest + 41, // 55: sift.test_reports.v1.TestReportService.DeleteTestMeasurement:input_type -> sift.test_reports.v1.DeleteTestMeasurementRequest + 10, // 56: sift.test_reports.v1.TestReportService.ImportTestReport:output_type -> sift.test_reports.v1.ImportTestReportResponse + 12, // 57: sift.test_reports.v1.TestReportService.CreateTestReport:output_type -> sift.test_reports.v1.CreateTestReportResponse + 14, // 58: sift.test_reports.v1.TestReportService.GetTestReport:output_type -> sift.test_reports.v1.GetTestReportResponse + 16, // 59: sift.test_reports.v1.TestReportService.ListTestReports:output_type -> sift.test_reports.v1.ListTestReportsResponse + 18, // 60: sift.test_reports.v1.TestReportService.UpdateTestReport:output_type -> sift.test_reports.v1.UpdateTestReportResponse + 20, // 61: sift.test_reports.v1.TestReportService.DeleteTestReport:output_type -> sift.test_reports.v1.DeleteTestReportResponse + 22, // 62: sift.test_reports.v1.TestReportService.CreateTestStep:output_type -> sift.test_reports.v1.CreateTestStepResponse + 24, // 63: sift.test_reports.v1.TestReportService.ListTestSteps:output_type -> sift.test_reports.v1.ListTestStepsResponse + 26, // 64: sift.test_reports.v1.TestReportService.UpdateTestStep:output_type -> sift.test_reports.v1.UpdateTestStepResponse + 28, // 65: sift.test_reports.v1.TestReportService.DeleteTestStep:output_type -> sift.test_reports.v1.DeleteTestStepResponse + 30, // 66: sift.test_reports.v1.TestReportService.CreateTestMeasurement:output_type -> sift.test_reports.v1.CreateTestMeasurementResponse + 32, // 67: sift.test_reports.v1.TestReportService.CreateTestMeasurements:output_type -> sift.test_reports.v1.CreateTestMeasurementsResponse + 34, // 68: sift.test_reports.v1.TestReportService.ListTestMeasurements:output_type -> sift.test_reports.v1.ListTestMeasurementsResponse + 36, // 69: sift.test_reports.v1.TestReportService.CountTestSteps:output_type -> sift.test_reports.v1.CountTestStepsResponse + 38, // 70: sift.test_reports.v1.TestReportService.CountTestMeasurements:output_type -> sift.test_reports.v1.CountTestMeasurementsResponse + 40, // 71: sift.test_reports.v1.TestReportService.UpdateTestMeasurement:output_type -> sift.test_reports.v1.UpdateTestMeasurementResponse + 42, // 72: sift.test_reports.v1.TestReportService.DeleteTestMeasurement:output_type -> sift.test_reports.v1.DeleteTestMeasurementResponse + 56, // [56:73] is the sub-list for method output_type + 39, // [39:56] is the sub-list for method input_type + 39, // [39:39] is the sub-list for extension type_name + 39, // [39:39] is the sub-list for extension extendee + 0, // [0:39] is the sub-list for field type_name +} + +func init() { file_sift_test_reports_v1_test_reports_proto_init() } +func file_sift_test_reports_v1_test_reports_proto_init() { + if File_sift_test_reports_v1_test_reports_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_sift_test_reports_v1_test_reports_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TestReport); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TestStep); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ErrorInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TestMeasurement); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NumericBounds); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StringBounds); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ImportTestReportRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ImportTestReportResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateTestReportRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateTestReportResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTestReportRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTestReportResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListTestReportsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListTestReportsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateTestReportRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateTestReportResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteTestReportRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteTestReportResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateTestStepRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateTestStepResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListTestStepsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListTestStepsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateTestStepRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateTestStepResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteTestStepRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteTestStepResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateTestMeasurementRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateTestMeasurementResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateTestMeasurementsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateTestMeasurementsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListTestMeasurementsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListTestMeasurementsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CountTestStepsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CountTestStepsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CountTestMeasurementsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CountTestMeasurementsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateTestMeasurementRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateTestMeasurementResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteTestMeasurementRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteTestMeasurementResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[3].OneofWrappers = []interface{}{ + (*TestMeasurement_NumericValue)(nil), + (*TestMeasurement_StringValue)(nil), + (*TestMeasurement_BooleanValue)(nil), + (*TestMeasurement_NumericBounds)(nil), + (*TestMeasurement_StringBounds)(nil), + } + file_sift_test_reports_v1_test_reports_proto_msgTypes[4].OneofWrappers = []interface{}{} + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_sift_test_reports_v1_test_reports_proto_rawDesc, + NumEnums: 3, + NumMessages: 40, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_sift_test_reports_v1_test_reports_proto_goTypes, + DependencyIndexes: file_sift_test_reports_v1_test_reports_proto_depIdxs, + EnumInfos: file_sift_test_reports_v1_test_reports_proto_enumTypes, + MessageInfos: file_sift_test_reports_v1_test_reports_proto_msgTypes, + }.Build() + File_sift_test_reports_v1_test_reports_proto = out.File + file_sift_test_reports_v1_test_reports_proto_rawDesc = nil + file_sift_test_reports_v1_test_reports_proto_goTypes = nil + file_sift_test_reports_v1_test_reports_proto_depIdxs = nil +} diff --git a/go/gen/sift/test_reports/v1/test_reports.pb.gw.go b/go/gen/sift/test_reports/v1/test_reports.pb.gw.go new file mode 100644 index 000000000..5cbc29f88 --- /dev/null +++ b/go/gen/sift/test_reports/v1/test_reports.pb.gw.go @@ -0,0 +1,1613 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: sift/test_reports/v1/test_reports.proto + +/* +Package test_reportsv1 is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package test_reportsv1 + +import ( + "context" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = metadata.Join + +func request_TestReportService_ImportTestReport_0(ctx context.Context, marshaler runtime.Marshaler, client TestReportServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ImportTestReportRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ImportTestReport(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_TestReportService_ImportTestReport_0(ctx context.Context, marshaler runtime.Marshaler, server TestReportServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ImportTestReportRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ImportTestReport(ctx, &protoReq) + return msg, metadata, err + +} + +func request_TestReportService_CreateTestReport_0(ctx context.Context, marshaler runtime.Marshaler, client TestReportServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateTestReportRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.CreateTestReport(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_TestReportService_CreateTestReport_0(ctx context.Context, marshaler runtime.Marshaler, server TestReportServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateTestReportRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.CreateTestReport(ctx, &protoReq) + return msg, metadata, err + +} + +func request_TestReportService_GetTestReport_0(ctx context.Context, marshaler runtime.Marshaler, client TestReportServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetTestReportRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["test_report_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "test_report_id") + } + + protoReq.TestReportId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "test_report_id", err) + } + + msg, err := client.GetTestReport(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_TestReportService_GetTestReport_0(ctx context.Context, marshaler runtime.Marshaler, server TestReportServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetTestReportRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["test_report_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "test_report_id") + } + + protoReq.TestReportId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "test_report_id", err) + } + + msg, err := server.GetTestReport(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_TestReportService_ListTestReports_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_TestReportService_ListTestReports_0(ctx context.Context, marshaler runtime.Marshaler, client TestReportServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListTestReportsRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_TestReportService_ListTestReports_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListTestReports(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_TestReportService_ListTestReports_0(ctx context.Context, marshaler runtime.Marshaler, server TestReportServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListTestReportsRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_TestReportService_ListTestReports_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ListTestReports(ctx, &protoReq) + return msg, metadata, err + +} + +func request_TestReportService_UpdateTestReport_0(ctx context.Context, marshaler runtime.Marshaler, client TestReportServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq UpdateTestReportRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.UpdateTestReport(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_TestReportService_UpdateTestReport_0(ctx context.Context, marshaler runtime.Marshaler, server TestReportServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq UpdateTestReportRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.UpdateTestReport(ctx, &protoReq) + return msg, metadata, err + +} + +func request_TestReportService_DeleteTestReport_0(ctx context.Context, marshaler runtime.Marshaler, client TestReportServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteTestReportRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["test_report_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "test_report_id") + } + + protoReq.TestReportId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "test_report_id", err) + } + + msg, err := client.DeleteTestReport(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_TestReportService_DeleteTestReport_0(ctx context.Context, marshaler runtime.Marshaler, server TestReportServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteTestReportRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["test_report_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "test_report_id") + } + + protoReq.TestReportId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "test_report_id", err) + } + + msg, err := server.DeleteTestReport(ctx, &protoReq) + return msg, metadata, err + +} + +func request_TestReportService_CreateTestStep_0(ctx context.Context, marshaler runtime.Marshaler, client TestReportServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateTestStepRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.CreateTestStep(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_TestReportService_CreateTestStep_0(ctx context.Context, marshaler runtime.Marshaler, server TestReportServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateTestStepRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.CreateTestStep(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_TestReportService_ListTestSteps_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_TestReportService_ListTestSteps_0(ctx context.Context, marshaler runtime.Marshaler, client TestReportServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListTestStepsRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_TestReportService_ListTestSteps_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListTestSteps(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_TestReportService_ListTestSteps_0(ctx context.Context, marshaler runtime.Marshaler, server TestReportServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListTestStepsRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_TestReportService_ListTestSteps_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ListTestSteps(ctx, &protoReq) + return msg, metadata, err + +} + +func request_TestReportService_UpdateTestStep_0(ctx context.Context, marshaler runtime.Marshaler, client TestReportServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq UpdateTestStepRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.UpdateTestStep(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_TestReportService_UpdateTestStep_0(ctx context.Context, marshaler runtime.Marshaler, server TestReportServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq UpdateTestStepRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.UpdateTestStep(ctx, &protoReq) + return msg, metadata, err + +} + +func request_TestReportService_DeleteTestStep_0(ctx context.Context, marshaler runtime.Marshaler, client TestReportServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteTestStepRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["test_step_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "test_step_id") + } + + protoReq.TestStepId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "test_step_id", err) + } + + msg, err := client.DeleteTestStep(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_TestReportService_DeleteTestStep_0(ctx context.Context, marshaler runtime.Marshaler, server TestReportServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteTestStepRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["test_step_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "test_step_id") + } + + protoReq.TestStepId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "test_step_id", err) + } + + msg, err := server.DeleteTestStep(ctx, &protoReq) + return msg, metadata, err + +} + +func request_TestReportService_CreateTestMeasurement_0(ctx context.Context, marshaler runtime.Marshaler, client TestReportServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateTestMeasurementRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.CreateTestMeasurement(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_TestReportService_CreateTestMeasurement_0(ctx context.Context, marshaler runtime.Marshaler, server TestReportServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateTestMeasurementRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.CreateTestMeasurement(ctx, &protoReq) + return msg, metadata, err + +} + +func request_TestReportService_CreateTestMeasurements_0(ctx context.Context, marshaler runtime.Marshaler, client TestReportServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateTestMeasurementsRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.CreateTestMeasurements(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_TestReportService_CreateTestMeasurements_0(ctx context.Context, marshaler runtime.Marshaler, server TestReportServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateTestMeasurementsRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.CreateTestMeasurements(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_TestReportService_ListTestMeasurements_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_TestReportService_ListTestMeasurements_0(ctx context.Context, marshaler runtime.Marshaler, client TestReportServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListTestMeasurementsRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_TestReportService_ListTestMeasurements_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListTestMeasurements(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_TestReportService_ListTestMeasurements_0(ctx context.Context, marshaler runtime.Marshaler, server TestReportServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListTestMeasurementsRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_TestReportService_ListTestMeasurements_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ListTestMeasurements(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_TestReportService_CountTestSteps_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_TestReportService_CountTestSteps_0(ctx context.Context, marshaler runtime.Marshaler, client TestReportServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CountTestStepsRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_TestReportService_CountTestSteps_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.CountTestSteps(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_TestReportService_CountTestSteps_0(ctx context.Context, marshaler runtime.Marshaler, server TestReportServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CountTestStepsRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_TestReportService_CountTestSteps_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.CountTestSteps(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_TestReportService_CountTestMeasurements_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_TestReportService_CountTestMeasurements_0(ctx context.Context, marshaler runtime.Marshaler, client TestReportServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CountTestMeasurementsRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_TestReportService_CountTestMeasurements_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.CountTestMeasurements(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_TestReportService_CountTestMeasurements_0(ctx context.Context, marshaler runtime.Marshaler, server TestReportServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CountTestMeasurementsRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_TestReportService_CountTestMeasurements_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.CountTestMeasurements(ctx, &protoReq) + return msg, metadata, err + +} + +func request_TestReportService_UpdateTestMeasurement_0(ctx context.Context, marshaler runtime.Marshaler, client TestReportServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq UpdateTestMeasurementRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.UpdateTestMeasurement(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_TestReportService_UpdateTestMeasurement_0(ctx context.Context, marshaler runtime.Marshaler, server TestReportServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq UpdateTestMeasurementRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.UpdateTestMeasurement(ctx, &protoReq) + return msg, metadata, err + +} + +func request_TestReportService_DeleteTestMeasurement_0(ctx context.Context, marshaler runtime.Marshaler, client TestReportServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteTestMeasurementRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["measurement_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "measurement_id") + } + + protoReq.MeasurementId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "measurement_id", err) + } + + msg, err := client.DeleteTestMeasurement(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_TestReportService_DeleteTestMeasurement_0(ctx context.Context, marshaler runtime.Marshaler, server TestReportServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteTestMeasurementRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["measurement_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "measurement_id") + } + + protoReq.MeasurementId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "measurement_id", err) + } + + msg, err := server.DeleteTestMeasurement(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterTestReportServiceHandlerServer registers the http handlers for service TestReportService to "mux". +// UnaryRPC :call TestReportServiceServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterTestReportServiceHandlerFromEndpoint instead. +func RegisterTestReportServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server TestReportServiceServer) error { + + mux.Handle("POST", pattern_TestReportService_ImportTestReport_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/sift.test_reports.v1.TestReportService/ImportTestReport", runtime.WithHTTPPathPattern("/api/v1/test-reports:import")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_TestReportService_ImportTestReport_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TestReportService_ImportTestReport_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_TestReportService_CreateTestReport_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/sift.test_reports.v1.TestReportService/CreateTestReport", runtime.WithHTTPPathPattern("/api/v1/test-reports")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_TestReportService_CreateTestReport_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TestReportService_CreateTestReport_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_TestReportService_GetTestReport_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/sift.test_reports.v1.TestReportService/GetTestReport", runtime.WithHTTPPathPattern("/api/v1/test-reports/{test_report_id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_TestReportService_GetTestReport_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TestReportService_GetTestReport_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_TestReportService_ListTestReports_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/sift.test_reports.v1.TestReportService/ListTestReports", runtime.WithHTTPPathPattern("/api/v1/test-reports")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_TestReportService_ListTestReports_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TestReportService_ListTestReports_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PATCH", pattern_TestReportService_UpdateTestReport_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/sift.test_reports.v1.TestReportService/UpdateTestReport", runtime.WithHTTPPathPattern("/api/v1/test-reports")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_TestReportService_UpdateTestReport_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TestReportService_UpdateTestReport_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_TestReportService_DeleteTestReport_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/sift.test_reports.v1.TestReportService/DeleteTestReport", runtime.WithHTTPPathPattern("/api/v1/test-reports/{test_report_id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_TestReportService_DeleteTestReport_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TestReportService_DeleteTestReport_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_TestReportService_CreateTestStep_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/sift.test_reports.v1.TestReportService/CreateTestStep", runtime.WithHTTPPathPattern("/api/v1/test-steps")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_TestReportService_CreateTestStep_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TestReportService_CreateTestStep_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_TestReportService_ListTestSteps_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/sift.test_reports.v1.TestReportService/ListTestSteps", runtime.WithHTTPPathPattern("/api/v1/test-steps")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_TestReportService_ListTestSteps_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TestReportService_ListTestSteps_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PATCH", pattern_TestReportService_UpdateTestStep_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/sift.test_reports.v1.TestReportService/UpdateTestStep", runtime.WithHTTPPathPattern("/api/v1/test-steps")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_TestReportService_UpdateTestStep_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TestReportService_UpdateTestStep_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_TestReportService_DeleteTestStep_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/sift.test_reports.v1.TestReportService/DeleteTestStep", runtime.WithHTTPPathPattern("/api/v1/test-steps/{test_step_id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_TestReportService_DeleteTestStep_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TestReportService_DeleteTestStep_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_TestReportService_CreateTestMeasurement_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/sift.test_reports.v1.TestReportService/CreateTestMeasurement", runtime.WithHTTPPathPattern("/api/v1/test-measurements")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_TestReportService_CreateTestMeasurement_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TestReportService_CreateTestMeasurement_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_TestReportService_CreateTestMeasurements_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/sift.test_reports.v1.TestReportService/CreateTestMeasurements", runtime.WithHTTPPathPattern("/api/v1/test-measurements:batch")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_TestReportService_CreateTestMeasurements_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TestReportService_CreateTestMeasurements_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_TestReportService_ListTestMeasurements_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/sift.test_reports.v1.TestReportService/ListTestMeasurements", runtime.WithHTTPPathPattern("/api/v1/test-measurements")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_TestReportService_ListTestMeasurements_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TestReportService_ListTestMeasurements_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_TestReportService_CountTestSteps_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/sift.test_reports.v1.TestReportService/CountTestSteps", runtime.WithHTTPPathPattern("/api/v1/test-steps/count")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_TestReportService_CountTestSteps_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TestReportService_CountTestSteps_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_TestReportService_CountTestMeasurements_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/sift.test_reports.v1.TestReportService/CountTestMeasurements", runtime.WithHTTPPathPattern("/api/v1/test-measurements/count")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_TestReportService_CountTestMeasurements_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TestReportService_CountTestMeasurements_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PATCH", pattern_TestReportService_UpdateTestMeasurement_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/sift.test_reports.v1.TestReportService/UpdateTestMeasurement", runtime.WithHTTPPathPattern("/api/v1/test-measurements")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_TestReportService_UpdateTestMeasurement_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TestReportService_UpdateTestMeasurement_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_TestReportService_DeleteTestMeasurement_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/sift.test_reports.v1.TestReportService/DeleteTestMeasurement", runtime.WithHTTPPathPattern("/api/v1/test-measurements/{measurement_id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_TestReportService_DeleteTestMeasurement_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TestReportService_DeleteTestMeasurement_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterTestReportServiceHandlerFromEndpoint is same as RegisterTestReportServiceHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterTestReportServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.DialContext(ctx, endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterTestReportServiceHandler(ctx, mux, conn) +} + +// RegisterTestReportServiceHandler registers the http handlers for service TestReportService to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterTestReportServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterTestReportServiceHandlerClient(ctx, mux, NewTestReportServiceClient(conn)) +} + +// RegisterTestReportServiceHandlerClient registers the http handlers for service TestReportService +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "TestReportServiceClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "TestReportServiceClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "TestReportServiceClient" to call the correct interceptors. +func RegisterTestReportServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client TestReportServiceClient) error { + + mux.Handle("POST", pattern_TestReportService_ImportTestReport_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/sift.test_reports.v1.TestReportService/ImportTestReport", runtime.WithHTTPPathPattern("/api/v1/test-reports:import")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_TestReportService_ImportTestReport_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TestReportService_ImportTestReport_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_TestReportService_CreateTestReport_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/sift.test_reports.v1.TestReportService/CreateTestReport", runtime.WithHTTPPathPattern("/api/v1/test-reports")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_TestReportService_CreateTestReport_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TestReportService_CreateTestReport_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_TestReportService_GetTestReport_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/sift.test_reports.v1.TestReportService/GetTestReport", runtime.WithHTTPPathPattern("/api/v1/test-reports/{test_report_id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_TestReportService_GetTestReport_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TestReportService_GetTestReport_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_TestReportService_ListTestReports_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/sift.test_reports.v1.TestReportService/ListTestReports", runtime.WithHTTPPathPattern("/api/v1/test-reports")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_TestReportService_ListTestReports_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TestReportService_ListTestReports_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PATCH", pattern_TestReportService_UpdateTestReport_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/sift.test_reports.v1.TestReportService/UpdateTestReport", runtime.WithHTTPPathPattern("/api/v1/test-reports")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_TestReportService_UpdateTestReport_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TestReportService_UpdateTestReport_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_TestReportService_DeleteTestReport_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/sift.test_reports.v1.TestReportService/DeleteTestReport", runtime.WithHTTPPathPattern("/api/v1/test-reports/{test_report_id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_TestReportService_DeleteTestReport_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TestReportService_DeleteTestReport_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_TestReportService_CreateTestStep_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/sift.test_reports.v1.TestReportService/CreateTestStep", runtime.WithHTTPPathPattern("/api/v1/test-steps")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_TestReportService_CreateTestStep_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TestReportService_CreateTestStep_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_TestReportService_ListTestSteps_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/sift.test_reports.v1.TestReportService/ListTestSteps", runtime.WithHTTPPathPattern("/api/v1/test-steps")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_TestReportService_ListTestSteps_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TestReportService_ListTestSteps_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PATCH", pattern_TestReportService_UpdateTestStep_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/sift.test_reports.v1.TestReportService/UpdateTestStep", runtime.WithHTTPPathPattern("/api/v1/test-steps")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_TestReportService_UpdateTestStep_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TestReportService_UpdateTestStep_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_TestReportService_DeleteTestStep_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/sift.test_reports.v1.TestReportService/DeleteTestStep", runtime.WithHTTPPathPattern("/api/v1/test-steps/{test_step_id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_TestReportService_DeleteTestStep_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TestReportService_DeleteTestStep_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_TestReportService_CreateTestMeasurement_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/sift.test_reports.v1.TestReportService/CreateTestMeasurement", runtime.WithHTTPPathPattern("/api/v1/test-measurements")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_TestReportService_CreateTestMeasurement_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TestReportService_CreateTestMeasurement_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_TestReportService_CreateTestMeasurements_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/sift.test_reports.v1.TestReportService/CreateTestMeasurements", runtime.WithHTTPPathPattern("/api/v1/test-measurements:batch")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_TestReportService_CreateTestMeasurements_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TestReportService_CreateTestMeasurements_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_TestReportService_ListTestMeasurements_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/sift.test_reports.v1.TestReportService/ListTestMeasurements", runtime.WithHTTPPathPattern("/api/v1/test-measurements")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_TestReportService_ListTestMeasurements_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TestReportService_ListTestMeasurements_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_TestReportService_CountTestSteps_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/sift.test_reports.v1.TestReportService/CountTestSteps", runtime.WithHTTPPathPattern("/api/v1/test-steps/count")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_TestReportService_CountTestSteps_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TestReportService_CountTestSteps_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_TestReportService_CountTestMeasurements_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/sift.test_reports.v1.TestReportService/CountTestMeasurements", runtime.WithHTTPPathPattern("/api/v1/test-measurements/count")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_TestReportService_CountTestMeasurements_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TestReportService_CountTestMeasurements_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PATCH", pattern_TestReportService_UpdateTestMeasurement_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/sift.test_reports.v1.TestReportService/UpdateTestMeasurement", runtime.WithHTTPPathPattern("/api/v1/test-measurements")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_TestReportService_UpdateTestMeasurement_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TestReportService_UpdateTestMeasurement_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_TestReportService_DeleteTestMeasurement_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/sift.test_reports.v1.TestReportService/DeleteTestMeasurement", runtime.WithHTTPPathPattern("/api/v1/test-measurements/{measurement_id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_TestReportService_DeleteTestMeasurement_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TestReportService_DeleteTestMeasurement_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_TestReportService_ImportTestReport_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v1", "test-reports"}, "import")) + + pattern_TestReportService_CreateTestReport_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v1", "test-reports"}, "")) + + pattern_TestReportService_GetTestReport_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"api", "v1", "test-reports", "test_report_id"}, "")) + + pattern_TestReportService_ListTestReports_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v1", "test-reports"}, "")) + + pattern_TestReportService_UpdateTestReport_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v1", "test-reports"}, "")) + + pattern_TestReportService_DeleteTestReport_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"api", "v1", "test-reports", "test_report_id"}, "")) + + pattern_TestReportService_CreateTestStep_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v1", "test-steps"}, "")) + + pattern_TestReportService_ListTestSteps_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v1", "test-steps"}, "")) + + pattern_TestReportService_UpdateTestStep_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v1", "test-steps"}, "")) + + pattern_TestReportService_DeleteTestStep_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"api", "v1", "test-steps", "test_step_id"}, "")) + + pattern_TestReportService_CreateTestMeasurement_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v1", "test-measurements"}, "")) + + pattern_TestReportService_CreateTestMeasurements_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v1", "test-measurements"}, "batch")) + + pattern_TestReportService_ListTestMeasurements_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v1", "test-measurements"}, "")) + + pattern_TestReportService_CountTestSteps_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"api", "v1", "test-steps", "count"}, "")) + + pattern_TestReportService_CountTestMeasurements_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"api", "v1", "test-measurements", "count"}, "")) + + pattern_TestReportService_UpdateTestMeasurement_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v1", "test-measurements"}, "")) + + pattern_TestReportService_DeleteTestMeasurement_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"api", "v1", "test-measurements", "measurement_id"}, "")) +) + +var ( + forward_TestReportService_ImportTestReport_0 = runtime.ForwardResponseMessage + + forward_TestReportService_CreateTestReport_0 = runtime.ForwardResponseMessage + + forward_TestReportService_GetTestReport_0 = runtime.ForwardResponseMessage + + forward_TestReportService_ListTestReports_0 = runtime.ForwardResponseMessage + + forward_TestReportService_UpdateTestReport_0 = runtime.ForwardResponseMessage + + forward_TestReportService_DeleteTestReport_0 = runtime.ForwardResponseMessage + + forward_TestReportService_CreateTestStep_0 = runtime.ForwardResponseMessage + + forward_TestReportService_ListTestSteps_0 = runtime.ForwardResponseMessage + + forward_TestReportService_UpdateTestStep_0 = runtime.ForwardResponseMessage + + forward_TestReportService_DeleteTestStep_0 = runtime.ForwardResponseMessage + + forward_TestReportService_CreateTestMeasurement_0 = runtime.ForwardResponseMessage + + forward_TestReportService_CreateTestMeasurements_0 = runtime.ForwardResponseMessage + + forward_TestReportService_ListTestMeasurements_0 = runtime.ForwardResponseMessage + + forward_TestReportService_CountTestSteps_0 = runtime.ForwardResponseMessage + + forward_TestReportService_CountTestMeasurements_0 = runtime.ForwardResponseMessage + + forward_TestReportService_UpdateTestMeasurement_0 = runtime.ForwardResponseMessage + + forward_TestReportService_DeleteTestMeasurement_0 = runtime.ForwardResponseMessage +) diff --git a/go/gen/sift/test_reports/v1/test_reports_vtproto.pb.go b/go/gen/sift/test_reports/v1/test_reports_vtproto.pb.go new file mode 100644 index 000000000..d23f6e295 --- /dev/null +++ b/go/gen/sift/test_reports/v1/test_reports_vtproto.pb.go @@ -0,0 +1,18335 @@ +// Code generated by protoc-gen-go-vtproto. DO NOT EDIT. +// protoc-gen-go-vtproto version: v0.6.0 +// source: sift/test_reports/v1/test_reports.proto + +package test_reportsv1 + +import ( + context "context" + binary "encoding/binary" + fmt "fmt" + protohelpers "github.com/planetscale/vtprotobuf/protohelpers" + fieldmaskpb1 "github.com/planetscale/vtprotobuf/types/known/fieldmaskpb" + timestamppb1 "github.com/planetscale/vtprotobuf/types/known/timestamppb" + v1 "github.com/sift-stack/sift/go/gen/sift/metadata/v1" + v2 "github.com/sift-stack/sift/go/gen/sift/unit/v2" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + proto "google.golang.org/protobuf/proto" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + fieldmaskpb "google.golang.org/protobuf/types/known/fieldmaskpb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + io "io" + math "math" + unsafe "unsafe" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +func (m *TestReport) CloneVT() *TestReport { + if m == nil { + return (*TestReport)(nil) + } + r := new(TestReport) + r.TestReportId = m.TestReportId + r.Status = m.Status + r.Name = m.Name + r.TestSystemName = m.TestSystemName + r.TestCase = m.TestCase + r.StartTime = (*timestamppb.Timestamp)((*timestamppb1.Timestamp)(m.StartTime).CloneVT()) + r.EndTime = (*timestamppb.Timestamp)((*timestamppb1.Timestamp)(m.EndTime).CloneVT()) + r.SerialNumber = m.SerialNumber + r.PartNumber = m.PartNumber + r.SystemOperator = m.SystemOperator + r.ArchivedDate = (*timestamppb.Timestamp)((*timestamppb1.Timestamp)(m.ArchivedDate).CloneVT()) + r.IsArchived = m.IsArchived + if rhs := m.Metadata; rhs != nil { + tmpContainer := make([]*v1.MetadataValue, len(rhs)) + for k, v := range rhs { + if vtpb, ok := interface{}(v).(interface{ CloneVT() *v1.MetadataValue }); ok { + tmpContainer[k] = vtpb.CloneVT() + } else { + tmpContainer[k] = proto.Clone(v).(*v1.MetadataValue) + } + } + r.Metadata = tmpContainer + } + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *TestReport) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *TestStep) CloneVT() *TestStep { + if m == nil { + return (*TestStep)(nil) + } + r := new(TestStep) + r.TestStepId = m.TestStepId + r.TestReportId = m.TestReportId + r.ParentStepId = m.ParentStepId + r.Name = m.Name + r.Description = m.Description + r.StepType = m.StepType + r.StepPath = m.StepPath + r.Status = m.Status + r.StartTime = (*timestamppb.Timestamp)((*timestamppb1.Timestamp)(m.StartTime).CloneVT()) + r.EndTime = (*timestamppb.Timestamp)((*timestamppb1.Timestamp)(m.EndTime).CloneVT()) + r.ErrorInfo = m.ErrorInfo.CloneVT() + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *TestStep) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *ErrorInfo) CloneVT() *ErrorInfo { + if m == nil { + return (*ErrorInfo)(nil) + } + r := new(ErrorInfo) + r.ErrorCode = m.ErrorCode + r.ErrorMessage = m.ErrorMessage + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *ErrorInfo) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *TestMeasurement) CloneVT() *TestMeasurement { + if m == nil { + return (*TestMeasurement)(nil) + } + r := new(TestMeasurement) + r.MeasurementId = m.MeasurementId + r.MeasurementType = m.MeasurementType + r.Name = m.Name + r.TestStepId = m.TestStepId + r.TestReportId = m.TestReportId + r.Passed = m.Passed + r.Timestamp = (*timestamppb.Timestamp)((*timestamppb1.Timestamp)(m.Timestamp).CloneVT()) + if m.Value != nil { + r.Value = m.Value.(interface { + CloneVT() isTestMeasurement_Value + }).CloneVT() + } + if rhs := m.Unit; rhs != nil { + if vtpb, ok := interface{}(rhs).(interface{ CloneVT() *v2.Unit }); ok { + r.Unit = vtpb.CloneVT() + } else { + r.Unit = proto.Clone(rhs).(*v2.Unit) + } + } + if m.Bounds != nil { + r.Bounds = m.Bounds.(interface { + CloneVT() isTestMeasurement_Bounds + }).CloneVT() + } + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *TestMeasurement) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *TestMeasurement_NumericValue) CloneVT() isTestMeasurement_Value { + if m == nil { + return (*TestMeasurement_NumericValue)(nil) + } + r := new(TestMeasurement_NumericValue) + r.NumericValue = m.NumericValue + return r +} + +func (m *TestMeasurement_StringValue) CloneVT() isTestMeasurement_Value { + if m == nil { + return (*TestMeasurement_StringValue)(nil) + } + r := new(TestMeasurement_StringValue) + r.StringValue = m.StringValue + return r +} + +func (m *TestMeasurement_BooleanValue) CloneVT() isTestMeasurement_Value { + if m == nil { + return (*TestMeasurement_BooleanValue)(nil) + } + r := new(TestMeasurement_BooleanValue) + r.BooleanValue = m.BooleanValue + return r +} + +func (m *TestMeasurement_NumericBounds) CloneVT() isTestMeasurement_Bounds { + if m == nil { + return (*TestMeasurement_NumericBounds)(nil) + } + r := new(TestMeasurement_NumericBounds) + r.NumericBounds = m.NumericBounds.CloneVT() + return r +} + +func (m *TestMeasurement_StringBounds) CloneVT() isTestMeasurement_Bounds { + if m == nil { + return (*TestMeasurement_StringBounds)(nil) + } + r := new(TestMeasurement_StringBounds) + r.StringBounds = m.StringBounds.CloneVT() + return r +} + +func (m *NumericBounds) CloneVT() *NumericBounds { + if m == nil { + return (*NumericBounds)(nil) + } + r := new(NumericBounds) + if rhs := m.Min; rhs != nil { + tmpVal := *rhs + r.Min = &tmpVal + } + if rhs := m.Max; rhs != nil { + tmpVal := *rhs + r.Max = &tmpVal + } + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *NumericBounds) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *StringBounds) CloneVT() *StringBounds { + if m == nil { + return (*StringBounds)(nil) + } + r := new(StringBounds) + r.ExpectedValue = m.ExpectedValue + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *StringBounds) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *ImportTestReportRequest) CloneVT() *ImportTestReportRequest { + if m == nil { + return (*ImportTestReportRequest)(nil) + } + r := new(ImportTestReportRequest) + r.RemoteFileId = m.RemoteFileId + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *ImportTestReportRequest) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *ImportTestReportResponse) CloneVT() *ImportTestReportResponse { + if m == nil { + return (*ImportTestReportResponse)(nil) + } + r := new(ImportTestReportResponse) + r.TestReport = m.TestReport.CloneVT() + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *ImportTestReportResponse) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *CreateTestReportRequest) CloneVT() *CreateTestReportRequest { + if m == nil { + return (*CreateTestReportRequest)(nil) + } + r := new(CreateTestReportRequest) + r.Status = m.Status + r.Name = m.Name + r.TestSystemName = m.TestSystemName + r.TestCase = m.TestCase + r.StartTime = (*timestamppb.Timestamp)((*timestamppb1.Timestamp)(m.StartTime).CloneVT()) + r.EndTime = (*timestamppb.Timestamp)((*timestamppb1.Timestamp)(m.EndTime).CloneVT()) + r.SerialNumber = m.SerialNumber + r.PartNumber = m.PartNumber + r.SystemOperator = m.SystemOperator + if rhs := m.Metadata; rhs != nil { + tmpContainer := make([]*v1.MetadataValue, len(rhs)) + for k, v := range rhs { + if vtpb, ok := interface{}(v).(interface{ CloneVT() *v1.MetadataValue }); ok { + tmpContainer[k] = vtpb.CloneVT() + } else { + tmpContainer[k] = proto.Clone(v).(*v1.MetadataValue) + } + } + r.Metadata = tmpContainer + } + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *CreateTestReportRequest) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *CreateTestReportResponse) CloneVT() *CreateTestReportResponse { + if m == nil { + return (*CreateTestReportResponse)(nil) + } + r := new(CreateTestReportResponse) + r.TestReport = m.TestReport.CloneVT() + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *CreateTestReportResponse) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *GetTestReportRequest) CloneVT() *GetTestReportRequest { + if m == nil { + return (*GetTestReportRequest)(nil) + } + r := new(GetTestReportRequest) + r.TestReportId = m.TestReportId + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *GetTestReportRequest) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *GetTestReportResponse) CloneVT() *GetTestReportResponse { + if m == nil { + return (*GetTestReportResponse)(nil) + } + r := new(GetTestReportResponse) + r.TestReport = m.TestReport.CloneVT() + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *GetTestReportResponse) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *ListTestReportsRequest) CloneVT() *ListTestReportsRequest { + if m == nil { + return (*ListTestReportsRequest)(nil) + } + r := new(ListTestReportsRequest) + r.PageSize = m.PageSize + r.PageToken = m.PageToken + r.Filter = m.Filter + r.OrderBy = m.OrderBy + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *ListTestReportsRequest) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *ListTestReportsResponse) CloneVT() *ListTestReportsResponse { + if m == nil { + return (*ListTestReportsResponse)(nil) + } + r := new(ListTestReportsResponse) + r.NextPageToken = m.NextPageToken + if rhs := m.TestReports; rhs != nil { + tmpContainer := make([]*TestReport, len(rhs)) + for k, v := range rhs { + tmpContainer[k] = v.CloneVT() + } + r.TestReports = tmpContainer + } + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *ListTestReportsResponse) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *UpdateTestReportRequest) CloneVT() *UpdateTestReportRequest { + if m == nil { + return (*UpdateTestReportRequest)(nil) + } + r := new(UpdateTestReportRequest) + r.TestReport = m.TestReport.CloneVT() + r.UpdateMask = (*fieldmaskpb.FieldMask)((*fieldmaskpb1.FieldMask)(m.UpdateMask).CloneVT()) + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *UpdateTestReportRequest) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *UpdateTestReportResponse) CloneVT() *UpdateTestReportResponse { + if m == nil { + return (*UpdateTestReportResponse)(nil) + } + r := new(UpdateTestReportResponse) + r.TestReport = m.TestReport.CloneVT() + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *UpdateTestReportResponse) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *DeleteTestReportRequest) CloneVT() *DeleteTestReportRequest { + if m == nil { + return (*DeleteTestReportRequest)(nil) + } + r := new(DeleteTestReportRequest) + r.TestReportId = m.TestReportId + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *DeleteTestReportRequest) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *DeleteTestReportResponse) CloneVT() *DeleteTestReportResponse { + if m == nil { + return (*DeleteTestReportResponse)(nil) + } + r := new(DeleteTestReportResponse) + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *DeleteTestReportResponse) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *CreateTestStepRequest) CloneVT() *CreateTestStepRequest { + if m == nil { + return (*CreateTestStepRequest)(nil) + } + r := new(CreateTestStepRequest) + r.TestStep = m.TestStep.CloneVT() + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *CreateTestStepRequest) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *CreateTestStepResponse) CloneVT() *CreateTestStepResponse { + if m == nil { + return (*CreateTestStepResponse)(nil) + } + r := new(CreateTestStepResponse) + r.TestStep = m.TestStep.CloneVT() + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *CreateTestStepResponse) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *ListTestStepsRequest) CloneVT() *ListTestStepsRequest { + if m == nil { + return (*ListTestStepsRequest)(nil) + } + r := new(ListTestStepsRequest) + r.PageSize = m.PageSize + r.PageToken = m.PageToken + r.Filter = m.Filter + r.OrderBy = m.OrderBy + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *ListTestStepsRequest) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *ListTestStepsResponse) CloneVT() *ListTestStepsResponse { + if m == nil { + return (*ListTestStepsResponse)(nil) + } + r := new(ListTestStepsResponse) + r.NextPageToken = m.NextPageToken + if rhs := m.TestSteps; rhs != nil { + tmpContainer := make([]*TestStep, len(rhs)) + for k, v := range rhs { + tmpContainer[k] = v.CloneVT() + } + r.TestSteps = tmpContainer + } + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *ListTestStepsResponse) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *UpdateTestStepRequest) CloneVT() *UpdateTestStepRequest { + if m == nil { + return (*UpdateTestStepRequest)(nil) + } + r := new(UpdateTestStepRequest) + r.TestStep = m.TestStep.CloneVT() + r.UpdateMask = (*fieldmaskpb.FieldMask)((*fieldmaskpb1.FieldMask)(m.UpdateMask).CloneVT()) + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *UpdateTestStepRequest) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *UpdateTestStepResponse) CloneVT() *UpdateTestStepResponse { + if m == nil { + return (*UpdateTestStepResponse)(nil) + } + r := new(UpdateTestStepResponse) + r.TestStep = m.TestStep.CloneVT() + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *UpdateTestStepResponse) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *DeleteTestStepRequest) CloneVT() *DeleteTestStepRequest { + if m == nil { + return (*DeleteTestStepRequest)(nil) + } + r := new(DeleteTestStepRequest) + r.TestStepId = m.TestStepId + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *DeleteTestStepRequest) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *DeleteTestStepResponse) CloneVT() *DeleteTestStepResponse { + if m == nil { + return (*DeleteTestStepResponse)(nil) + } + r := new(DeleteTestStepResponse) + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *DeleteTestStepResponse) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *CreateTestMeasurementRequest) CloneVT() *CreateTestMeasurementRequest { + if m == nil { + return (*CreateTestMeasurementRequest)(nil) + } + r := new(CreateTestMeasurementRequest) + r.TestMeasurement = m.TestMeasurement.CloneVT() + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *CreateTestMeasurementRequest) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *CreateTestMeasurementResponse) CloneVT() *CreateTestMeasurementResponse { + if m == nil { + return (*CreateTestMeasurementResponse)(nil) + } + r := new(CreateTestMeasurementResponse) + r.TestMeasurement = m.TestMeasurement.CloneVT() + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *CreateTestMeasurementResponse) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *CreateTestMeasurementsRequest) CloneVT() *CreateTestMeasurementsRequest { + if m == nil { + return (*CreateTestMeasurementsRequest)(nil) + } + r := new(CreateTestMeasurementsRequest) + if rhs := m.TestMeasurements; rhs != nil { + tmpContainer := make([]*TestMeasurement, len(rhs)) + for k, v := range rhs { + tmpContainer[k] = v.CloneVT() + } + r.TestMeasurements = tmpContainer + } + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *CreateTestMeasurementsRequest) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *CreateTestMeasurementsResponse) CloneVT() *CreateTestMeasurementsResponse { + if m == nil { + return (*CreateTestMeasurementsResponse)(nil) + } + r := new(CreateTestMeasurementsResponse) + r.MeasurementsCreatedCount = m.MeasurementsCreatedCount + if rhs := m.MeasurementIds; rhs != nil { + tmpContainer := make([]string, len(rhs)) + copy(tmpContainer, rhs) + r.MeasurementIds = tmpContainer + } + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *CreateTestMeasurementsResponse) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *ListTestMeasurementsRequest) CloneVT() *ListTestMeasurementsRequest { + if m == nil { + return (*ListTestMeasurementsRequest)(nil) + } + r := new(ListTestMeasurementsRequest) + r.PageSize = m.PageSize + r.PageToken = m.PageToken + r.Filter = m.Filter + r.OrderBy = m.OrderBy + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *ListTestMeasurementsRequest) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *ListTestMeasurementsResponse) CloneVT() *ListTestMeasurementsResponse { + if m == nil { + return (*ListTestMeasurementsResponse)(nil) + } + r := new(ListTestMeasurementsResponse) + r.NextPageToken = m.NextPageToken + if rhs := m.TestMeasurements; rhs != nil { + tmpContainer := make([]*TestMeasurement, len(rhs)) + for k, v := range rhs { + tmpContainer[k] = v.CloneVT() + } + r.TestMeasurements = tmpContainer + } + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *ListTestMeasurementsResponse) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *CountTestStepsRequest) CloneVT() *CountTestStepsRequest { + if m == nil { + return (*CountTestStepsRequest)(nil) + } + r := new(CountTestStepsRequest) + r.Filter = m.Filter + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *CountTestStepsRequest) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *CountTestStepsResponse) CloneVT() *CountTestStepsResponse { + if m == nil { + return (*CountTestStepsResponse)(nil) + } + r := new(CountTestStepsResponse) + r.Count = m.Count + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *CountTestStepsResponse) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *CountTestMeasurementsRequest) CloneVT() *CountTestMeasurementsRequest { + if m == nil { + return (*CountTestMeasurementsRequest)(nil) + } + r := new(CountTestMeasurementsRequest) + r.Filter = m.Filter + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *CountTestMeasurementsRequest) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *CountTestMeasurementsResponse) CloneVT() *CountTestMeasurementsResponse { + if m == nil { + return (*CountTestMeasurementsResponse)(nil) + } + r := new(CountTestMeasurementsResponse) + r.Count = m.Count + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *CountTestMeasurementsResponse) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *UpdateTestMeasurementRequest) CloneVT() *UpdateTestMeasurementRequest { + if m == nil { + return (*UpdateTestMeasurementRequest)(nil) + } + r := new(UpdateTestMeasurementRequest) + r.TestMeasurement = m.TestMeasurement.CloneVT() + r.UpdateMask = (*fieldmaskpb.FieldMask)((*fieldmaskpb1.FieldMask)(m.UpdateMask).CloneVT()) + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *UpdateTestMeasurementRequest) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *UpdateTestMeasurementResponse) CloneVT() *UpdateTestMeasurementResponse { + if m == nil { + return (*UpdateTestMeasurementResponse)(nil) + } + r := new(UpdateTestMeasurementResponse) + r.TestMeasurement = m.TestMeasurement.CloneVT() + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *UpdateTestMeasurementResponse) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *DeleteTestMeasurementRequest) CloneVT() *DeleteTestMeasurementRequest { + if m == nil { + return (*DeleteTestMeasurementRequest)(nil) + } + r := new(DeleteTestMeasurementRequest) + r.MeasurementId = m.MeasurementId + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *DeleteTestMeasurementRequest) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *DeleteTestMeasurementResponse) CloneVT() *DeleteTestMeasurementResponse { + if m == nil { + return (*DeleteTestMeasurementResponse)(nil) + } + r := new(DeleteTestMeasurementResponse) + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *DeleteTestMeasurementResponse) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (this *TestReport) EqualVT(that *TestReport) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if this.TestReportId != that.TestReportId { + return false + } + if this.Status != that.Status { + return false + } + if this.Name != that.Name { + return false + } + if this.TestSystemName != that.TestSystemName { + return false + } + if this.TestCase != that.TestCase { + return false + } + if !(*timestamppb1.Timestamp)(this.StartTime).EqualVT((*timestamppb1.Timestamp)(that.StartTime)) { + return false + } + if !(*timestamppb1.Timestamp)(this.EndTime).EqualVT((*timestamppb1.Timestamp)(that.EndTime)) { + return false + } + if len(this.Metadata) != len(that.Metadata) { + return false + } + for i, vx := range this.Metadata { + vy := that.Metadata[i] + if p, q := vx, vy; p != q { + if p == nil { + p = &v1.MetadataValue{} + } + if q == nil { + q = &v1.MetadataValue{} + } + if equal, ok := interface{}(p).(interface{ EqualVT(*v1.MetadataValue) bool }); ok { + if !equal.EqualVT(q) { + return false + } + } else if !proto.Equal(p, q) { + return false + } + } + } + if this.SerialNumber != that.SerialNumber { + return false + } + if this.PartNumber != that.PartNumber { + return false + } + if this.SystemOperator != that.SystemOperator { + return false + } + if !(*timestamppb1.Timestamp)(this.ArchivedDate).EqualVT((*timestamppb1.Timestamp)(that.ArchivedDate)) { + return false + } + if this.IsArchived != that.IsArchived { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *TestReport) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*TestReport) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *TestStep) EqualVT(that *TestStep) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if this.TestStepId != that.TestStepId { + return false + } + if this.TestReportId != that.TestReportId { + return false + } + if this.ParentStepId != that.ParentStepId { + return false + } + if this.Name != that.Name { + return false + } + if this.Description != that.Description { + return false + } + if this.StepType != that.StepType { + return false + } + if this.StepPath != that.StepPath { + return false + } + if this.Status != that.Status { + return false + } + if !(*timestamppb1.Timestamp)(this.StartTime).EqualVT((*timestamppb1.Timestamp)(that.StartTime)) { + return false + } + if !(*timestamppb1.Timestamp)(this.EndTime).EqualVT((*timestamppb1.Timestamp)(that.EndTime)) { + return false + } + if !this.ErrorInfo.EqualVT(that.ErrorInfo) { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *TestStep) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*TestStep) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *ErrorInfo) EqualVT(that *ErrorInfo) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if this.ErrorCode != that.ErrorCode { + return false + } + if this.ErrorMessage != that.ErrorMessage { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *ErrorInfo) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*ErrorInfo) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *TestMeasurement) EqualVT(that *TestMeasurement) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if this.Value == nil && that.Value != nil { + return false + } else if this.Value != nil { + if that.Value == nil { + return false + } + if !this.Value.(interface { + EqualVT(isTestMeasurement_Value) bool + }).EqualVT(that.Value) { + return false + } + } + if this.Bounds == nil && that.Bounds != nil { + return false + } else if this.Bounds != nil { + if that.Bounds == nil { + return false + } + if !this.Bounds.(interface { + EqualVT(isTestMeasurement_Bounds) bool + }).EqualVT(that.Bounds) { + return false + } + } + if this.MeasurementId != that.MeasurementId { + return false + } + if this.MeasurementType != that.MeasurementType { + return false + } + if this.Name != that.Name { + return false + } + if this.TestStepId != that.TestStepId { + return false + } + if this.TestReportId != that.TestReportId { + return false + } + if equal, ok := interface{}(this.Unit).(interface{ EqualVT(*v2.Unit) bool }); ok { + if !equal.EqualVT(that.Unit) { + return false + } + } else if !proto.Equal(this.Unit, that.Unit) { + return false + } + if this.Passed != that.Passed { + return false + } + if !(*timestamppb1.Timestamp)(this.Timestamp).EqualVT((*timestamppb1.Timestamp)(that.Timestamp)) { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *TestMeasurement) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*TestMeasurement) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *TestMeasurement_NumericValue) EqualVT(thatIface isTestMeasurement_Value) bool { + that, ok := thatIface.(*TestMeasurement_NumericValue) + if !ok { + return false + } + if this == that { + return true + } + if this == nil && that != nil || this != nil && that == nil { + return false + } + if this.NumericValue != that.NumericValue { + return false + } + return true +} + +func (this *TestMeasurement_StringValue) EqualVT(thatIface isTestMeasurement_Value) bool { + that, ok := thatIface.(*TestMeasurement_StringValue) + if !ok { + return false + } + if this == that { + return true + } + if this == nil && that != nil || this != nil && that == nil { + return false + } + if this.StringValue != that.StringValue { + return false + } + return true +} + +func (this *TestMeasurement_BooleanValue) EqualVT(thatIface isTestMeasurement_Value) bool { + that, ok := thatIface.(*TestMeasurement_BooleanValue) + if !ok { + return false + } + if this == that { + return true + } + if this == nil && that != nil || this != nil && that == nil { + return false + } + if this.BooleanValue != that.BooleanValue { + return false + } + return true +} + +func (this *TestMeasurement_NumericBounds) EqualVT(thatIface isTestMeasurement_Bounds) bool { + that, ok := thatIface.(*TestMeasurement_NumericBounds) + if !ok { + return false + } + if this == that { + return true + } + if this == nil && that != nil || this != nil && that == nil { + return false + } + if p, q := this.NumericBounds, that.NumericBounds; p != q { + if p == nil { + p = &NumericBounds{} + } + if q == nil { + q = &NumericBounds{} + } + if !p.EqualVT(q) { + return false + } + } + return true +} + +func (this *TestMeasurement_StringBounds) EqualVT(thatIface isTestMeasurement_Bounds) bool { + that, ok := thatIface.(*TestMeasurement_StringBounds) + if !ok { + return false + } + if this == that { + return true + } + if this == nil && that != nil || this != nil && that == nil { + return false + } + if p, q := this.StringBounds, that.StringBounds; p != q { + if p == nil { + p = &StringBounds{} + } + if q == nil { + q = &StringBounds{} + } + if !p.EqualVT(q) { + return false + } + } + return true +} + +func (this *NumericBounds) EqualVT(that *NumericBounds) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if p, q := this.Min, that.Min; (p == nil && q != nil) || (p != nil && (q == nil || *p != *q)) { + return false + } + if p, q := this.Max, that.Max; (p == nil && q != nil) || (p != nil && (q == nil || *p != *q)) { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *NumericBounds) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*NumericBounds) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *StringBounds) EqualVT(that *StringBounds) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if this.ExpectedValue != that.ExpectedValue { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *StringBounds) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*StringBounds) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *ImportTestReportRequest) EqualVT(that *ImportTestReportRequest) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if this.RemoteFileId != that.RemoteFileId { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *ImportTestReportRequest) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*ImportTestReportRequest) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *ImportTestReportResponse) EqualVT(that *ImportTestReportResponse) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if !this.TestReport.EqualVT(that.TestReport) { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *ImportTestReportResponse) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*ImportTestReportResponse) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *CreateTestReportRequest) EqualVT(that *CreateTestReportRequest) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if this.Status != that.Status { + return false + } + if this.Name != that.Name { + return false + } + if this.TestSystemName != that.TestSystemName { + return false + } + if this.TestCase != that.TestCase { + return false + } + if !(*timestamppb1.Timestamp)(this.StartTime).EqualVT((*timestamppb1.Timestamp)(that.StartTime)) { + return false + } + if !(*timestamppb1.Timestamp)(this.EndTime).EqualVT((*timestamppb1.Timestamp)(that.EndTime)) { + return false + } + if len(this.Metadata) != len(that.Metadata) { + return false + } + for i, vx := range this.Metadata { + vy := that.Metadata[i] + if p, q := vx, vy; p != q { + if p == nil { + p = &v1.MetadataValue{} + } + if q == nil { + q = &v1.MetadataValue{} + } + if equal, ok := interface{}(p).(interface{ EqualVT(*v1.MetadataValue) bool }); ok { + if !equal.EqualVT(q) { + return false + } + } else if !proto.Equal(p, q) { + return false + } + } + } + if this.SerialNumber != that.SerialNumber { + return false + } + if this.PartNumber != that.PartNumber { + return false + } + if this.SystemOperator != that.SystemOperator { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *CreateTestReportRequest) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*CreateTestReportRequest) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *CreateTestReportResponse) EqualVT(that *CreateTestReportResponse) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if !this.TestReport.EqualVT(that.TestReport) { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *CreateTestReportResponse) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*CreateTestReportResponse) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *GetTestReportRequest) EqualVT(that *GetTestReportRequest) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if this.TestReportId != that.TestReportId { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *GetTestReportRequest) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*GetTestReportRequest) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *GetTestReportResponse) EqualVT(that *GetTestReportResponse) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if !this.TestReport.EqualVT(that.TestReport) { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *GetTestReportResponse) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*GetTestReportResponse) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *ListTestReportsRequest) EqualVT(that *ListTestReportsRequest) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if this.PageSize != that.PageSize { + return false + } + if this.PageToken != that.PageToken { + return false + } + if this.Filter != that.Filter { + return false + } + if this.OrderBy != that.OrderBy { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *ListTestReportsRequest) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*ListTestReportsRequest) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *ListTestReportsResponse) EqualVT(that *ListTestReportsResponse) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if len(this.TestReports) != len(that.TestReports) { + return false + } + for i, vx := range this.TestReports { + vy := that.TestReports[i] + if p, q := vx, vy; p != q { + if p == nil { + p = &TestReport{} + } + if q == nil { + q = &TestReport{} + } + if !p.EqualVT(q) { + return false + } + } + } + if this.NextPageToken != that.NextPageToken { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *ListTestReportsResponse) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*ListTestReportsResponse) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *UpdateTestReportRequest) EqualVT(that *UpdateTestReportRequest) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if !this.TestReport.EqualVT(that.TestReport) { + return false + } + if !(*fieldmaskpb1.FieldMask)(this.UpdateMask).EqualVT((*fieldmaskpb1.FieldMask)(that.UpdateMask)) { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *UpdateTestReportRequest) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*UpdateTestReportRequest) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *UpdateTestReportResponse) EqualVT(that *UpdateTestReportResponse) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if !this.TestReport.EqualVT(that.TestReport) { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *UpdateTestReportResponse) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*UpdateTestReportResponse) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *DeleteTestReportRequest) EqualVT(that *DeleteTestReportRequest) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if this.TestReportId != that.TestReportId { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *DeleteTestReportRequest) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*DeleteTestReportRequest) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *DeleteTestReportResponse) EqualVT(that *DeleteTestReportResponse) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *DeleteTestReportResponse) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*DeleteTestReportResponse) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *CreateTestStepRequest) EqualVT(that *CreateTestStepRequest) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if !this.TestStep.EqualVT(that.TestStep) { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *CreateTestStepRequest) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*CreateTestStepRequest) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *CreateTestStepResponse) EqualVT(that *CreateTestStepResponse) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if !this.TestStep.EqualVT(that.TestStep) { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *CreateTestStepResponse) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*CreateTestStepResponse) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *ListTestStepsRequest) EqualVT(that *ListTestStepsRequest) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if this.PageSize != that.PageSize { + return false + } + if this.PageToken != that.PageToken { + return false + } + if this.Filter != that.Filter { + return false + } + if this.OrderBy != that.OrderBy { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *ListTestStepsRequest) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*ListTestStepsRequest) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *ListTestStepsResponse) EqualVT(that *ListTestStepsResponse) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if len(this.TestSteps) != len(that.TestSteps) { + return false + } + for i, vx := range this.TestSteps { + vy := that.TestSteps[i] + if p, q := vx, vy; p != q { + if p == nil { + p = &TestStep{} + } + if q == nil { + q = &TestStep{} + } + if !p.EqualVT(q) { + return false + } + } + } + if this.NextPageToken != that.NextPageToken { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *ListTestStepsResponse) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*ListTestStepsResponse) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *UpdateTestStepRequest) EqualVT(that *UpdateTestStepRequest) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if !this.TestStep.EqualVT(that.TestStep) { + return false + } + if !(*fieldmaskpb1.FieldMask)(this.UpdateMask).EqualVT((*fieldmaskpb1.FieldMask)(that.UpdateMask)) { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *UpdateTestStepRequest) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*UpdateTestStepRequest) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *UpdateTestStepResponse) EqualVT(that *UpdateTestStepResponse) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if !this.TestStep.EqualVT(that.TestStep) { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *UpdateTestStepResponse) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*UpdateTestStepResponse) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *DeleteTestStepRequest) EqualVT(that *DeleteTestStepRequest) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if this.TestStepId != that.TestStepId { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *DeleteTestStepRequest) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*DeleteTestStepRequest) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *DeleteTestStepResponse) EqualVT(that *DeleteTestStepResponse) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *DeleteTestStepResponse) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*DeleteTestStepResponse) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *CreateTestMeasurementRequest) EqualVT(that *CreateTestMeasurementRequest) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if !this.TestMeasurement.EqualVT(that.TestMeasurement) { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *CreateTestMeasurementRequest) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*CreateTestMeasurementRequest) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *CreateTestMeasurementResponse) EqualVT(that *CreateTestMeasurementResponse) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if !this.TestMeasurement.EqualVT(that.TestMeasurement) { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *CreateTestMeasurementResponse) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*CreateTestMeasurementResponse) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *CreateTestMeasurementsRequest) EqualVT(that *CreateTestMeasurementsRequest) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if len(this.TestMeasurements) != len(that.TestMeasurements) { + return false + } + for i, vx := range this.TestMeasurements { + vy := that.TestMeasurements[i] + if p, q := vx, vy; p != q { + if p == nil { + p = &TestMeasurement{} + } + if q == nil { + q = &TestMeasurement{} + } + if !p.EqualVT(q) { + return false + } + } + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *CreateTestMeasurementsRequest) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*CreateTestMeasurementsRequest) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *CreateTestMeasurementsResponse) EqualVT(that *CreateTestMeasurementsResponse) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if this.MeasurementsCreatedCount != that.MeasurementsCreatedCount { + return false + } + if len(this.MeasurementIds) != len(that.MeasurementIds) { + return false + } + for i, vx := range this.MeasurementIds { + vy := that.MeasurementIds[i] + if vx != vy { + return false + } + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *CreateTestMeasurementsResponse) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*CreateTestMeasurementsResponse) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *ListTestMeasurementsRequest) EqualVT(that *ListTestMeasurementsRequest) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if this.PageSize != that.PageSize { + return false + } + if this.PageToken != that.PageToken { + return false + } + if this.Filter != that.Filter { + return false + } + if this.OrderBy != that.OrderBy { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *ListTestMeasurementsRequest) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*ListTestMeasurementsRequest) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *ListTestMeasurementsResponse) EqualVT(that *ListTestMeasurementsResponse) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if len(this.TestMeasurements) != len(that.TestMeasurements) { + return false + } + for i, vx := range this.TestMeasurements { + vy := that.TestMeasurements[i] + if p, q := vx, vy; p != q { + if p == nil { + p = &TestMeasurement{} + } + if q == nil { + q = &TestMeasurement{} + } + if !p.EqualVT(q) { + return false + } + } + } + if this.NextPageToken != that.NextPageToken { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *ListTestMeasurementsResponse) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*ListTestMeasurementsResponse) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *CountTestStepsRequest) EqualVT(that *CountTestStepsRequest) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if this.Filter != that.Filter { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *CountTestStepsRequest) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*CountTestStepsRequest) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *CountTestStepsResponse) EqualVT(that *CountTestStepsResponse) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if this.Count != that.Count { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *CountTestStepsResponse) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*CountTestStepsResponse) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *CountTestMeasurementsRequest) EqualVT(that *CountTestMeasurementsRequest) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if this.Filter != that.Filter { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *CountTestMeasurementsRequest) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*CountTestMeasurementsRequest) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *CountTestMeasurementsResponse) EqualVT(that *CountTestMeasurementsResponse) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if this.Count != that.Count { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *CountTestMeasurementsResponse) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*CountTestMeasurementsResponse) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *UpdateTestMeasurementRequest) EqualVT(that *UpdateTestMeasurementRequest) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if !this.TestMeasurement.EqualVT(that.TestMeasurement) { + return false + } + if !(*fieldmaskpb1.FieldMask)(this.UpdateMask).EqualVT((*fieldmaskpb1.FieldMask)(that.UpdateMask)) { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *UpdateTestMeasurementRequest) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*UpdateTestMeasurementRequest) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *UpdateTestMeasurementResponse) EqualVT(that *UpdateTestMeasurementResponse) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if !this.TestMeasurement.EqualVT(that.TestMeasurement) { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *UpdateTestMeasurementResponse) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*UpdateTestMeasurementResponse) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *DeleteTestMeasurementRequest) EqualVT(that *DeleteTestMeasurementRequest) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if this.MeasurementId != that.MeasurementId { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *DeleteTestMeasurementRequest) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*DeleteTestMeasurementRequest) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *DeleteTestMeasurementResponse) EqualVT(that *DeleteTestMeasurementResponse) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *DeleteTestMeasurementResponse) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*DeleteTestMeasurementResponse) + if !ok { + return false + } + return this.EqualVT(that) +} + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +// TestReportServiceClient is the client API for TestReportService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type TestReportServiceClient interface { + // Imports a test report from an already-uploaded file + ImportTestReport(ctx context.Context, in *ImportTestReportRequest, opts ...grpc.CallOption) (*ImportTestReportResponse, error) + // Creates a test report + CreateTestReport(ctx context.Context, in *CreateTestReportRequest, opts ...grpc.CallOption) (*CreateTestReportResponse, error) + // Gets a single test report + GetTestReport(ctx context.Context, in *GetTestReportRequest, opts ...grpc.CallOption) (*GetTestReportResponse, error) + // Lists test reports with optional filtering + ListTestReports(ctx context.Context, in *ListTestReportsRequest, opts ...grpc.CallOption) (*ListTestReportsResponse, error) + // Updates a test report + UpdateTestReport(ctx context.Context, in *UpdateTestReportRequest, opts ...grpc.CallOption) (*UpdateTestReportResponse, error) + // Deletes a test report + DeleteTestReport(ctx context.Context, in *DeleteTestReportRequest, opts ...grpc.CallOption) (*DeleteTestReportResponse, error) + // Creates a test step + CreateTestStep(ctx context.Context, in *CreateTestStepRequest, opts ...grpc.CallOption) (*CreateTestStepResponse, error) + // Lists test steps with optional filtering + ListTestSteps(ctx context.Context, in *ListTestStepsRequest, opts ...grpc.CallOption) (*ListTestStepsResponse, error) + // Updates a test step + UpdateTestStep(ctx context.Context, in *UpdateTestStepRequest, opts ...grpc.CallOption) (*UpdateTestStepResponse, error) + // Deletes a test step + DeleteTestStep(ctx context.Context, in *DeleteTestStepRequest, opts ...grpc.CallOption) (*DeleteTestStepResponse, error) + // Creates a test measurement + CreateTestMeasurement(ctx context.Context, in *CreateTestMeasurementRequest, opts ...grpc.CallOption) (*CreateTestMeasurementResponse, error) + // Creates multiple test measurements in a single request + CreateTestMeasurements(ctx context.Context, in *CreateTestMeasurementsRequest, opts ...grpc.CallOption) (*CreateTestMeasurementsResponse, error) + // Lists test measurements with optional filtering + ListTestMeasurements(ctx context.Context, in *ListTestMeasurementsRequest, opts ...grpc.CallOption) (*ListTestMeasurementsResponse, error) + // Counts test steps with optional filtering + CountTestSteps(ctx context.Context, in *CountTestStepsRequest, opts ...grpc.CallOption) (*CountTestStepsResponse, error) + // Counts test measurements with optional filtering + CountTestMeasurements(ctx context.Context, in *CountTestMeasurementsRequest, opts ...grpc.CallOption) (*CountTestMeasurementsResponse, error) + // Updates a test measurement + UpdateTestMeasurement(ctx context.Context, in *UpdateTestMeasurementRequest, opts ...grpc.CallOption) (*UpdateTestMeasurementResponse, error) + // Deletes a test measurement + DeleteTestMeasurement(ctx context.Context, in *DeleteTestMeasurementRequest, opts ...grpc.CallOption) (*DeleteTestMeasurementResponse, error) +} + +type testReportServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewTestReportServiceClient(cc grpc.ClientConnInterface) TestReportServiceClient { + return &testReportServiceClient{cc} +} + +func (c *testReportServiceClient) ImportTestReport(ctx context.Context, in *ImportTestReportRequest, opts ...grpc.CallOption) (*ImportTestReportResponse, error) { + out := new(ImportTestReportResponse) + err := c.cc.Invoke(ctx, "/sift.test_reports.v1.TestReportService/ImportTestReport", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *testReportServiceClient) CreateTestReport(ctx context.Context, in *CreateTestReportRequest, opts ...grpc.CallOption) (*CreateTestReportResponse, error) { + out := new(CreateTestReportResponse) + err := c.cc.Invoke(ctx, "/sift.test_reports.v1.TestReportService/CreateTestReport", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *testReportServiceClient) GetTestReport(ctx context.Context, in *GetTestReportRequest, opts ...grpc.CallOption) (*GetTestReportResponse, error) { + out := new(GetTestReportResponse) + err := c.cc.Invoke(ctx, "/sift.test_reports.v1.TestReportService/GetTestReport", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *testReportServiceClient) ListTestReports(ctx context.Context, in *ListTestReportsRequest, opts ...grpc.CallOption) (*ListTestReportsResponse, error) { + out := new(ListTestReportsResponse) + err := c.cc.Invoke(ctx, "/sift.test_reports.v1.TestReportService/ListTestReports", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *testReportServiceClient) UpdateTestReport(ctx context.Context, in *UpdateTestReportRequest, opts ...grpc.CallOption) (*UpdateTestReportResponse, error) { + out := new(UpdateTestReportResponse) + err := c.cc.Invoke(ctx, "/sift.test_reports.v1.TestReportService/UpdateTestReport", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *testReportServiceClient) DeleteTestReport(ctx context.Context, in *DeleteTestReportRequest, opts ...grpc.CallOption) (*DeleteTestReportResponse, error) { + out := new(DeleteTestReportResponse) + err := c.cc.Invoke(ctx, "/sift.test_reports.v1.TestReportService/DeleteTestReport", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *testReportServiceClient) CreateTestStep(ctx context.Context, in *CreateTestStepRequest, opts ...grpc.CallOption) (*CreateTestStepResponse, error) { + out := new(CreateTestStepResponse) + err := c.cc.Invoke(ctx, "/sift.test_reports.v1.TestReportService/CreateTestStep", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *testReportServiceClient) ListTestSteps(ctx context.Context, in *ListTestStepsRequest, opts ...grpc.CallOption) (*ListTestStepsResponse, error) { + out := new(ListTestStepsResponse) + err := c.cc.Invoke(ctx, "/sift.test_reports.v1.TestReportService/ListTestSteps", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *testReportServiceClient) UpdateTestStep(ctx context.Context, in *UpdateTestStepRequest, opts ...grpc.CallOption) (*UpdateTestStepResponse, error) { + out := new(UpdateTestStepResponse) + err := c.cc.Invoke(ctx, "/sift.test_reports.v1.TestReportService/UpdateTestStep", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *testReportServiceClient) DeleteTestStep(ctx context.Context, in *DeleteTestStepRequest, opts ...grpc.CallOption) (*DeleteTestStepResponse, error) { + out := new(DeleteTestStepResponse) + err := c.cc.Invoke(ctx, "/sift.test_reports.v1.TestReportService/DeleteTestStep", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *testReportServiceClient) CreateTestMeasurement(ctx context.Context, in *CreateTestMeasurementRequest, opts ...grpc.CallOption) (*CreateTestMeasurementResponse, error) { + out := new(CreateTestMeasurementResponse) + err := c.cc.Invoke(ctx, "/sift.test_reports.v1.TestReportService/CreateTestMeasurement", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *testReportServiceClient) CreateTestMeasurements(ctx context.Context, in *CreateTestMeasurementsRequest, opts ...grpc.CallOption) (*CreateTestMeasurementsResponse, error) { + out := new(CreateTestMeasurementsResponse) + err := c.cc.Invoke(ctx, "/sift.test_reports.v1.TestReportService/CreateTestMeasurements", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *testReportServiceClient) ListTestMeasurements(ctx context.Context, in *ListTestMeasurementsRequest, opts ...grpc.CallOption) (*ListTestMeasurementsResponse, error) { + out := new(ListTestMeasurementsResponse) + err := c.cc.Invoke(ctx, "/sift.test_reports.v1.TestReportService/ListTestMeasurements", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *testReportServiceClient) CountTestSteps(ctx context.Context, in *CountTestStepsRequest, opts ...grpc.CallOption) (*CountTestStepsResponse, error) { + out := new(CountTestStepsResponse) + err := c.cc.Invoke(ctx, "/sift.test_reports.v1.TestReportService/CountTestSteps", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *testReportServiceClient) CountTestMeasurements(ctx context.Context, in *CountTestMeasurementsRequest, opts ...grpc.CallOption) (*CountTestMeasurementsResponse, error) { + out := new(CountTestMeasurementsResponse) + err := c.cc.Invoke(ctx, "/sift.test_reports.v1.TestReportService/CountTestMeasurements", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *testReportServiceClient) UpdateTestMeasurement(ctx context.Context, in *UpdateTestMeasurementRequest, opts ...grpc.CallOption) (*UpdateTestMeasurementResponse, error) { + out := new(UpdateTestMeasurementResponse) + err := c.cc.Invoke(ctx, "/sift.test_reports.v1.TestReportService/UpdateTestMeasurement", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *testReportServiceClient) DeleteTestMeasurement(ctx context.Context, in *DeleteTestMeasurementRequest, opts ...grpc.CallOption) (*DeleteTestMeasurementResponse, error) { + out := new(DeleteTestMeasurementResponse) + err := c.cc.Invoke(ctx, "/sift.test_reports.v1.TestReportService/DeleteTestMeasurement", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// TestReportServiceServer is the server API for TestReportService service. +// All implementations must embed UnimplementedTestReportServiceServer +// for forward compatibility +type TestReportServiceServer interface { + // Imports a test report from an already-uploaded file + ImportTestReport(context.Context, *ImportTestReportRequest) (*ImportTestReportResponse, error) + // Creates a test report + CreateTestReport(context.Context, *CreateTestReportRequest) (*CreateTestReportResponse, error) + // Gets a single test report + GetTestReport(context.Context, *GetTestReportRequest) (*GetTestReportResponse, error) + // Lists test reports with optional filtering + ListTestReports(context.Context, *ListTestReportsRequest) (*ListTestReportsResponse, error) + // Updates a test report + UpdateTestReport(context.Context, *UpdateTestReportRequest) (*UpdateTestReportResponse, error) + // Deletes a test report + DeleteTestReport(context.Context, *DeleteTestReportRequest) (*DeleteTestReportResponse, error) + // Creates a test step + CreateTestStep(context.Context, *CreateTestStepRequest) (*CreateTestStepResponse, error) + // Lists test steps with optional filtering + ListTestSteps(context.Context, *ListTestStepsRequest) (*ListTestStepsResponse, error) + // Updates a test step + UpdateTestStep(context.Context, *UpdateTestStepRequest) (*UpdateTestStepResponse, error) + // Deletes a test step + DeleteTestStep(context.Context, *DeleteTestStepRequest) (*DeleteTestStepResponse, error) + // Creates a test measurement + CreateTestMeasurement(context.Context, *CreateTestMeasurementRequest) (*CreateTestMeasurementResponse, error) + // Creates multiple test measurements in a single request + CreateTestMeasurements(context.Context, *CreateTestMeasurementsRequest) (*CreateTestMeasurementsResponse, error) + // Lists test measurements with optional filtering + ListTestMeasurements(context.Context, *ListTestMeasurementsRequest) (*ListTestMeasurementsResponse, error) + // Counts test steps with optional filtering + CountTestSteps(context.Context, *CountTestStepsRequest) (*CountTestStepsResponse, error) + // Counts test measurements with optional filtering + CountTestMeasurements(context.Context, *CountTestMeasurementsRequest) (*CountTestMeasurementsResponse, error) + // Updates a test measurement + UpdateTestMeasurement(context.Context, *UpdateTestMeasurementRequest) (*UpdateTestMeasurementResponse, error) + // Deletes a test measurement + DeleteTestMeasurement(context.Context, *DeleteTestMeasurementRequest) (*DeleteTestMeasurementResponse, error) + mustEmbedUnimplementedTestReportServiceServer() +} + +// UnimplementedTestReportServiceServer must be embedded to have forward compatible implementations. +type UnimplementedTestReportServiceServer struct { +} + +func (UnimplementedTestReportServiceServer) ImportTestReport(context.Context, *ImportTestReportRequest) (*ImportTestReportResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ImportTestReport not implemented") +} +func (UnimplementedTestReportServiceServer) CreateTestReport(context.Context, *CreateTestReportRequest) (*CreateTestReportResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateTestReport not implemented") +} +func (UnimplementedTestReportServiceServer) GetTestReport(context.Context, *GetTestReportRequest) (*GetTestReportResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetTestReport not implemented") +} +func (UnimplementedTestReportServiceServer) ListTestReports(context.Context, *ListTestReportsRequest) (*ListTestReportsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListTestReports not implemented") +} +func (UnimplementedTestReportServiceServer) UpdateTestReport(context.Context, *UpdateTestReportRequest) (*UpdateTestReportResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateTestReport not implemented") +} +func (UnimplementedTestReportServiceServer) DeleteTestReport(context.Context, *DeleteTestReportRequest) (*DeleteTestReportResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DeleteTestReport not implemented") +} +func (UnimplementedTestReportServiceServer) CreateTestStep(context.Context, *CreateTestStepRequest) (*CreateTestStepResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateTestStep not implemented") +} +func (UnimplementedTestReportServiceServer) ListTestSteps(context.Context, *ListTestStepsRequest) (*ListTestStepsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListTestSteps not implemented") +} +func (UnimplementedTestReportServiceServer) UpdateTestStep(context.Context, *UpdateTestStepRequest) (*UpdateTestStepResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateTestStep not implemented") +} +func (UnimplementedTestReportServiceServer) DeleteTestStep(context.Context, *DeleteTestStepRequest) (*DeleteTestStepResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DeleteTestStep not implemented") +} +func (UnimplementedTestReportServiceServer) CreateTestMeasurement(context.Context, *CreateTestMeasurementRequest) (*CreateTestMeasurementResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateTestMeasurement not implemented") +} +func (UnimplementedTestReportServiceServer) CreateTestMeasurements(context.Context, *CreateTestMeasurementsRequest) (*CreateTestMeasurementsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateTestMeasurements not implemented") +} +func (UnimplementedTestReportServiceServer) ListTestMeasurements(context.Context, *ListTestMeasurementsRequest) (*ListTestMeasurementsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListTestMeasurements not implemented") +} +func (UnimplementedTestReportServiceServer) CountTestSteps(context.Context, *CountTestStepsRequest) (*CountTestStepsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CountTestSteps not implemented") +} +func (UnimplementedTestReportServiceServer) CountTestMeasurements(context.Context, *CountTestMeasurementsRequest) (*CountTestMeasurementsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CountTestMeasurements not implemented") +} +func (UnimplementedTestReportServiceServer) UpdateTestMeasurement(context.Context, *UpdateTestMeasurementRequest) (*UpdateTestMeasurementResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateTestMeasurement not implemented") +} +func (UnimplementedTestReportServiceServer) DeleteTestMeasurement(context.Context, *DeleteTestMeasurementRequest) (*DeleteTestMeasurementResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DeleteTestMeasurement not implemented") +} +func (UnimplementedTestReportServiceServer) mustEmbedUnimplementedTestReportServiceServer() {} + +// UnsafeTestReportServiceServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to TestReportServiceServer will +// result in compilation errors. +type UnsafeTestReportServiceServer interface { + mustEmbedUnimplementedTestReportServiceServer() +} + +func RegisterTestReportServiceServer(s grpc.ServiceRegistrar, srv TestReportServiceServer) { + s.RegisterService(&TestReportService_ServiceDesc, srv) +} + +func _TestReportService_ImportTestReport_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ImportTestReportRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TestReportServiceServer).ImportTestReport(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/sift.test_reports.v1.TestReportService/ImportTestReport", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TestReportServiceServer).ImportTestReport(ctx, req.(*ImportTestReportRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _TestReportService_CreateTestReport_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateTestReportRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TestReportServiceServer).CreateTestReport(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/sift.test_reports.v1.TestReportService/CreateTestReport", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TestReportServiceServer).CreateTestReport(ctx, req.(*CreateTestReportRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _TestReportService_GetTestReport_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetTestReportRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TestReportServiceServer).GetTestReport(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/sift.test_reports.v1.TestReportService/GetTestReport", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TestReportServiceServer).GetTestReport(ctx, req.(*GetTestReportRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _TestReportService_ListTestReports_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListTestReportsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TestReportServiceServer).ListTestReports(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/sift.test_reports.v1.TestReportService/ListTestReports", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TestReportServiceServer).ListTestReports(ctx, req.(*ListTestReportsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _TestReportService_UpdateTestReport_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateTestReportRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TestReportServiceServer).UpdateTestReport(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/sift.test_reports.v1.TestReportService/UpdateTestReport", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TestReportServiceServer).UpdateTestReport(ctx, req.(*UpdateTestReportRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _TestReportService_DeleteTestReport_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteTestReportRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TestReportServiceServer).DeleteTestReport(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/sift.test_reports.v1.TestReportService/DeleteTestReport", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TestReportServiceServer).DeleteTestReport(ctx, req.(*DeleteTestReportRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _TestReportService_CreateTestStep_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateTestStepRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TestReportServiceServer).CreateTestStep(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/sift.test_reports.v1.TestReportService/CreateTestStep", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TestReportServiceServer).CreateTestStep(ctx, req.(*CreateTestStepRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _TestReportService_ListTestSteps_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListTestStepsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TestReportServiceServer).ListTestSteps(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/sift.test_reports.v1.TestReportService/ListTestSteps", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TestReportServiceServer).ListTestSteps(ctx, req.(*ListTestStepsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _TestReportService_UpdateTestStep_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateTestStepRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TestReportServiceServer).UpdateTestStep(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/sift.test_reports.v1.TestReportService/UpdateTestStep", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TestReportServiceServer).UpdateTestStep(ctx, req.(*UpdateTestStepRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _TestReportService_DeleteTestStep_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteTestStepRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TestReportServiceServer).DeleteTestStep(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/sift.test_reports.v1.TestReportService/DeleteTestStep", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TestReportServiceServer).DeleteTestStep(ctx, req.(*DeleteTestStepRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _TestReportService_CreateTestMeasurement_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateTestMeasurementRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TestReportServiceServer).CreateTestMeasurement(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/sift.test_reports.v1.TestReportService/CreateTestMeasurement", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TestReportServiceServer).CreateTestMeasurement(ctx, req.(*CreateTestMeasurementRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _TestReportService_CreateTestMeasurements_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateTestMeasurementsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TestReportServiceServer).CreateTestMeasurements(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/sift.test_reports.v1.TestReportService/CreateTestMeasurements", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TestReportServiceServer).CreateTestMeasurements(ctx, req.(*CreateTestMeasurementsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _TestReportService_ListTestMeasurements_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListTestMeasurementsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TestReportServiceServer).ListTestMeasurements(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/sift.test_reports.v1.TestReportService/ListTestMeasurements", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TestReportServiceServer).ListTestMeasurements(ctx, req.(*ListTestMeasurementsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _TestReportService_CountTestSteps_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CountTestStepsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TestReportServiceServer).CountTestSteps(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/sift.test_reports.v1.TestReportService/CountTestSteps", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TestReportServiceServer).CountTestSteps(ctx, req.(*CountTestStepsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _TestReportService_CountTestMeasurements_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CountTestMeasurementsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TestReportServiceServer).CountTestMeasurements(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/sift.test_reports.v1.TestReportService/CountTestMeasurements", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TestReportServiceServer).CountTestMeasurements(ctx, req.(*CountTestMeasurementsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _TestReportService_UpdateTestMeasurement_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateTestMeasurementRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TestReportServiceServer).UpdateTestMeasurement(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/sift.test_reports.v1.TestReportService/UpdateTestMeasurement", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TestReportServiceServer).UpdateTestMeasurement(ctx, req.(*UpdateTestMeasurementRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _TestReportService_DeleteTestMeasurement_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteTestMeasurementRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TestReportServiceServer).DeleteTestMeasurement(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/sift.test_reports.v1.TestReportService/DeleteTestMeasurement", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TestReportServiceServer).DeleteTestMeasurement(ctx, req.(*DeleteTestMeasurementRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// TestReportService_ServiceDesc is the grpc.ServiceDesc for TestReportService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var TestReportService_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "sift.test_reports.v1.TestReportService", + HandlerType: (*TestReportServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ImportTestReport", + Handler: _TestReportService_ImportTestReport_Handler, + }, + { + MethodName: "CreateTestReport", + Handler: _TestReportService_CreateTestReport_Handler, + }, + { + MethodName: "GetTestReport", + Handler: _TestReportService_GetTestReport_Handler, + }, + { + MethodName: "ListTestReports", + Handler: _TestReportService_ListTestReports_Handler, + }, + { + MethodName: "UpdateTestReport", + Handler: _TestReportService_UpdateTestReport_Handler, + }, + { + MethodName: "DeleteTestReport", + Handler: _TestReportService_DeleteTestReport_Handler, + }, + { + MethodName: "CreateTestStep", + Handler: _TestReportService_CreateTestStep_Handler, + }, + { + MethodName: "ListTestSteps", + Handler: _TestReportService_ListTestSteps_Handler, + }, + { + MethodName: "UpdateTestStep", + Handler: _TestReportService_UpdateTestStep_Handler, + }, + { + MethodName: "DeleteTestStep", + Handler: _TestReportService_DeleteTestStep_Handler, + }, + { + MethodName: "CreateTestMeasurement", + Handler: _TestReportService_CreateTestMeasurement_Handler, + }, + { + MethodName: "CreateTestMeasurements", + Handler: _TestReportService_CreateTestMeasurements_Handler, + }, + { + MethodName: "ListTestMeasurements", + Handler: _TestReportService_ListTestMeasurements_Handler, + }, + { + MethodName: "CountTestSteps", + Handler: _TestReportService_CountTestSteps_Handler, + }, + { + MethodName: "CountTestMeasurements", + Handler: _TestReportService_CountTestMeasurements_Handler, + }, + { + MethodName: "UpdateTestMeasurement", + Handler: _TestReportService_UpdateTestMeasurement_Handler, + }, + { + MethodName: "DeleteTestMeasurement", + Handler: _TestReportService_DeleteTestMeasurement_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "sift/test_reports/v1/test_reports.proto", +} + +func (m *TestReport) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TestReport) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *TestReport) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.IsArchived { + i-- + if m.IsArchived { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x68 + } + if m.ArchivedDate != nil { + size, err := (*timestamppb1.Timestamp)(m.ArchivedDate).MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x62 + } + if len(m.SystemOperator) > 0 { + i -= len(m.SystemOperator) + copy(dAtA[i:], m.SystemOperator) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.SystemOperator))) + i-- + dAtA[i] = 0x5a + } + if len(m.PartNumber) > 0 { + i -= len(m.PartNumber) + copy(dAtA[i:], m.PartNumber) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.PartNumber))) + i-- + dAtA[i] = 0x52 + } + if len(m.SerialNumber) > 0 { + i -= len(m.SerialNumber) + copy(dAtA[i:], m.SerialNumber) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.SerialNumber))) + i-- + dAtA[i] = 0x4a + } + if len(m.Metadata) > 0 { + for iNdEx := len(m.Metadata) - 1; iNdEx >= 0; iNdEx-- { + if vtmsg, ok := interface{}(m.Metadata[iNdEx]).(interface { + MarshalToSizedBufferVT([]byte) (int, error) + }); ok { + size, err := vtmsg.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + } else { + encoded, err := proto.Marshal(m.Metadata[iNdEx]) + if err != nil { + return 0, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(encoded))) + } + i-- + dAtA[i] = 0x42 + } + } + if m.EndTime != nil { + size, err := (*timestamppb1.Timestamp)(m.EndTime).MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x3a + } + if m.StartTime != nil { + size, err := (*timestamppb1.Timestamp)(m.StartTime).MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x32 + } + if len(m.TestCase) > 0 { + i -= len(m.TestCase) + copy(dAtA[i:], m.TestCase) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.TestCase))) + i-- + dAtA[i] = 0x2a + } + if len(m.TestSystemName) > 0 { + i -= len(m.TestSystemName) + copy(dAtA[i:], m.TestSystemName) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.TestSystemName))) + i-- + dAtA[i] = 0x22 + } + if len(m.Name) > 0 { + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x1a + } + if m.Status != 0 { + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.Status)) + i-- + dAtA[i] = 0x10 + } + if len(m.TestReportId) > 0 { + i -= len(m.TestReportId) + copy(dAtA[i:], m.TestReportId) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.TestReportId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *TestStep) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TestStep) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *TestStep) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.ErrorInfo != nil { + size, err := m.ErrorInfo.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x5a + } + if m.EndTime != nil { + size, err := (*timestamppb1.Timestamp)(m.EndTime).MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x52 + } + if m.StartTime != nil { + size, err := (*timestamppb1.Timestamp)(m.StartTime).MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x4a + } + if m.Status != 0 { + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.Status)) + i-- + dAtA[i] = 0x40 + } + if len(m.StepPath) > 0 { + i -= len(m.StepPath) + copy(dAtA[i:], m.StepPath) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.StepPath))) + i-- + dAtA[i] = 0x3a + } + if m.StepType != 0 { + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.StepType)) + i-- + dAtA[i] = 0x30 + } + if len(m.Description) > 0 { + i -= len(m.Description) + copy(dAtA[i:], m.Description) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Description))) + i-- + dAtA[i] = 0x2a + } + if len(m.Name) > 0 { + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x22 + } + if len(m.ParentStepId) > 0 { + i -= len(m.ParentStepId) + copy(dAtA[i:], m.ParentStepId) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.ParentStepId))) + i-- + dAtA[i] = 0x1a + } + if len(m.TestReportId) > 0 { + i -= len(m.TestReportId) + copy(dAtA[i:], m.TestReportId) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.TestReportId))) + i-- + dAtA[i] = 0x12 + } + if len(m.TestStepId) > 0 { + i -= len(m.TestStepId) + copy(dAtA[i:], m.TestStepId) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.TestStepId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *ErrorInfo) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ErrorInfo) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *ErrorInfo) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.ErrorMessage) > 0 { + i -= len(m.ErrorMessage) + copy(dAtA[i:], m.ErrorMessage) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.ErrorMessage))) + i-- + dAtA[i] = 0x12 + } + if m.ErrorCode != 0 { + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.ErrorCode)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *TestMeasurement) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TestMeasurement) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *TestMeasurement) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if vtmsg, ok := m.Bounds.(interface { + MarshalToSizedBufferVT([]byte) (int, error) + }); ok { + size, err := vtmsg.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + } + if vtmsg, ok := m.Value.(interface { + MarshalToSizedBufferVT([]byte) (int, error) + }); ok { + size, err := vtmsg.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + } + if m.Timestamp != nil { + size, err := (*timestamppb1.Timestamp)(m.Timestamp).MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x6a + } + if m.Passed { + i-- + if m.Passed { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x60 + } + if m.Unit != nil { + if vtmsg, ok := interface{}(m.Unit).(interface { + MarshalToSizedBufferVT([]byte) (int, error) + }); ok { + size, err := vtmsg.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + } else { + encoded, err := proto.Marshal(m.Unit) + if err != nil { + return 0, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(encoded))) + } + i-- + dAtA[i] = 0x4a + } + if len(m.TestReportId) > 0 { + i -= len(m.TestReportId) + copy(dAtA[i:], m.TestReportId) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.TestReportId))) + i-- + dAtA[i] = 0x2a + } + if len(m.TestStepId) > 0 { + i -= len(m.TestStepId) + copy(dAtA[i:], m.TestStepId) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.TestStepId))) + i-- + dAtA[i] = 0x22 + } + if len(m.Name) > 0 { + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x1a + } + if m.MeasurementType != 0 { + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.MeasurementType)) + i-- + dAtA[i] = 0x10 + } + if len(m.MeasurementId) > 0 { + i -= len(m.MeasurementId) + copy(dAtA[i:], m.MeasurementId) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.MeasurementId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *TestMeasurement_NumericValue) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *TestMeasurement_NumericValue) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + i := len(dAtA) + i -= 8 + binary.LittleEndian.PutUint64(dAtA[i:], uint64(math.Float64bits(float64(m.NumericValue)))) + i-- + dAtA[i] = 0x31 + return len(dAtA) - i, nil +} +func (m *TestMeasurement_StringValue) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *TestMeasurement_StringValue) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + i := len(dAtA) + i -= len(m.StringValue) + copy(dAtA[i:], m.StringValue) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.StringValue))) + i-- + dAtA[i] = 0x3a + return len(dAtA) - i, nil +} +func (m *TestMeasurement_BooleanValue) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *TestMeasurement_BooleanValue) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + i := len(dAtA) + i-- + if m.BooleanValue { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x40 + return len(dAtA) - i, nil +} +func (m *TestMeasurement_NumericBounds) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *TestMeasurement_NumericBounds) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + i := len(dAtA) + if m.NumericBounds != nil { + size, err := m.NumericBounds.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x52 + } + return len(dAtA) - i, nil +} +func (m *TestMeasurement_StringBounds) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *TestMeasurement_StringBounds) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + i := len(dAtA) + if m.StringBounds != nil { + size, err := m.StringBounds.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x5a + } + return len(dAtA) - i, nil +} +func (m *NumericBounds) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *NumericBounds) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *NumericBounds) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.Max != nil { + i -= 8 + binary.LittleEndian.PutUint64(dAtA[i:], uint64(math.Float64bits(float64(*m.Max)))) + i-- + dAtA[i] = 0x11 + } + if m.Min != nil { + i -= 8 + binary.LittleEndian.PutUint64(dAtA[i:], uint64(math.Float64bits(float64(*m.Min)))) + i-- + dAtA[i] = 0x9 + } + return len(dAtA) - i, nil +} + +func (m *StringBounds) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *StringBounds) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *StringBounds) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.ExpectedValue) > 0 { + i -= len(m.ExpectedValue) + copy(dAtA[i:], m.ExpectedValue) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.ExpectedValue))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *ImportTestReportRequest) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ImportTestReportRequest) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *ImportTestReportRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.RemoteFileId) > 0 { + i -= len(m.RemoteFileId) + copy(dAtA[i:], m.RemoteFileId) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.RemoteFileId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *ImportTestReportResponse) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ImportTestReportResponse) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *ImportTestReportResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.TestReport != nil { + size, err := m.TestReport.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *CreateTestReportRequest) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CreateTestReportRequest) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *CreateTestReportRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.SystemOperator) > 0 { + i -= len(m.SystemOperator) + copy(dAtA[i:], m.SystemOperator) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.SystemOperator))) + i-- + dAtA[i] = 0x52 + } + if len(m.PartNumber) > 0 { + i -= len(m.PartNumber) + copy(dAtA[i:], m.PartNumber) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.PartNumber))) + i-- + dAtA[i] = 0x4a + } + if len(m.SerialNumber) > 0 { + i -= len(m.SerialNumber) + copy(dAtA[i:], m.SerialNumber) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.SerialNumber))) + i-- + dAtA[i] = 0x42 + } + if len(m.Metadata) > 0 { + for iNdEx := len(m.Metadata) - 1; iNdEx >= 0; iNdEx-- { + if vtmsg, ok := interface{}(m.Metadata[iNdEx]).(interface { + MarshalToSizedBufferVT([]byte) (int, error) + }); ok { + size, err := vtmsg.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + } else { + encoded, err := proto.Marshal(m.Metadata[iNdEx]) + if err != nil { + return 0, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(encoded))) + } + i-- + dAtA[i] = 0x3a + } + } + if m.EndTime != nil { + size, err := (*timestamppb1.Timestamp)(m.EndTime).MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x32 + } + if m.StartTime != nil { + size, err := (*timestamppb1.Timestamp)(m.StartTime).MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x2a + } + if len(m.TestCase) > 0 { + i -= len(m.TestCase) + copy(dAtA[i:], m.TestCase) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.TestCase))) + i-- + dAtA[i] = 0x22 + } + if len(m.TestSystemName) > 0 { + i -= len(m.TestSystemName) + copy(dAtA[i:], m.TestSystemName) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.TestSystemName))) + i-- + dAtA[i] = 0x1a + } + if len(m.Name) > 0 { + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x12 + } + if m.Status != 0 { + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.Status)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *CreateTestReportResponse) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CreateTestReportResponse) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *CreateTestReportResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.TestReport != nil { + size, err := m.TestReport.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *GetTestReportRequest) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GetTestReportRequest) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *GetTestReportRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.TestReportId) > 0 { + i -= len(m.TestReportId) + copy(dAtA[i:], m.TestReportId) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.TestReportId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *GetTestReportResponse) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GetTestReportResponse) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *GetTestReportResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.TestReport != nil { + size, err := m.TestReport.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *ListTestReportsRequest) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ListTestReportsRequest) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *ListTestReportsRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.OrderBy) > 0 { + i -= len(m.OrderBy) + copy(dAtA[i:], m.OrderBy) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.OrderBy))) + i-- + dAtA[i] = 0x22 + } + if len(m.Filter) > 0 { + i -= len(m.Filter) + copy(dAtA[i:], m.Filter) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Filter))) + i-- + dAtA[i] = 0x1a + } + if len(m.PageToken) > 0 { + i -= len(m.PageToken) + copy(dAtA[i:], m.PageToken) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.PageToken))) + i-- + dAtA[i] = 0x12 + } + if m.PageSize != 0 { + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.PageSize)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *ListTestReportsResponse) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ListTestReportsResponse) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *ListTestReportsResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.NextPageToken) > 0 { + i -= len(m.NextPageToken) + copy(dAtA[i:], m.NextPageToken) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.NextPageToken))) + i-- + dAtA[i] = 0x12 + } + if len(m.TestReports) > 0 { + for iNdEx := len(m.TestReports) - 1; iNdEx >= 0; iNdEx-- { + size, err := m.TestReports[iNdEx].MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *UpdateTestReportRequest) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *UpdateTestReportRequest) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *UpdateTestReportRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.UpdateMask != nil { + size, err := (*fieldmaskpb1.FieldMask)(m.UpdateMask).MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x12 + } + if m.TestReport != nil { + size, err := m.TestReport.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *UpdateTestReportResponse) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *UpdateTestReportResponse) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *UpdateTestReportResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.TestReport != nil { + size, err := m.TestReport.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *DeleteTestReportRequest) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DeleteTestReportRequest) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *DeleteTestReportRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.TestReportId) > 0 { + i -= len(m.TestReportId) + copy(dAtA[i:], m.TestReportId) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.TestReportId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *DeleteTestReportResponse) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DeleteTestReportResponse) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *DeleteTestReportResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + return len(dAtA) - i, nil +} + +func (m *CreateTestStepRequest) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CreateTestStepRequest) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *CreateTestStepRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.TestStep != nil { + size, err := m.TestStep.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *CreateTestStepResponse) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CreateTestStepResponse) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *CreateTestStepResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.TestStep != nil { + size, err := m.TestStep.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *ListTestStepsRequest) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ListTestStepsRequest) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *ListTestStepsRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.OrderBy) > 0 { + i -= len(m.OrderBy) + copy(dAtA[i:], m.OrderBy) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.OrderBy))) + i-- + dAtA[i] = 0x22 + } + if len(m.Filter) > 0 { + i -= len(m.Filter) + copy(dAtA[i:], m.Filter) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Filter))) + i-- + dAtA[i] = 0x1a + } + if len(m.PageToken) > 0 { + i -= len(m.PageToken) + copy(dAtA[i:], m.PageToken) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.PageToken))) + i-- + dAtA[i] = 0x12 + } + if m.PageSize != 0 { + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.PageSize)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *ListTestStepsResponse) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ListTestStepsResponse) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *ListTestStepsResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.NextPageToken) > 0 { + i -= len(m.NextPageToken) + copy(dAtA[i:], m.NextPageToken) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.NextPageToken))) + i-- + dAtA[i] = 0x12 + } + if len(m.TestSteps) > 0 { + for iNdEx := len(m.TestSteps) - 1; iNdEx >= 0; iNdEx-- { + size, err := m.TestSteps[iNdEx].MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *UpdateTestStepRequest) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *UpdateTestStepRequest) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *UpdateTestStepRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.UpdateMask != nil { + size, err := (*fieldmaskpb1.FieldMask)(m.UpdateMask).MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x12 + } + if m.TestStep != nil { + size, err := m.TestStep.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *UpdateTestStepResponse) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *UpdateTestStepResponse) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *UpdateTestStepResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.TestStep != nil { + size, err := m.TestStep.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *DeleteTestStepRequest) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DeleteTestStepRequest) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *DeleteTestStepRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.TestStepId) > 0 { + i -= len(m.TestStepId) + copy(dAtA[i:], m.TestStepId) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.TestStepId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *DeleteTestStepResponse) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DeleteTestStepResponse) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *DeleteTestStepResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + return len(dAtA) - i, nil +} + +func (m *CreateTestMeasurementRequest) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CreateTestMeasurementRequest) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *CreateTestMeasurementRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.TestMeasurement != nil { + size, err := m.TestMeasurement.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *CreateTestMeasurementResponse) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CreateTestMeasurementResponse) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *CreateTestMeasurementResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.TestMeasurement != nil { + size, err := m.TestMeasurement.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *CreateTestMeasurementsRequest) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CreateTestMeasurementsRequest) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *CreateTestMeasurementsRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.TestMeasurements) > 0 { + for iNdEx := len(m.TestMeasurements) - 1; iNdEx >= 0; iNdEx-- { + size, err := m.TestMeasurements[iNdEx].MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *CreateTestMeasurementsResponse) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CreateTestMeasurementsResponse) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *CreateTestMeasurementsResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.MeasurementIds) > 0 { + for iNdEx := len(m.MeasurementIds) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.MeasurementIds[iNdEx]) + copy(dAtA[i:], m.MeasurementIds[iNdEx]) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.MeasurementIds[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + if m.MeasurementsCreatedCount != 0 { + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.MeasurementsCreatedCount)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *ListTestMeasurementsRequest) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ListTestMeasurementsRequest) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *ListTestMeasurementsRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.OrderBy) > 0 { + i -= len(m.OrderBy) + copy(dAtA[i:], m.OrderBy) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.OrderBy))) + i-- + dAtA[i] = 0x22 + } + if len(m.Filter) > 0 { + i -= len(m.Filter) + copy(dAtA[i:], m.Filter) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Filter))) + i-- + dAtA[i] = 0x1a + } + if len(m.PageToken) > 0 { + i -= len(m.PageToken) + copy(dAtA[i:], m.PageToken) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.PageToken))) + i-- + dAtA[i] = 0x12 + } + if m.PageSize != 0 { + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.PageSize)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *ListTestMeasurementsResponse) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ListTestMeasurementsResponse) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *ListTestMeasurementsResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.NextPageToken) > 0 { + i -= len(m.NextPageToken) + copy(dAtA[i:], m.NextPageToken) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.NextPageToken))) + i-- + dAtA[i] = 0x12 + } + if len(m.TestMeasurements) > 0 { + for iNdEx := len(m.TestMeasurements) - 1; iNdEx >= 0; iNdEx-- { + size, err := m.TestMeasurements[iNdEx].MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *CountTestStepsRequest) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CountTestStepsRequest) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *CountTestStepsRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.Filter) > 0 { + i -= len(m.Filter) + copy(dAtA[i:], m.Filter) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Filter))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *CountTestStepsResponse) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CountTestStepsResponse) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *CountTestStepsResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.Count != 0 { + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.Count)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *CountTestMeasurementsRequest) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CountTestMeasurementsRequest) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *CountTestMeasurementsRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.Filter) > 0 { + i -= len(m.Filter) + copy(dAtA[i:], m.Filter) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Filter))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *CountTestMeasurementsResponse) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CountTestMeasurementsResponse) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *CountTestMeasurementsResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.Count != 0 { + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.Count)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *UpdateTestMeasurementRequest) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *UpdateTestMeasurementRequest) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *UpdateTestMeasurementRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.UpdateMask != nil { + size, err := (*fieldmaskpb1.FieldMask)(m.UpdateMask).MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x12 + } + if m.TestMeasurement != nil { + size, err := m.TestMeasurement.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *UpdateTestMeasurementResponse) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *UpdateTestMeasurementResponse) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *UpdateTestMeasurementResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.TestMeasurement != nil { + size, err := m.TestMeasurement.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *DeleteTestMeasurementRequest) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DeleteTestMeasurementRequest) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *DeleteTestMeasurementRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.MeasurementId) > 0 { + i -= len(m.MeasurementId) + copy(dAtA[i:], m.MeasurementId) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.MeasurementId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *DeleteTestMeasurementResponse) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DeleteTestMeasurementResponse) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *DeleteTestMeasurementResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + return len(dAtA) - i, nil +} + +func (m *TestReport) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TestReport) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *TestReport) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.IsArchived { + i-- + if m.IsArchived { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x68 + } + if m.ArchivedDate != nil { + size, err := (*timestamppb1.Timestamp)(m.ArchivedDate).MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x62 + } + if len(m.SystemOperator) > 0 { + i -= len(m.SystemOperator) + copy(dAtA[i:], m.SystemOperator) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.SystemOperator))) + i-- + dAtA[i] = 0x5a + } + if len(m.PartNumber) > 0 { + i -= len(m.PartNumber) + copy(dAtA[i:], m.PartNumber) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.PartNumber))) + i-- + dAtA[i] = 0x52 + } + if len(m.SerialNumber) > 0 { + i -= len(m.SerialNumber) + copy(dAtA[i:], m.SerialNumber) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.SerialNumber))) + i-- + dAtA[i] = 0x4a + } + if len(m.Metadata) > 0 { + for iNdEx := len(m.Metadata) - 1; iNdEx >= 0; iNdEx-- { + if vtmsg, ok := interface{}(m.Metadata[iNdEx]).(interface { + MarshalToSizedBufferVTStrict([]byte) (int, error) + }); ok { + size, err := vtmsg.MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + } else { + encoded, err := proto.Marshal(m.Metadata[iNdEx]) + if err != nil { + return 0, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(encoded))) + } + i-- + dAtA[i] = 0x42 + } + } + if m.EndTime != nil { + size, err := (*timestamppb1.Timestamp)(m.EndTime).MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x3a + } + if m.StartTime != nil { + size, err := (*timestamppb1.Timestamp)(m.StartTime).MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x32 + } + if len(m.TestCase) > 0 { + i -= len(m.TestCase) + copy(dAtA[i:], m.TestCase) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.TestCase))) + i-- + dAtA[i] = 0x2a + } + if len(m.TestSystemName) > 0 { + i -= len(m.TestSystemName) + copy(dAtA[i:], m.TestSystemName) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.TestSystemName))) + i-- + dAtA[i] = 0x22 + } + if len(m.Name) > 0 { + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x1a + } + if m.Status != 0 { + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.Status)) + i-- + dAtA[i] = 0x10 + } + if len(m.TestReportId) > 0 { + i -= len(m.TestReportId) + copy(dAtA[i:], m.TestReportId) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.TestReportId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *TestStep) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TestStep) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *TestStep) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.ErrorInfo != nil { + size, err := m.ErrorInfo.MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x5a + } + if m.EndTime != nil { + size, err := (*timestamppb1.Timestamp)(m.EndTime).MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x52 + } + if m.StartTime != nil { + size, err := (*timestamppb1.Timestamp)(m.StartTime).MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x4a + } + if m.Status != 0 { + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.Status)) + i-- + dAtA[i] = 0x40 + } + if len(m.StepPath) > 0 { + i -= len(m.StepPath) + copy(dAtA[i:], m.StepPath) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.StepPath))) + i-- + dAtA[i] = 0x3a + } + if m.StepType != 0 { + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.StepType)) + i-- + dAtA[i] = 0x30 + } + if len(m.Description) > 0 { + i -= len(m.Description) + copy(dAtA[i:], m.Description) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Description))) + i-- + dAtA[i] = 0x2a + } + if len(m.Name) > 0 { + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x22 + } + if len(m.ParentStepId) > 0 { + i -= len(m.ParentStepId) + copy(dAtA[i:], m.ParentStepId) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.ParentStepId))) + i-- + dAtA[i] = 0x1a + } + if len(m.TestReportId) > 0 { + i -= len(m.TestReportId) + copy(dAtA[i:], m.TestReportId) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.TestReportId))) + i-- + dAtA[i] = 0x12 + } + if len(m.TestStepId) > 0 { + i -= len(m.TestStepId) + copy(dAtA[i:], m.TestStepId) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.TestStepId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *ErrorInfo) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ErrorInfo) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *ErrorInfo) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.ErrorMessage) > 0 { + i -= len(m.ErrorMessage) + copy(dAtA[i:], m.ErrorMessage) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.ErrorMessage))) + i-- + dAtA[i] = 0x12 + } + if m.ErrorCode != 0 { + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.ErrorCode)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *TestMeasurement) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TestMeasurement) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *TestMeasurement) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.Timestamp != nil { + size, err := (*timestamppb1.Timestamp)(m.Timestamp).MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x6a + } + if m.Passed { + i-- + if m.Passed { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x60 + } + if msg, ok := m.Bounds.(*TestMeasurement_StringBounds); ok { + size, err := msg.MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + } + if msg, ok := m.Bounds.(*TestMeasurement_NumericBounds); ok { + size, err := msg.MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + } + if m.Unit != nil { + if vtmsg, ok := interface{}(m.Unit).(interface { + MarshalToSizedBufferVTStrict([]byte) (int, error) + }); ok { + size, err := vtmsg.MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + } else { + encoded, err := proto.Marshal(m.Unit) + if err != nil { + return 0, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(encoded))) + } + i-- + dAtA[i] = 0x4a + } + if msg, ok := m.Value.(*TestMeasurement_BooleanValue); ok { + size, err := msg.MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + } + if msg, ok := m.Value.(*TestMeasurement_StringValue); ok { + size, err := msg.MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + } + if msg, ok := m.Value.(*TestMeasurement_NumericValue); ok { + size, err := msg.MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + } + if len(m.TestReportId) > 0 { + i -= len(m.TestReportId) + copy(dAtA[i:], m.TestReportId) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.TestReportId))) + i-- + dAtA[i] = 0x2a + } + if len(m.TestStepId) > 0 { + i -= len(m.TestStepId) + copy(dAtA[i:], m.TestStepId) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.TestStepId))) + i-- + dAtA[i] = 0x22 + } + if len(m.Name) > 0 { + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x1a + } + if m.MeasurementType != 0 { + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.MeasurementType)) + i-- + dAtA[i] = 0x10 + } + if len(m.MeasurementId) > 0 { + i -= len(m.MeasurementId) + copy(dAtA[i:], m.MeasurementId) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.MeasurementId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *TestMeasurement_NumericValue) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *TestMeasurement_NumericValue) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + i := len(dAtA) + i -= 8 + binary.LittleEndian.PutUint64(dAtA[i:], uint64(math.Float64bits(float64(m.NumericValue)))) + i-- + dAtA[i] = 0x31 + return len(dAtA) - i, nil +} +func (m *TestMeasurement_StringValue) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *TestMeasurement_StringValue) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + i := len(dAtA) + i -= len(m.StringValue) + copy(dAtA[i:], m.StringValue) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.StringValue))) + i-- + dAtA[i] = 0x3a + return len(dAtA) - i, nil +} +func (m *TestMeasurement_BooleanValue) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *TestMeasurement_BooleanValue) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + i := len(dAtA) + i-- + if m.BooleanValue { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x40 + return len(dAtA) - i, nil +} +func (m *TestMeasurement_NumericBounds) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *TestMeasurement_NumericBounds) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + i := len(dAtA) + if m.NumericBounds != nil { + size, err := m.NumericBounds.MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x52 + } + return len(dAtA) - i, nil +} +func (m *TestMeasurement_StringBounds) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *TestMeasurement_StringBounds) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + i := len(dAtA) + if m.StringBounds != nil { + size, err := m.StringBounds.MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x5a + } + return len(dAtA) - i, nil +} +func (m *NumericBounds) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *NumericBounds) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *NumericBounds) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.Max != nil { + i -= 8 + binary.LittleEndian.PutUint64(dAtA[i:], uint64(math.Float64bits(float64(*m.Max)))) + i-- + dAtA[i] = 0x11 + } + if m.Min != nil { + i -= 8 + binary.LittleEndian.PutUint64(dAtA[i:], uint64(math.Float64bits(float64(*m.Min)))) + i-- + dAtA[i] = 0x9 + } + return len(dAtA) - i, nil +} + +func (m *StringBounds) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *StringBounds) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *StringBounds) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.ExpectedValue) > 0 { + i -= len(m.ExpectedValue) + copy(dAtA[i:], m.ExpectedValue) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.ExpectedValue))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *ImportTestReportRequest) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ImportTestReportRequest) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *ImportTestReportRequest) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.RemoteFileId) > 0 { + i -= len(m.RemoteFileId) + copy(dAtA[i:], m.RemoteFileId) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.RemoteFileId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *ImportTestReportResponse) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ImportTestReportResponse) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *ImportTestReportResponse) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.TestReport != nil { + size, err := m.TestReport.MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *CreateTestReportRequest) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CreateTestReportRequest) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *CreateTestReportRequest) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.SystemOperator) > 0 { + i -= len(m.SystemOperator) + copy(dAtA[i:], m.SystemOperator) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.SystemOperator))) + i-- + dAtA[i] = 0x52 + } + if len(m.PartNumber) > 0 { + i -= len(m.PartNumber) + copy(dAtA[i:], m.PartNumber) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.PartNumber))) + i-- + dAtA[i] = 0x4a + } + if len(m.SerialNumber) > 0 { + i -= len(m.SerialNumber) + copy(dAtA[i:], m.SerialNumber) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.SerialNumber))) + i-- + dAtA[i] = 0x42 + } + if len(m.Metadata) > 0 { + for iNdEx := len(m.Metadata) - 1; iNdEx >= 0; iNdEx-- { + if vtmsg, ok := interface{}(m.Metadata[iNdEx]).(interface { + MarshalToSizedBufferVTStrict([]byte) (int, error) + }); ok { + size, err := vtmsg.MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + } else { + encoded, err := proto.Marshal(m.Metadata[iNdEx]) + if err != nil { + return 0, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(encoded))) + } + i-- + dAtA[i] = 0x3a + } + } + if m.EndTime != nil { + size, err := (*timestamppb1.Timestamp)(m.EndTime).MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x32 + } + if m.StartTime != nil { + size, err := (*timestamppb1.Timestamp)(m.StartTime).MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x2a + } + if len(m.TestCase) > 0 { + i -= len(m.TestCase) + copy(dAtA[i:], m.TestCase) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.TestCase))) + i-- + dAtA[i] = 0x22 + } + if len(m.TestSystemName) > 0 { + i -= len(m.TestSystemName) + copy(dAtA[i:], m.TestSystemName) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.TestSystemName))) + i-- + dAtA[i] = 0x1a + } + if len(m.Name) > 0 { + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x12 + } + if m.Status != 0 { + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.Status)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *CreateTestReportResponse) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CreateTestReportResponse) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *CreateTestReportResponse) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.TestReport != nil { + size, err := m.TestReport.MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *GetTestReportRequest) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GetTestReportRequest) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *GetTestReportRequest) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.TestReportId) > 0 { + i -= len(m.TestReportId) + copy(dAtA[i:], m.TestReportId) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.TestReportId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *GetTestReportResponse) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GetTestReportResponse) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *GetTestReportResponse) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.TestReport != nil { + size, err := m.TestReport.MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *ListTestReportsRequest) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ListTestReportsRequest) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *ListTestReportsRequest) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.OrderBy) > 0 { + i -= len(m.OrderBy) + copy(dAtA[i:], m.OrderBy) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.OrderBy))) + i-- + dAtA[i] = 0x22 + } + if len(m.Filter) > 0 { + i -= len(m.Filter) + copy(dAtA[i:], m.Filter) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Filter))) + i-- + dAtA[i] = 0x1a + } + if len(m.PageToken) > 0 { + i -= len(m.PageToken) + copy(dAtA[i:], m.PageToken) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.PageToken))) + i-- + dAtA[i] = 0x12 + } + if m.PageSize != 0 { + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.PageSize)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *ListTestReportsResponse) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ListTestReportsResponse) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *ListTestReportsResponse) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.NextPageToken) > 0 { + i -= len(m.NextPageToken) + copy(dAtA[i:], m.NextPageToken) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.NextPageToken))) + i-- + dAtA[i] = 0x12 + } + if len(m.TestReports) > 0 { + for iNdEx := len(m.TestReports) - 1; iNdEx >= 0; iNdEx-- { + size, err := m.TestReports[iNdEx].MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *UpdateTestReportRequest) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *UpdateTestReportRequest) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *UpdateTestReportRequest) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.UpdateMask != nil { + size, err := (*fieldmaskpb1.FieldMask)(m.UpdateMask).MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x12 + } + if m.TestReport != nil { + size, err := m.TestReport.MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *UpdateTestReportResponse) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *UpdateTestReportResponse) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *UpdateTestReportResponse) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.TestReport != nil { + size, err := m.TestReport.MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *DeleteTestReportRequest) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DeleteTestReportRequest) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *DeleteTestReportRequest) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.TestReportId) > 0 { + i -= len(m.TestReportId) + copy(dAtA[i:], m.TestReportId) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.TestReportId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *DeleteTestReportResponse) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DeleteTestReportResponse) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *DeleteTestReportResponse) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + return len(dAtA) - i, nil +} + +func (m *CreateTestStepRequest) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CreateTestStepRequest) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *CreateTestStepRequest) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.TestStep != nil { + size, err := m.TestStep.MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *CreateTestStepResponse) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CreateTestStepResponse) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *CreateTestStepResponse) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.TestStep != nil { + size, err := m.TestStep.MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *ListTestStepsRequest) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ListTestStepsRequest) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *ListTestStepsRequest) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.OrderBy) > 0 { + i -= len(m.OrderBy) + copy(dAtA[i:], m.OrderBy) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.OrderBy))) + i-- + dAtA[i] = 0x22 + } + if len(m.Filter) > 0 { + i -= len(m.Filter) + copy(dAtA[i:], m.Filter) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Filter))) + i-- + dAtA[i] = 0x1a + } + if len(m.PageToken) > 0 { + i -= len(m.PageToken) + copy(dAtA[i:], m.PageToken) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.PageToken))) + i-- + dAtA[i] = 0x12 + } + if m.PageSize != 0 { + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.PageSize)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *ListTestStepsResponse) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ListTestStepsResponse) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *ListTestStepsResponse) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.NextPageToken) > 0 { + i -= len(m.NextPageToken) + copy(dAtA[i:], m.NextPageToken) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.NextPageToken))) + i-- + dAtA[i] = 0x12 + } + if len(m.TestSteps) > 0 { + for iNdEx := len(m.TestSteps) - 1; iNdEx >= 0; iNdEx-- { + size, err := m.TestSteps[iNdEx].MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *UpdateTestStepRequest) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *UpdateTestStepRequest) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *UpdateTestStepRequest) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.UpdateMask != nil { + size, err := (*fieldmaskpb1.FieldMask)(m.UpdateMask).MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x12 + } + if m.TestStep != nil { + size, err := m.TestStep.MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *UpdateTestStepResponse) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *UpdateTestStepResponse) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *UpdateTestStepResponse) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.TestStep != nil { + size, err := m.TestStep.MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *DeleteTestStepRequest) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DeleteTestStepRequest) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *DeleteTestStepRequest) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.TestStepId) > 0 { + i -= len(m.TestStepId) + copy(dAtA[i:], m.TestStepId) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.TestStepId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *DeleteTestStepResponse) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DeleteTestStepResponse) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *DeleteTestStepResponse) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + return len(dAtA) - i, nil +} + +func (m *CreateTestMeasurementRequest) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CreateTestMeasurementRequest) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *CreateTestMeasurementRequest) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.TestMeasurement != nil { + size, err := m.TestMeasurement.MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *CreateTestMeasurementResponse) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CreateTestMeasurementResponse) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *CreateTestMeasurementResponse) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.TestMeasurement != nil { + size, err := m.TestMeasurement.MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *CreateTestMeasurementsRequest) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CreateTestMeasurementsRequest) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *CreateTestMeasurementsRequest) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.TestMeasurements) > 0 { + for iNdEx := len(m.TestMeasurements) - 1; iNdEx >= 0; iNdEx-- { + size, err := m.TestMeasurements[iNdEx].MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *CreateTestMeasurementsResponse) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CreateTestMeasurementsResponse) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *CreateTestMeasurementsResponse) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.MeasurementIds) > 0 { + for iNdEx := len(m.MeasurementIds) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.MeasurementIds[iNdEx]) + copy(dAtA[i:], m.MeasurementIds[iNdEx]) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.MeasurementIds[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + if m.MeasurementsCreatedCount != 0 { + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.MeasurementsCreatedCount)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *ListTestMeasurementsRequest) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ListTestMeasurementsRequest) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *ListTestMeasurementsRequest) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.OrderBy) > 0 { + i -= len(m.OrderBy) + copy(dAtA[i:], m.OrderBy) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.OrderBy))) + i-- + dAtA[i] = 0x22 + } + if len(m.Filter) > 0 { + i -= len(m.Filter) + copy(dAtA[i:], m.Filter) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Filter))) + i-- + dAtA[i] = 0x1a + } + if len(m.PageToken) > 0 { + i -= len(m.PageToken) + copy(dAtA[i:], m.PageToken) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.PageToken))) + i-- + dAtA[i] = 0x12 + } + if m.PageSize != 0 { + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.PageSize)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *ListTestMeasurementsResponse) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ListTestMeasurementsResponse) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *ListTestMeasurementsResponse) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.NextPageToken) > 0 { + i -= len(m.NextPageToken) + copy(dAtA[i:], m.NextPageToken) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.NextPageToken))) + i-- + dAtA[i] = 0x12 + } + if len(m.TestMeasurements) > 0 { + for iNdEx := len(m.TestMeasurements) - 1; iNdEx >= 0; iNdEx-- { + size, err := m.TestMeasurements[iNdEx].MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *CountTestStepsRequest) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CountTestStepsRequest) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *CountTestStepsRequest) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.Filter) > 0 { + i -= len(m.Filter) + copy(dAtA[i:], m.Filter) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Filter))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *CountTestStepsResponse) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CountTestStepsResponse) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *CountTestStepsResponse) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.Count != 0 { + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.Count)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *CountTestMeasurementsRequest) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CountTestMeasurementsRequest) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *CountTestMeasurementsRequest) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.Filter) > 0 { + i -= len(m.Filter) + copy(dAtA[i:], m.Filter) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Filter))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *CountTestMeasurementsResponse) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CountTestMeasurementsResponse) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *CountTestMeasurementsResponse) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.Count != 0 { + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.Count)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *UpdateTestMeasurementRequest) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *UpdateTestMeasurementRequest) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *UpdateTestMeasurementRequest) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.UpdateMask != nil { + size, err := (*fieldmaskpb1.FieldMask)(m.UpdateMask).MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x12 + } + if m.TestMeasurement != nil { + size, err := m.TestMeasurement.MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *UpdateTestMeasurementResponse) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *UpdateTestMeasurementResponse) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *UpdateTestMeasurementResponse) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.TestMeasurement != nil { + size, err := m.TestMeasurement.MarshalToSizedBufferVTStrict(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *DeleteTestMeasurementRequest) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DeleteTestMeasurementRequest) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *DeleteTestMeasurementRequest) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.MeasurementId) > 0 { + i -= len(m.MeasurementId) + copy(dAtA[i:], m.MeasurementId) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.MeasurementId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *DeleteTestMeasurementResponse) MarshalVTStrict() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVTStrict(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DeleteTestMeasurementResponse) MarshalToVTStrict(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVTStrict(dAtA[:size]) +} + +func (m *DeleteTestMeasurementResponse) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + return len(dAtA) - i, nil +} + +func (m *TestReport) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.TestReportId) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + if m.Status != 0 { + n += 1 + protohelpers.SizeOfVarint(uint64(m.Status)) + } + l = len(m.Name) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + l = len(m.TestSystemName) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + l = len(m.TestCase) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + if m.StartTime != nil { + l = (*timestamppb1.Timestamp)(m.StartTime).SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + if m.EndTime != nil { + l = (*timestamppb1.Timestamp)(m.EndTime).SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + if len(m.Metadata) > 0 { + for _, e := range m.Metadata { + if size, ok := interface{}(e).(interface { + SizeVT() int + }); ok { + l = size.SizeVT() + } else { + l = proto.Size(e) + } + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + } + l = len(m.SerialNumber) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + l = len(m.PartNumber) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + l = len(m.SystemOperator) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + if m.ArchivedDate != nil { + l = (*timestamppb1.Timestamp)(m.ArchivedDate).SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + if m.IsArchived { + n += 2 + } + n += len(m.unknownFields) + return n +} + +func (m *TestStep) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.TestStepId) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + l = len(m.TestReportId) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + l = len(m.ParentStepId) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + l = len(m.Name) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + l = len(m.Description) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + if m.StepType != 0 { + n += 1 + protohelpers.SizeOfVarint(uint64(m.StepType)) + } + l = len(m.StepPath) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + if m.Status != 0 { + n += 1 + protohelpers.SizeOfVarint(uint64(m.Status)) + } + if m.StartTime != nil { + l = (*timestamppb1.Timestamp)(m.StartTime).SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + if m.EndTime != nil { + l = (*timestamppb1.Timestamp)(m.EndTime).SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + if m.ErrorInfo != nil { + l = m.ErrorInfo.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + +func (m *ErrorInfo) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.ErrorCode != 0 { + n += 1 + protohelpers.SizeOfVarint(uint64(m.ErrorCode)) + } + l = len(m.ErrorMessage) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + +func (m *TestMeasurement) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.MeasurementId) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + if m.MeasurementType != 0 { + n += 1 + protohelpers.SizeOfVarint(uint64(m.MeasurementType)) + } + l = len(m.Name) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + l = len(m.TestStepId) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + l = len(m.TestReportId) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + if vtmsg, ok := m.Value.(interface{ SizeVT() int }); ok { + n += vtmsg.SizeVT() + } + if m.Unit != nil { + if size, ok := interface{}(m.Unit).(interface { + SizeVT() int + }); ok { + l = size.SizeVT() + } else { + l = proto.Size(m.Unit) + } + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + if vtmsg, ok := m.Bounds.(interface{ SizeVT() int }); ok { + n += vtmsg.SizeVT() + } + if m.Passed { + n += 2 + } + if m.Timestamp != nil { + l = (*timestamppb1.Timestamp)(m.Timestamp).SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + +func (m *TestMeasurement_NumericValue) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + n += 9 + return n +} +func (m *TestMeasurement_StringValue) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.StringValue) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + return n +} +func (m *TestMeasurement_BooleanValue) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + n += 2 + return n +} +func (m *TestMeasurement_NumericBounds) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.NumericBounds != nil { + l = m.NumericBounds.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + return n +} +func (m *TestMeasurement_StringBounds) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.StringBounds != nil { + l = m.StringBounds.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + return n +} +func (m *NumericBounds) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Min != nil { + n += 9 + } + if m.Max != nil { + n += 9 + } + n += len(m.unknownFields) + return n +} + +func (m *StringBounds) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ExpectedValue) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + +func (m *ImportTestReportRequest) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.RemoteFileId) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + +func (m *ImportTestReportResponse) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.TestReport != nil { + l = m.TestReport.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + +func (m *CreateTestReportRequest) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Status != 0 { + n += 1 + protohelpers.SizeOfVarint(uint64(m.Status)) + } + l = len(m.Name) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + l = len(m.TestSystemName) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + l = len(m.TestCase) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + if m.StartTime != nil { + l = (*timestamppb1.Timestamp)(m.StartTime).SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + if m.EndTime != nil { + l = (*timestamppb1.Timestamp)(m.EndTime).SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + if len(m.Metadata) > 0 { + for _, e := range m.Metadata { + if size, ok := interface{}(e).(interface { + SizeVT() int + }); ok { + l = size.SizeVT() + } else { + l = proto.Size(e) + } + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + } + l = len(m.SerialNumber) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + l = len(m.PartNumber) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + l = len(m.SystemOperator) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + +func (m *CreateTestReportResponse) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.TestReport != nil { + l = m.TestReport.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + +func (m *GetTestReportRequest) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.TestReportId) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + +func (m *GetTestReportResponse) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.TestReport != nil { + l = m.TestReport.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + +func (m *ListTestReportsRequest) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.PageSize != 0 { + n += 1 + protohelpers.SizeOfVarint(uint64(m.PageSize)) + } + l = len(m.PageToken) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + l = len(m.Filter) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + l = len(m.OrderBy) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + +func (m *ListTestReportsResponse) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.TestReports) > 0 { + for _, e := range m.TestReports { + l = e.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + } + l = len(m.NextPageToken) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + +func (m *UpdateTestReportRequest) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.TestReport != nil { + l = m.TestReport.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + if m.UpdateMask != nil { + l = (*fieldmaskpb1.FieldMask)(m.UpdateMask).SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + +func (m *UpdateTestReportResponse) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.TestReport != nil { + l = m.TestReport.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + +func (m *DeleteTestReportRequest) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.TestReportId) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + +func (m *DeleteTestReportResponse) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + n += len(m.unknownFields) + return n +} + +func (m *CreateTestStepRequest) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.TestStep != nil { + l = m.TestStep.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + +func (m *CreateTestStepResponse) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.TestStep != nil { + l = m.TestStep.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + +func (m *ListTestStepsRequest) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.PageSize != 0 { + n += 1 + protohelpers.SizeOfVarint(uint64(m.PageSize)) + } + l = len(m.PageToken) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + l = len(m.Filter) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + l = len(m.OrderBy) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + +func (m *ListTestStepsResponse) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.TestSteps) > 0 { + for _, e := range m.TestSteps { + l = e.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + } + l = len(m.NextPageToken) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + +func (m *UpdateTestStepRequest) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.TestStep != nil { + l = m.TestStep.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + if m.UpdateMask != nil { + l = (*fieldmaskpb1.FieldMask)(m.UpdateMask).SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + +func (m *UpdateTestStepResponse) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.TestStep != nil { + l = m.TestStep.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + +func (m *DeleteTestStepRequest) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.TestStepId) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + +func (m *DeleteTestStepResponse) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + n += len(m.unknownFields) + return n +} + +func (m *CreateTestMeasurementRequest) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.TestMeasurement != nil { + l = m.TestMeasurement.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + +func (m *CreateTestMeasurementResponse) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.TestMeasurement != nil { + l = m.TestMeasurement.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + +func (m *CreateTestMeasurementsRequest) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.TestMeasurements) > 0 { + for _, e := range m.TestMeasurements { + l = e.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + } + n += len(m.unknownFields) + return n +} + +func (m *CreateTestMeasurementsResponse) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.MeasurementsCreatedCount != 0 { + n += 1 + protohelpers.SizeOfVarint(uint64(m.MeasurementsCreatedCount)) + } + if len(m.MeasurementIds) > 0 { + for _, s := range m.MeasurementIds { + l = len(s) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + } + n += len(m.unknownFields) + return n +} + +func (m *ListTestMeasurementsRequest) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.PageSize != 0 { + n += 1 + protohelpers.SizeOfVarint(uint64(m.PageSize)) + } + l = len(m.PageToken) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + l = len(m.Filter) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + l = len(m.OrderBy) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + +func (m *ListTestMeasurementsResponse) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.TestMeasurements) > 0 { + for _, e := range m.TestMeasurements { + l = e.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + } + l = len(m.NextPageToken) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + +func (m *CountTestStepsRequest) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Filter) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + +func (m *CountTestStepsResponse) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Count != 0 { + n += 1 + protohelpers.SizeOfVarint(uint64(m.Count)) + } + n += len(m.unknownFields) + return n +} + +func (m *CountTestMeasurementsRequest) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Filter) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + +func (m *CountTestMeasurementsResponse) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Count != 0 { + n += 1 + protohelpers.SizeOfVarint(uint64(m.Count)) + } + n += len(m.unknownFields) + return n +} + +func (m *UpdateTestMeasurementRequest) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.TestMeasurement != nil { + l = m.TestMeasurement.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + if m.UpdateMask != nil { + l = (*fieldmaskpb1.FieldMask)(m.UpdateMask).SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + +func (m *UpdateTestMeasurementResponse) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.TestMeasurement != nil { + l = m.TestMeasurement.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + +func (m *DeleteTestMeasurementRequest) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.MeasurementId) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + +func (m *DeleteTestMeasurementResponse) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + n += len(m.unknownFields) + return n +} + +func (m *TestReport) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TestReport: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TestReport: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestReportId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TestReportId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + m.Status = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Status |= TestStatus(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestSystemName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TestSystemName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestCase", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TestCase = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StartTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.StartTime == nil { + m.StartTime = ×tamppb.Timestamp{} + } + if err := (*timestamppb1.Timestamp)(m.StartTime).UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EndTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.EndTime == nil { + m.EndTime = ×tamppb.Timestamp{} + } + if err := (*timestamppb1.Timestamp)(m.EndTime).UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Metadata = append(m.Metadata, &v1.MetadataValue{}) + if unmarshal, ok := interface{}(m.Metadata[len(m.Metadata)-1]).(interface { + UnmarshalVT([]byte) error + }); ok { + if err := unmarshal.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + } else { + if err := proto.Unmarshal(dAtA[iNdEx:postIndex], m.Metadata[len(m.Metadata)-1]); err != nil { + return err + } + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SerialNumber", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SerialNumber = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PartNumber", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PartNumber = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SystemOperator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SystemOperator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ArchivedDate", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ArchivedDate == nil { + m.ArchivedDate = ×tamppb.Timestamp{} + } + if err := (*timestamppb1.Timestamp)(m.ArchivedDate).UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 13: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field IsArchived", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.IsArchived = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TestStep) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TestStep: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TestStep: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestStepId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TestStepId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestReportId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TestReportId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ParentStepId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ParentStepId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Description = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field StepType", wireType) + } + m.StepType = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.StepType |= TestStepType(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StepPath", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.StepPath = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + m.Status = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Status |= TestStatus(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StartTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.StartTime == nil { + m.StartTime = ×tamppb.Timestamp{} + } + if err := (*timestamppb1.Timestamp)(m.StartTime).UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EndTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.EndTime == nil { + m.EndTime = ×tamppb.Timestamp{} + } + if err := (*timestamppb1.Timestamp)(m.EndTime).UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ErrorInfo", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ErrorInfo == nil { + m.ErrorInfo = &ErrorInfo{} + } + if err := m.ErrorInfo.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ErrorInfo) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ErrorInfo: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ErrorInfo: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ErrorCode", wireType) + } + m.ErrorCode = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ErrorCode |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ErrorMessage", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ErrorMessage = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TestMeasurement) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TestMeasurement: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TestMeasurement: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MeasurementId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MeasurementId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MeasurementType", wireType) + } + m.MeasurementType = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MeasurementType |= TestMeasurementType(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestStepId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TestStepId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestReportId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TestReportId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 1 { + return fmt.Errorf("proto: wrong wireType = %d for field NumericValue", wireType) + } + var v uint64 + if (iNdEx + 8) > l { + return io.ErrUnexpectedEOF + } + v = uint64(binary.LittleEndian.Uint64(dAtA[iNdEx:])) + iNdEx += 8 + m.Value = &TestMeasurement_NumericValue{NumericValue: float64(math.Float64frombits(v))} + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StringValue", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Value = &TestMeasurement_StringValue{StringValue: string(dAtA[iNdEx:postIndex])} + iNdEx = postIndex + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field BooleanValue", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.Value = &TestMeasurement_BooleanValue{BooleanValue: b} + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Unit", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Unit == nil { + m.Unit = &v2.Unit{} + } + if unmarshal, ok := interface{}(m.Unit).(interface { + UnmarshalVT([]byte) error + }); ok { + if err := unmarshal.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + } else { + if err := proto.Unmarshal(dAtA[iNdEx:postIndex], m.Unit); err != nil { + return err + } + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NumericBounds", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if oneof, ok := m.Bounds.(*TestMeasurement_NumericBounds); ok { + if err := oneof.NumericBounds.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + } else { + v := &NumericBounds{} + if err := v.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Bounds = &TestMeasurement_NumericBounds{NumericBounds: v} + } + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StringBounds", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if oneof, ok := m.Bounds.(*TestMeasurement_StringBounds); ok { + if err := oneof.StringBounds.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + } else { + v := &StringBounds{} + if err := v.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Bounds = &TestMeasurement_StringBounds{StringBounds: v} + } + iNdEx = postIndex + case 12: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Passed", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Passed = bool(v != 0) + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Timestamp == nil { + m.Timestamp = ×tamppb.Timestamp{} + } + if err := (*timestamppb1.Timestamp)(m.Timestamp).UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NumericBounds) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NumericBounds: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NumericBounds: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 1 { + return fmt.Errorf("proto: wrong wireType = %d for field Min", wireType) + } + var v uint64 + if (iNdEx + 8) > l { + return io.ErrUnexpectedEOF + } + v = uint64(binary.LittleEndian.Uint64(dAtA[iNdEx:])) + iNdEx += 8 + v2 := float64(math.Float64frombits(v)) + m.Min = &v2 + case 2: + if wireType != 1 { + return fmt.Errorf("proto: wrong wireType = %d for field Max", wireType) + } + var v uint64 + if (iNdEx + 8) > l { + return io.ErrUnexpectedEOF + } + v = uint64(binary.LittleEndian.Uint64(dAtA[iNdEx:])) + iNdEx += 8 + v2 := float64(math.Float64frombits(v)) + m.Max = &v2 + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *StringBounds) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: StringBounds: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: StringBounds: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ExpectedValue", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ExpectedValue = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ImportTestReportRequest) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ImportTestReportRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ImportTestReportRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RemoteFileId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RemoteFileId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ImportTestReportResponse) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ImportTestReportResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ImportTestReportResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestReport", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TestReport == nil { + m.TestReport = &TestReport{} + } + if err := m.TestReport.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CreateTestReportRequest) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CreateTestReportRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CreateTestReportRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + m.Status = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Status |= TestStatus(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestSystemName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TestSystemName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestCase", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TestCase = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StartTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.StartTime == nil { + m.StartTime = ×tamppb.Timestamp{} + } + if err := (*timestamppb1.Timestamp)(m.StartTime).UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EndTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.EndTime == nil { + m.EndTime = ×tamppb.Timestamp{} + } + if err := (*timestamppb1.Timestamp)(m.EndTime).UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Metadata = append(m.Metadata, &v1.MetadataValue{}) + if unmarshal, ok := interface{}(m.Metadata[len(m.Metadata)-1]).(interface { + UnmarshalVT([]byte) error + }); ok { + if err := unmarshal.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + } else { + if err := proto.Unmarshal(dAtA[iNdEx:postIndex], m.Metadata[len(m.Metadata)-1]); err != nil { + return err + } + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SerialNumber", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SerialNumber = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PartNumber", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PartNumber = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SystemOperator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SystemOperator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CreateTestReportResponse) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CreateTestReportResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CreateTestReportResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestReport", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TestReport == nil { + m.TestReport = &TestReport{} + } + if err := m.TestReport.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GetTestReportRequest) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GetTestReportRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GetTestReportRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestReportId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TestReportId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GetTestReportResponse) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GetTestReportResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GetTestReportResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestReport", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TestReport == nil { + m.TestReport = &TestReport{} + } + if err := m.TestReport.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ListTestReportsRequest) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ListTestReportsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ListTestReportsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PageSize", wireType) + } + m.PageSize = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PageSize |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PageToken", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PageToken = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Filter", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Filter = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OrderBy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.OrderBy = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ListTestReportsResponse) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ListTestReportsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ListTestReportsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestReports", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TestReports = append(m.TestReports, &TestReport{}) + if err := m.TestReports[len(m.TestReports)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NextPageToken", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NextPageToken = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *UpdateTestReportRequest) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: UpdateTestReportRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: UpdateTestReportRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestReport", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TestReport == nil { + m.TestReport = &TestReport{} + } + if err := m.TestReport.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UpdateMask", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.UpdateMask == nil { + m.UpdateMask = &fieldmaskpb.FieldMask{} + } + if err := (*fieldmaskpb1.FieldMask)(m.UpdateMask).UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *UpdateTestReportResponse) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: UpdateTestReportResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: UpdateTestReportResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestReport", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TestReport == nil { + m.TestReport = &TestReport{} + } + if err := m.TestReport.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DeleteTestReportRequest) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DeleteTestReportRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeleteTestReportRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestReportId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TestReportId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DeleteTestReportResponse) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DeleteTestReportResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeleteTestReportResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CreateTestStepRequest) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CreateTestStepRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CreateTestStepRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestStep", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TestStep == nil { + m.TestStep = &TestStep{} + } + if err := m.TestStep.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CreateTestStepResponse) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CreateTestStepResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CreateTestStepResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestStep", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TestStep == nil { + m.TestStep = &TestStep{} + } + if err := m.TestStep.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ListTestStepsRequest) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ListTestStepsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ListTestStepsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PageSize", wireType) + } + m.PageSize = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PageSize |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PageToken", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PageToken = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Filter", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Filter = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OrderBy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.OrderBy = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ListTestStepsResponse) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ListTestStepsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ListTestStepsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestSteps", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TestSteps = append(m.TestSteps, &TestStep{}) + if err := m.TestSteps[len(m.TestSteps)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NextPageToken", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NextPageToken = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *UpdateTestStepRequest) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: UpdateTestStepRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: UpdateTestStepRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestStep", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TestStep == nil { + m.TestStep = &TestStep{} + } + if err := m.TestStep.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UpdateMask", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.UpdateMask == nil { + m.UpdateMask = &fieldmaskpb.FieldMask{} + } + if err := (*fieldmaskpb1.FieldMask)(m.UpdateMask).UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *UpdateTestStepResponse) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: UpdateTestStepResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: UpdateTestStepResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestStep", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TestStep == nil { + m.TestStep = &TestStep{} + } + if err := m.TestStep.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DeleteTestStepRequest) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DeleteTestStepRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeleteTestStepRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestStepId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TestStepId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DeleteTestStepResponse) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DeleteTestStepResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeleteTestStepResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CreateTestMeasurementRequest) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CreateTestMeasurementRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CreateTestMeasurementRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestMeasurement", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TestMeasurement == nil { + m.TestMeasurement = &TestMeasurement{} + } + if err := m.TestMeasurement.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CreateTestMeasurementResponse) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CreateTestMeasurementResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CreateTestMeasurementResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestMeasurement", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TestMeasurement == nil { + m.TestMeasurement = &TestMeasurement{} + } + if err := m.TestMeasurement.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CreateTestMeasurementsRequest) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CreateTestMeasurementsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CreateTestMeasurementsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestMeasurements", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TestMeasurements = append(m.TestMeasurements, &TestMeasurement{}) + if err := m.TestMeasurements[len(m.TestMeasurements)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CreateTestMeasurementsResponse) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CreateTestMeasurementsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CreateTestMeasurementsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MeasurementsCreatedCount", wireType) + } + m.MeasurementsCreatedCount = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MeasurementsCreatedCount |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MeasurementIds", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MeasurementIds = append(m.MeasurementIds, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ListTestMeasurementsRequest) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ListTestMeasurementsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ListTestMeasurementsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PageSize", wireType) + } + m.PageSize = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PageSize |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PageToken", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PageToken = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Filter", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Filter = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OrderBy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.OrderBy = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ListTestMeasurementsResponse) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ListTestMeasurementsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ListTestMeasurementsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestMeasurements", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TestMeasurements = append(m.TestMeasurements, &TestMeasurement{}) + if err := m.TestMeasurements[len(m.TestMeasurements)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NextPageToken", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NextPageToken = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CountTestStepsRequest) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CountTestStepsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CountTestStepsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Filter", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Filter = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CountTestStepsResponse) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CountTestStepsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CountTestStepsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Count", wireType) + } + m.Count = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Count |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CountTestMeasurementsRequest) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CountTestMeasurementsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CountTestMeasurementsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Filter", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Filter = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CountTestMeasurementsResponse) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CountTestMeasurementsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CountTestMeasurementsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Count", wireType) + } + m.Count = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Count |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *UpdateTestMeasurementRequest) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: UpdateTestMeasurementRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: UpdateTestMeasurementRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestMeasurement", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TestMeasurement == nil { + m.TestMeasurement = &TestMeasurement{} + } + if err := m.TestMeasurement.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UpdateMask", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.UpdateMask == nil { + m.UpdateMask = &fieldmaskpb.FieldMask{} + } + if err := (*fieldmaskpb1.FieldMask)(m.UpdateMask).UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *UpdateTestMeasurementResponse) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: UpdateTestMeasurementResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: UpdateTestMeasurementResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestMeasurement", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TestMeasurement == nil { + m.TestMeasurement = &TestMeasurement{} + } + if err := m.TestMeasurement.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DeleteTestMeasurementRequest) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DeleteTestMeasurementRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeleteTestMeasurementRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MeasurementId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MeasurementId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DeleteTestMeasurementResponse) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DeleteTestMeasurementResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeleteTestMeasurementResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TestReport) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TestReport: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TestReport: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestReportId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.TestReportId = stringValue + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + m.Status = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Status |= TestStatus(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.Name = stringValue + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestSystemName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.TestSystemName = stringValue + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestCase", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.TestCase = stringValue + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StartTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.StartTime == nil { + m.StartTime = ×tamppb.Timestamp{} + } + if err := (*timestamppb1.Timestamp)(m.StartTime).UnmarshalVTUnsafe(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EndTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.EndTime == nil { + m.EndTime = ×tamppb.Timestamp{} + } + if err := (*timestamppb1.Timestamp)(m.EndTime).UnmarshalVTUnsafe(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Metadata = append(m.Metadata, &v1.MetadataValue{}) + if unmarshal, ok := interface{}(m.Metadata[len(m.Metadata)-1]).(interface { + UnmarshalVTUnsafe([]byte) error + }); ok { + if err := unmarshal.UnmarshalVTUnsafe(dAtA[iNdEx:postIndex]); err != nil { + return err + } + } else { + if err := proto.Unmarshal(dAtA[iNdEx:postIndex], m.Metadata[len(m.Metadata)-1]); err != nil { + return err + } + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SerialNumber", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.SerialNumber = stringValue + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PartNumber", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.PartNumber = stringValue + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SystemOperator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.SystemOperator = stringValue + iNdEx = postIndex + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ArchivedDate", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ArchivedDate == nil { + m.ArchivedDate = ×tamppb.Timestamp{} + } + if err := (*timestamppb1.Timestamp)(m.ArchivedDate).UnmarshalVTUnsafe(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 13: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field IsArchived", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.IsArchived = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TestStep) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TestStep: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TestStep: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestStepId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.TestStepId = stringValue + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestReportId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.TestReportId = stringValue + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ParentStepId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.ParentStepId = stringValue + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.Name = stringValue + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.Description = stringValue + iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field StepType", wireType) + } + m.StepType = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.StepType |= TestStepType(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StepPath", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.StepPath = stringValue + iNdEx = postIndex + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + m.Status = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Status |= TestStatus(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StartTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.StartTime == nil { + m.StartTime = ×tamppb.Timestamp{} + } + if err := (*timestamppb1.Timestamp)(m.StartTime).UnmarshalVTUnsafe(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EndTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.EndTime == nil { + m.EndTime = ×tamppb.Timestamp{} + } + if err := (*timestamppb1.Timestamp)(m.EndTime).UnmarshalVTUnsafe(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ErrorInfo", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ErrorInfo == nil { + m.ErrorInfo = &ErrorInfo{} + } + if err := m.ErrorInfo.UnmarshalVTUnsafe(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ErrorInfo) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ErrorInfo: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ErrorInfo: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ErrorCode", wireType) + } + m.ErrorCode = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ErrorCode |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ErrorMessage", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.ErrorMessage = stringValue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TestMeasurement) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TestMeasurement: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TestMeasurement: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MeasurementId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.MeasurementId = stringValue + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MeasurementType", wireType) + } + m.MeasurementType = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MeasurementType |= TestMeasurementType(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.Name = stringValue + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestStepId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.TestStepId = stringValue + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestReportId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.TestReportId = stringValue + iNdEx = postIndex + case 6: + if wireType != 1 { + return fmt.Errorf("proto: wrong wireType = %d for field NumericValue", wireType) + } + var v uint64 + if (iNdEx + 8) > l { + return io.ErrUnexpectedEOF + } + v = uint64(binary.LittleEndian.Uint64(dAtA[iNdEx:])) + iNdEx += 8 + m.Value = &TestMeasurement_NumericValue{NumericValue: float64(math.Float64frombits(v))} + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StringValue", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.Value = &TestMeasurement_StringValue{StringValue: stringValue} + iNdEx = postIndex + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field BooleanValue", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.Value = &TestMeasurement_BooleanValue{BooleanValue: b} + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Unit", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Unit == nil { + m.Unit = &v2.Unit{} + } + if unmarshal, ok := interface{}(m.Unit).(interface { + UnmarshalVTUnsafe([]byte) error + }); ok { + if err := unmarshal.UnmarshalVTUnsafe(dAtA[iNdEx:postIndex]); err != nil { + return err + } + } else { + if err := proto.Unmarshal(dAtA[iNdEx:postIndex], m.Unit); err != nil { + return err + } + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NumericBounds", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if oneof, ok := m.Bounds.(*TestMeasurement_NumericBounds); ok { + if err := oneof.NumericBounds.UnmarshalVTUnsafe(dAtA[iNdEx:postIndex]); err != nil { + return err + } + } else { + v := &NumericBounds{} + if err := v.UnmarshalVTUnsafe(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Bounds = &TestMeasurement_NumericBounds{NumericBounds: v} + } + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StringBounds", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if oneof, ok := m.Bounds.(*TestMeasurement_StringBounds); ok { + if err := oneof.StringBounds.UnmarshalVTUnsafe(dAtA[iNdEx:postIndex]); err != nil { + return err + } + } else { + v := &StringBounds{} + if err := v.UnmarshalVTUnsafe(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Bounds = &TestMeasurement_StringBounds{StringBounds: v} + } + iNdEx = postIndex + case 12: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Passed", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Passed = bool(v != 0) + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Timestamp == nil { + m.Timestamp = ×tamppb.Timestamp{} + } + if err := (*timestamppb1.Timestamp)(m.Timestamp).UnmarshalVTUnsafe(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NumericBounds) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NumericBounds: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NumericBounds: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 1 { + return fmt.Errorf("proto: wrong wireType = %d for field Min", wireType) + } + var v uint64 + if (iNdEx + 8) > l { + return io.ErrUnexpectedEOF + } + v = uint64(binary.LittleEndian.Uint64(dAtA[iNdEx:])) + iNdEx += 8 + v2 := float64(math.Float64frombits(v)) + m.Min = &v2 + case 2: + if wireType != 1 { + return fmt.Errorf("proto: wrong wireType = %d for field Max", wireType) + } + var v uint64 + if (iNdEx + 8) > l { + return io.ErrUnexpectedEOF + } + v = uint64(binary.LittleEndian.Uint64(dAtA[iNdEx:])) + iNdEx += 8 + v2 := float64(math.Float64frombits(v)) + m.Max = &v2 + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *StringBounds) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: StringBounds: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: StringBounds: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ExpectedValue", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.ExpectedValue = stringValue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ImportTestReportRequest) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ImportTestReportRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ImportTestReportRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RemoteFileId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.RemoteFileId = stringValue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ImportTestReportResponse) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ImportTestReportResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ImportTestReportResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestReport", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TestReport == nil { + m.TestReport = &TestReport{} + } + if err := m.TestReport.UnmarshalVTUnsafe(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CreateTestReportRequest) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CreateTestReportRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CreateTestReportRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + m.Status = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Status |= TestStatus(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.Name = stringValue + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestSystemName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.TestSystemName = stringValue + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestCase", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.TestCase = stringValue + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StartTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.StartTime == nil { + m.StartTime = ×tamppb.Timestamp{} + } + if err := (*timestamppb1.Timestamp)(m.StartTime).UnmarshalVTUnsafe(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EndTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.EndTime == nil { + m.EndTime = ×tamppb.Timestamp{} + } + if err := (*timestamppb1.Timestamp)(m.EndTime).UnmarshalVTUnsafe(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Metadata = append(m.Metadata, &v1.MetadataValue{}) + if unmarshal, ok := interface{}(m.Metadata[len(m.Metadata)-1]).(interface { + UnmarshalVTUnsafe([]byte) error + }); ok { + if err := unmarshal.UnmarshalVTUnsafe(dAtA[iNdEx:postIndex]); err != nil { + return err + } + } else { + if err := proto.Unmarshal(dAtA[iNdEx:postIndex], m.Metadata[len(m.Metadata)-1]); err != nil { + return err + } + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SerialNumber", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.SerialNumber = stringValue + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PartNumber", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.PartNumber = stringValue + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SystemOperator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.SystemOperator = stringValue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CreateTestReportResponse) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CreateTestReportResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CreateTestReportResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestReport", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TestReport == nil { + m.TestReport = &TestReport{} + } + if err := m.TestReport.UnmarshalVTUnsafe(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GetTestReportRequest) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GetTestReportRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GetTestReportRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestReportId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.TestReportId = stringValue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GetTestReportResponse) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GetTestReportResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GetTestReportResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestReport", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TestReport == nil { + m.TestReport = &TestReport{} + } + if err := m.TestReport.UnmarshalVTUnsafe(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ListTestReportsRequest) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ListTestReportsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ListTestReportsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PageSize", wireType) + } + m.PageSize = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PageSize |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PageToken", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.PageToken = stringValue + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Filter", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.Filter = stringValue + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OrderBy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.OrderBy = stringValue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ListTestReportsResponse) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ListTestReportsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ListTestReportsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestReports", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TestReports = append(m.TestReports, &TestReport{}) + if err := m.TestReports[len(m.TestReports)-1].UnmarshalVTUnsafe(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NextPageToken", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.NextPageToken = stringValue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *UpdateTestReportRequest) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: UpdateTestReportRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: UpdateTestReportRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestReport", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TestReport == nil { + m.TestReport = &TestReport{} + } + if err := m.TestReport.UnmarshalVTUnsafe(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UpdateMask", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.UpdateMask == nil { + m.UpdateMask = &fieldmaskpb.FieldMask{} + } + if err := (*fieldmaskpb1.FieldMask)(m.UpdateMask).UnmarshalVTUnsafe(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *UpdateTestReportResponse) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: UpdateTestReportResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: UpdateTestReportResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestReport", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TestReport == nil { + m.TestReport = &TestReport{} + } + if err := m.TestReport.UnmarshalVTUnsafe(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DeleteTestReportRequest) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DeleteTestReportRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeleteTestReportRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestReportId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.TestReportId = stringValue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DeleteTestReportResponse) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DeleteTestReportResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeleteTestReportResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CreateTestStepRequest) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CreateTestStepRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CreateTestStepRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestStep", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TestStep == nil { + m.TestStep = &TestStep{} + } + if err := m.TestStep.UnmarshalVTUnsafe(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CreateTestStepResponse) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CreateTestStepResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CreateTestStepResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestStep", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TestStep == nil { + m.TestStep = &TestStep{} + } + if err := m.TestStep.UnmarshalVTUnsafe(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ListTestStepsRequest) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ListTestStepsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ListTestStepsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PageSize", wireType) + } + m.PageSize = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PageSize |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PageToken", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.PageToken = stringValue + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Filter", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.Filter = stringValue + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OrderBy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.OrderBy = stringValue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ListTestStepsResponse) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ListTestStepsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ListTestStepsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestSteps", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TestSteps = append(m.TestSteps, &TestStep{}) + if err := m.TestSteps[len(m.TestSteps)-1].UnmarshalVTUnsafe(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NextPageToken", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.NextPageToken = stringValue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *UpdateTestStepRequest) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: UpdateTestStepRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: UpdateTestStepRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestStep", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TestStep == nil { + m.TestStep = &TestStep{} + } + if err := m.TestStep.UnmarshalVTUnsafe(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UpdateMask", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.UpdateMask == nil { + m.UpdateMask = &fieldmaskpb.FieldMask{} + } + if err := (*fieldmaskpb1.FieldMask)(m.UpdateMask).UnmarshalVTUnsafe(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *UpdateTestStepResponse) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: UpdateTestStepResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: UpdateTestStepResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestStep", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TestStep == nil { + m.TestStep = &TestStep{} + } + if err := m.TestStep.UnmarshalVTUnsafe(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DeleteTestStepRequest) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DeleteTestStepRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeleteTestStepRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestStepId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.TestStepId = stringValue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DeleteTestStepResponse) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DeleteTestStepResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeleteTestStepResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CreateTestMeasurementRequest) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CreateTestMeasurementRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CreateTestMeasurementRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestMeasurement", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TestMeasurement == nil { + m.TestMeasurement = &TestMeasurement{} + } + if err := m.TestMeasurement.UnmarshalVTUnsafe(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CreateTestMeasurementResponse) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CreateTestMeasurementResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CreateTestMeasurementResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestMeasurement", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TestMeasurement == nil { + m.TestMeasurement = &TestMeasurement{} + } + if err := m.TestMeasurement.UnmarshalVTUnsafe(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CreateTestMeasurementsRequest) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CreateTestMeasurementsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CreateTestMeasurementsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestMeasurements", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TestMeasurements = append(m.TestMeasurements, &TestMeasurement{}) + if err := m.TestMeasurements[len(m.TestMeasurements)-1].UnmarshalVTUnsafe(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CreateTestMeasurementsResponse) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CreateTestMeasurementsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CreateTestMeasurementsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MeasurementsCreatedCount", wireType) + } + m.MeasurementsCreatedCount = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MeasurementsCreatedCount |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MeasurementIds", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.MeasurementIds = append(m.MeasurementIds, stringValue) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ListTestMeasurementsRequest) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ListTestMeasurementsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ListTestMeasurementsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PageSize", wireType) + } + m.PageSize = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PageSize |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PageToken", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.PageToken = stringValue + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Filter", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.Filter = stringValue + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OrderBy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.OrderBy = stringValue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ListTestMeasurementsResponse) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ListTestMeasurementsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ListTestMeasurementsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestMeasurements", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TestMeasurements = append(m.TestMeasurements, &TestMeasurement{}) + if err := m.TestMeasurements[len(m.TestMeasurements)-1].UnmarshalVTUnsafe(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NextPageToken", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.NextPageToken = stringValue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CountTestStepsRequest) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CountTestStepsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CountTestStepsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Filter", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.Filter = stringValue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CountTestStepsResponse) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CountTestStepsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CountTestStepsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Count", wireType) + } + m.Count = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Count |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CountTestMeasurementsRequest) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CountTestMeasurementsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CountTestMeasurementsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Filter", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.Filter = stringValue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CountTestMeasurementsResponse) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CountTestMeasurementsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CountTestMeasurementsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Count", wireType) + } + m.Count = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Count |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *UpdateTestMeasurementRequest) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: UpdateTestMeasurementRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: UpdateTestMeasurementRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestMeasurement", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TestMeasurement == nil { + m.TestMeasurement = &TestMeasurement{} + } + if err := m.TestMeasurement.UnmarshalVTUnsafe(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UpdateMask", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.UpdateMask == nil { + m.UpdateMask = &fieldmaskpb.FieldMask{} + } + if err := (*fieldmaskpb1.FieldMask)(m.UpdateMask).UnmarshalVTUnsafe(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *UpdateTestMeasurementResponse) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: UpdateTestMeasurementResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: UpdateTestMeasurementResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TestMeasurement", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TestMeasurement == nil { + m.TestMeasurement = &TestMeasurement{} + } + if err := m.TestMeasurement.UnmarshalVTUnsafe(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DeleteTestMeasurementRequest) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DeleteTestMeasurementRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeleteTestMeasurementRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MeasurementId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var stringValue string + if intStringLen > 0 { + stringValue = unsafe.String(&dAtA[iNdEx], intStringLen) + } + m.MeasurementId = stringValue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DeleteTestMeasurementResponse) UnmarshalVTUnsafe(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DeleteTestMeasurementResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeleteTestMeasurementResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} diff --git a/protos/buf.lock b/protos/buf.lock index 33c97783d..e1d2b21cf 100644 --- a/protos/buf.lock +++ b/protos/buf.lock @@ -9,8 +9,8 @@ deps: - remote: buf.build owner: googleapis repository: googleapis - commit: 61b203b9a9164be9a834f58c37be6f62 - digest: shake256:e619113001d6e284ee8a92b1561e5d4ea89a47b28bf0410815cb2fa23914df8be9f1a6a98dcf069f5bc2d829a2cfb1ac614863be45cd4f8a5ad8606c5f200224 + commit: 72c8614f3bd0466ea67931ef2c43d608 + digest: shake256:b3ac4d383db09f92ab0ca85d12bff8c49eddf7031bd3a854c260b6ac4ed6a2bb85b52b3393c316d28f8038bf3b8e70cb3d16470e8cc4423007678fb6d89d36d4 - remote: buf.build owner: grpc-ecosystem repository: grpc-gateway diff --git a/protos/sift/reports/v1/reports.proto b/protos/sift/reports/v1/reports.proto index aceb6e584..46c0f04b8 100644 --- a/protos/sift/reports/v1/reports.proto +++ b/protos/sift/reports/v1/reports.proto @@ -228,7 +228,8 @@ message ListReportsRequest { string page_token = 2 [(google.api.field_behavior) = OPTIONAL]; // A [Common Expression Language (CEL)](https://github.com/google/cel-spec) filter string. - // Available fields to filter by are `report_id`, `report_template_id`, `tag_name`, `name`, `run_id`, `is_archived`, and `archived_date`. + // Available fields to filter by are `report_id`, `report_template_id`, `tag_name`, `name`, `run_id`, `is_archived`, `archived_date`, `created_date`, + // `created_by_user_id`, `metadata`, `modified_date`, and `modified_by_user_id`. // For further information about how to use CELs, please refer to [this guide](https://github.com/google/cel-spec/blob/master/doc/langdef.md#standard-definitions). // For more information about the fields used for filtering, please refer to [this definition](/docs/api/grpc/protocol-buffers/reports#report). Optional. string filter = 3 [(google.api.field_behavior) = OPTIONAL]; diff --git a/protos/sift/rules/v1/rules.proto b/protos/sift/rules/v1/rules.proto index 65ededf28..008f64d24 100644 --- a/protos/sift/rules/v1/rules.proto +++ b/protos/sift/rules/v1/rules.proto @@ -685,7 +685,7 @@ message ListRulesRequest { // A [Common Expression Language (CEL)](https://github.com/google/cel-spec) filter string. // Available fields to filter by are `rule_id`, `client_key`, `name`, `description`, `is_external`, `asset_id`, `tag_id`, - // `created_date`, `created_by_user_id`, `modified_date`, `modified_by_user_id`, `deleted_date`, `is_archived`, and `archived_date`. + // `created_date`, `created_by_user_id`, `metadata`, `modified_date`, `modified_by_user_id`, `deleted_date`, `is_archived`, and `archived_date`. // For further information about how to use CELs, please refer to [this guide](https://github.com/google/cel-spec/blob/master/doc/langdef.md#standard-definitions). // Optional. string filter = 3 [(google.api.field_behavior) = OPTIONAL]; diff --git a/protos/sift/test_reports/v1/test_reports.proto b/protos/sift/test_reports/v1/test_reports.proto new file mode 100644 index 000000000..478a6d701 --- /dev/null +++ b/protos/sift/test_reports/v1/test_reports.proto @@ -0,0 +1,677 @@ +syntax = "proto3"; + +package sift.test_reports.v1; + +import "google/api/annotations.proto"; +import "google/api/field_behavior.proto"; +import "google/protobuf/field_mask.proto"; +import "google/protobuf/timestamp.proto"; +import "protoc-gen-openapiv2/options/annotations.proto"; +import "sift/metadata/v1/metadata.proto"; +import "sift/unit/v2/unit.proto"; + +option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = { + info: {title: "Test Results Service"} +}; + +message TestReport { + // Unique identifier for the run + string test_report_id = 1 [(google.api.field_behavior) = REQUIRED]; + + // The status of the test run + TestStatus status = 2 [(google.api.field_behavior) = REQUIRED]; + + // The name of the test run + string name = 3 [(google.api.field_behavior) = REQUIRED]; + + // The name of the test system + string test_system_name = 4 [(google.api.field_behavior) = REQUIRED]; + + // The test case that was run + string test_case = 5 [(google.api.field_behavior) = REQUIRED]; + + // The start time of the test run + google.protobuf.Timestamp start_time = 6 [(google.api.field_behavior) = REQUIRED]; + + // The end time of the test run + google.protobuf.Timestamp end_time = 7 [(google.api.field_behavior) = REQUIRED]; + + // The metadata values associated with this test run + repeated sift.metadata.v1.MetadataValue metadata = 8 [(google.api.field_behavior) = OPTIONAL]; + + // The serial number for the DUT + string serial_number = 9 [(google.api.field_behavior) = OPTIONAL]; + + // The part number for the DUT + string part_number = 10 [(google.api.field_behavior) = OPTIONAL]; + + // Unique identifier for user owner + string system_operator = 11 [(google.api.field_behavior) = OPTIONAL]; + + // The date and time the test run was archived (internal) + google.protobuf.Timestamp archived_date = 12 [(google.api.field_behavior) = OPTIONAL]; + + // Whether the test run is archived (externally exposed) + bool is_archived = 13 [(google.api.field_behavior) = OPTIONAL]; +} + +enum TestStatus { + TEST_STATUS_UNSPECIFIED = 0; + TEST_STATUS_DRAFT = 1; // Barebones test report created, waiting for file processing + TEST_STATUS_PASSED = 2; + TEST_STATUS_FAILED = 3; + TEST_STATUS_ABORTED = 4; + TEST_STATUS_ERROR = 5; + TEST_STATUS_IN_PROGRESS = 6; + TEST_STATUS_SKIPPED = 7; +} + +enum TestStepType { + TEST_STEP_TYPE_UNSPECIFIED = 0; + TEST_STEP_TYPE_SEQUENCE = 1; // ResultSet/MainSequence - top-level test sequence + TEST_STEP_TYPE_GROUP = 2; // TestGroup - logical grouping of test steps + TEST_STEP_TYPE_ACTION = 3; // SessionAction - individual executable action + TEST_STEP_TYPE_FLOW_CONTROL = 4; // Flow control elements (While, If, etc.) +} + +message TestStep { + // unique identifier for the step + string test_step_id = 1 [(google.api.field_behavior) = REQUIRED]; + + // pointer to overall test run + string test_report_id = 2 [(google.api.field_behavior) = REQUIRED]; + + // pointer to parent step, if any + string parent_step_id = 3 [(google.api.field_behavior) = OPTIONAL]; + + // Name of the test step for display + string name = 4 [(google.api.field_behavior) = REQUIRED]; + + // Description of the test step from test controller + string description = 5 [(google.api.field_behavior) = OPTIONAL]; + + // Semantic type of the test step + TestStepType step_type = 6 [(google.api.field_behavior) = REQUIRED]; + + // Hierarchical path (e.g., "1", "1.1", "1.2.3") + string step_path = 7 [(google.api.field_behavior) = REQUIRED]; + + // Status of the test step + TestStatus status = 8 [(google.api.field_behavior) = REQUIRED]; + + // Start time of the test step + google.protobuf.Timestamp start_time = 9 [(google.api.field_behavior) = REQUIRED]; + + // End time of the test step + google.protobuf.Timestamp end_time = 10 [(google.api.field_behavior) = REQUIRED]; + + // Error information of the test step + ErrorInfo error_info = 11 [(google.api.field_behavior) = OPTIONAL]; + + //repeated Measurement measurements = XX; TOOD: to be added in ENG-5623 +} + +message ErrorInfo { + int32 error_code = 1 [(google.api.field_behavior) = REQUIRED]; + string error_message = 2 [(google.api.field_behavior) = REQUIRED]; +} + +enum TestMeasurementType { + TEST_MEASUREMENT_TYPE_UNSPECIFIED = 0; + TEST_MEASUREMENT_TYPE_DOUBLE = 1; + TEST_MEASUREMENT_TYPE_STRING = 3; + TEST_MEASUREMENT_TYPE_BOOLEAN = 4; + TEST_MEASUREMENT_TYPE_LIMIT = 5; +} + +message TestMeasurement { + string measurement_id = 1 [(google.api.field_behavior) = REQUIRED]; + TestMeasurementType measurement_type = 2 [(google.api.field_behavior) = REQUIRED]; + string name = 3 [(google.api.field_behavior) = REQUIRED]; + string test_step_id = 4 [(google.api.field_behavior) = REQUIRED]; + string test_report_id = 5 [(google.api.field_behavior) = REQUIRED]; + + oneof value { + double numeric_value = 6; + string string_value = 7; + bool boolean_value = 8; + } + sift.unit.v2.Unit unit = 9 [(google.api.field_behavior) = OPTIONAL]; + oneof bounds { + NumericBounds numeric_bounds = 10; + StringBounds string_bounds = 11; + } + bool passed = 12 [(google.api.field_behavior) = REQUIRED]; + google.protobuf.Timestamp timestamp = 13 [(google.api.field_behavior) = REQUIRED]; +} + +message NumericBounds { + optional double min = 1 [(google.api.field_behavior) = OPTIONAL]; + optional double max = 2 [(google.api.field_behavior) = OPTIONAL]; +} + +message StringBounds { + string expected_value = 1 [(google.api.field_behavior) = REQUIRED]; +} + +service TestReportService { + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_tag) = {description: "Service to manage test reports"}; + + // Imports a test report from an already-uploaded file + rpc ImportTestReport(ImportTestReportRequest) returns (ImportTestReportResponse) { + option (google.api.http) = { + post: "/api/v1/test-reports:import" + body: "*" + }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + summary: "ImportTestReport" + description: "Imports a test report from an already-uploaded file." + }; + } + + // Creates a test report + rpc CreateTestReport(CreateTestReportRequest) returns (CreateTestReportResponse) { + option (google.api.http) = { + post: "/api/v1/test-reports" + body: "*" + }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + summary: "CreateTestReport" + description: "Creates a test report" + }; + } + + // Gets a single test report + rpc GetTestReport(GetTestReportRequest) returns (GetTestReportResponse) { + option (google.api.http) = {get: "/api/v1/test-reports/{test_report_id}"}; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + summary: "GetTestReport" + description: "Gets a single test report" + }; + } + + // Lists test reports with optional filtering + rpc ListTestReports(ListTestReportsRequest) returns (ListTestReportsResponse) { + option (google.api.http) = {get: "/api/v1/test-reports"}; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + summary: "ListTestReports" + description: "Lists test reports with optional filtering" + }; + } + + // Updates a test report + rpc UpdateTestReport(UpdateTestReportRequest) returns (UpdateTestReportResponse) { + option (google.api.http) = { + patch: "/api/v1/test-reports" + body: "*" + }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + summary: "UpdateTestReport" + description: "Updates a test report" + }; + } + + // Deletes a test report + rpc DeleteTestReport(DeleteTestReportRequest) returns (DeleteTestReportResponse) { + option (google.api.http) = {delete: "/api/v1/test-reports/{test_report_id}"}; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + summary: "DeleteTestReport" + description: "Deletes a test report" + }; + } + + // Creates a test step + rpc CreateTestStep(CreateTestStepRequest) returns (CreateTestStepResponse) { + option (google.api.http) = { + post: "/api/v1/test-steps" + body: "*" + }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + summary: "CreateTestStep" + description: "Creates a test step" + }; + } + + // Lists test steps with optional filtering + rpc ListTestSteps(ListTestStepsRequest) returns (ListTestStepsResponse) { + option (google.api.http) = {get: "/api/v1/test-steps"}; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + summary: "ListTestSteps" + description: "Lists test steps with optional filtering" + }; + } + + // Updates a test step + rpc UpdateTestStep(UpdateTestStepRequest) returns (UpdateTestStepResponse) { + option (google.api.http) = { + patch: "/api/v1/test-steps" + body: "*" + }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + summary: "UpdateTestStep" + description: "Updates a test step" + }; + } + + // Deletes a test step + rpc DeleteTestStep(DeleteTestStepRequest) returns (DeleteTestStepResponse) { + option (google.api.http) = {delete: "/api/v1/test-steps/{test_step_id}"}; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + summary: "DeleteTestStep" + description: "Deletes a test step" + }; + } + + // Creates a test measurement + rpc CreateTestMeasurement(CreateTestMeasurementRequest) returns (CreateTestMeasurementResponse) { + option (google.api.http) = { + post: "/api/v1/test-measurements" + body: "*" + }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + summary: "CreateTestMeasurement" + description: "Creates a test measurement" + }; + } + + // Creates multiple test measurements in a single request + rpc CreateTestMeasurements(CreateTestMeasurementsRequest) returns (CreateTestMeasurementsResponse) { + option (google.api.http) = { + post: "/api/v1/test-measurements:batch" + body: "*" + }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + summary: "CreateTestMeasurements" + description: "Creates multiple test measurements in a single request" + }; + } + + // Lists test measurements with optional filtering + rpc ListTestMeasurements(ListTestMeasurementsRequest) returns (ListTestMeasurementsResponse) { + option (google.api.http) = {get: "/api/v1/test-measurements"}; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + summary: "ListTestMeasurements" + description: "Lists test measurements with optional filtering" + }; + } + + // Counts test steps with optional filtering + rpc CountTestSteps(CountTestStepsRequest) returns (CountTestStepsResponse) { + option (google.api.http) = {get: "/api/v1/test-steps/count"}; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + summary: "CountTestSteps" + description: "Counts test steps with optional filtering" + }; + } + + // Counts test measurements with optional filtering + rpc CountTestMeasurements(CountTestMeasurementsRequest) returns (CountTestMeasurementsResponse) { + option (google.api.http) = {get: "/api/v1/test-measurements/count"}; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + summary: "CountTestMeasurements" + description: "Counts test measurements with optional filtering" + }; + } + + // Updates a test measurement + rpc UpdateTestMeasurement(UpdateTestMeasurementRequest) returns (UpdateTestMeasurementResponse) { + option (google.api.http) = { + patch: "/api/v1/test-measurements" + body: "*" + }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + summary: "UpdateTestMeasurement" + description: "Updates a test measurement" + }; + } + + // Deletes a test measurement + rpc DeleteTestMeasurement(DeleteTestMeasurementRequest) returns (DeleteTestMeasurementResponse) { + option (google.api.http) = {delete: "/api/v1/test-measurements/{measurement_id}"}; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + summary: "DeleteTestMeasurement" + description: "Deletes a test measurement" + }; + } +} + +// Request message for ImportTestReport +message ImportTestReportRequest { + // The remote file ID containing the XML test data + string remote_file_id = 1 [(google.api.field_behavior) = REQUIRED]; +} + +// Response message for ImportTestReport +message ImportTestReportResponse { + // The imported test report + TestReport test_report = 1; +} + +// Request message for CreateTestReport +message CreateTestReportRequest { + // The status of the test run + TestStatus status = 1 [(google.api.field_behavior) = REQUIRED]; + + // The name of the test run + string name = 2 [(google.api.field_behavior) = REQUIRED]; + + // The name of the test system + string test_system_name = 3 [(google.api.field_behavior) = REQUIRED]; + + // The test case that was run + string test_case = 4 [(google.api.field_behavior) = REQUIRED]; + + // The start time of the test run + google.protobuf.Timestamp start_time = 5 [(google.api.field_behavior) = REQUIRED]; + + // The end time of the test run + google.protobuf.Timestamp end_time = 6 [(google.api.field_behavior) = REQUIRED]; + + // The metadata values associated with this test run + repeated sift.metadata.v1.MetadataValue metadata = 7 [(google.api.field_behavior) = OPTIONAL]; + + // The serial number for the DUT + string serial_number = 8 [(google.api.field_behavior) = OPTIONAL]; + + // The part number for the DUT + string part_number = 9 [(google.api.field_behavior) = OPTIONAL]; + + // Unique identifier for user owner + string system_operator = 10 [(google.api.field_behavior) = OPTIONAL]; +} + +// Response message for CreateTestReport +message CreateTestReportResponse { + // The created test report + TestReport test_report = 1; +} + +// Request message for GetTestReport +message GetTestReportRequest { + // The ID of the test report to get + string test_report_id = 1 [(google.api.field_behavior) = REQUIRED]; +} + +// Response message for GetTestReport +message GetTestReportResponse { + // The test report + TestReport test_report = 1; +} + +// Request message for ListTestReports +message ListTestReportsRequest { + // The maximum number of test reports to return. + // The service may return fewer than this value. + // If unspecified, at most 50 test reports will be returned. + // The maximum value is 1000; values above 1000 will be coerced to 1000. + uint32 page_size = 1 [(google.api.field_behavior) = OPTIONAL]; + + // A page token, received from a previous `ListTestReports` call. + // Provide this to retrieve the subsequent page. + // When paginating, all other parameters provided to `ListTestReports` must match + // the call that provided the page token. + string page_token = 2 [(google.api.field_behavior) = OPTIONAL]; + + // A [Common Expression Language (CEL)](https://github.com/google/cel-spec) filter string. + // Available fields to filter by are `test_report_id`, `status`, `name`, `test_system_name`, + // `test_case`, `start_time`, `end_time`, `serial_number`, `created_by_user_id`, `modified_by_user_id`, + // `part_number`, `system_operator`, `archived_date`, and `metadata`. + // Metadata can be used in filters by using `metadata.{metadata_key_name}` as the field name. + // For further information about how to use CELs, please refer to [this guide](https://github.com/google/cel-spec/blob/master/doc/langdef.md#standard-definitions). + // For more information about the fields used for filtering, please refer to [this definition](/docs/api/grpc/protocol-buffers/test-results#testreport). Optional. + string filter = 3 [(google.api.field_behavior) = OPTIONAL]; + + // How to order the retrieved test reports. Formatted as a comma-separated string i.e. "FIELD_NAME[ desc],...". + // Available fields to order_by are `test_report_id`, `name`, `test_system_name`, `test_case`, `start_time`, `end_time`, + // `created_date`, and `modified_date`. + // If left empty, items are ordered by `start_time` in descending order (newest-first). + // For more information about the format of this field, read [this](https://google.aip.dev/132#ordering) + // Example: "start_time desc,name" + string order_by = 4 [(google.api.field_behavior) = OPTIONAL]; +} + +// Response message for ListTestReports +message ListTestReportsResponse { + // The list of test reports + repeated TestReport test_reports = 1; + + // The next page token for pagination + string next_page_token = 2; +} + +// Request message for UpdateTestReport +message UpdateTestReportRequest { + // The test report to update + TestReport test_report = 1 [(google.api.field_behavior) = REQUIRED]; + + // The field mask specifying which fields to update. The fields available to be updated are + // `status`, `name`, `test_system_name`, `test_case`, `start_time`, `end_time`, `serial_number`, + // `part_number`, `system_operator`, and `is_archived`. + google.protobuf.FieldMask update_mask = 2 [(google.api.field_behavior) = OPTIONAL]; +} + +// Response message for UpdateTestReport +message UpdateTestReportResponse { + // The updated test report + TestReport test_report = 1; +} + +// Request message for DeleteTestReport +message DeleteTestReportRequest { + // The ID of the test report to delete + string test_report_id = 1 [(google.api.field_behavior) = REQUIRED]; +} + +// Response message for DeleteTestReport +message DeleteTestReportResponse { + // Empty response indicating successful deletion +} + +// Request message for CreateTestStep +message CreateTestStepRequest { + // The test step to create + TestStep test_step = 1 [(google.api.field_behavior) = REQUIRED]; +} + +// Response message for CreateTestStep +message CreateTestStepResponse { + // The created test step + TestStep test_step = 1; +} + +// Request message for ListTestSteps +message ListTestStepsRequest { + // The maximum number of test steps to return. + // The service may return fewer than this value. + // If unspecified, at most 50 test steps will be returned. + // The maximum value is 1000; values above 1000 will be coerced to 1000. + uint32 page_size = 1 [(google.api.field_behavior) = OPTIONAL]; + + // A page token, received from a previous `ListTestSteps` call. + // Provide this to retrieve the subsequent page. + // When paginating, all other parameters provided to `ListTestSteps` must match + // the call that provided the page token. + string page_token = 2 [(google.api.field_behavior) = OPTIONAL]; + + // A [Common Expression Language (CEL)](https://github.com/google/cel-spec) filter string. + // Available fields to filter by are `test_step_id`, `test_report_id`, `parent_step_id`, `name`, + // `description`, `step_type`, `step_path`, `status`, `start_time`, `end_time`, + // `error_code`, `error_message`, `created_date`, and `modified_date`. + // For further information about how to use CELs, please refer to [this guide](https://github.com/google/cel-spec/blob/master/doc/langdef.md#standard-definitions). + // For more information about the fields used for filtering, please refer to [this definition](/docs/api/grpc/protocol-buffers/test-results#teststep). Optional. + string filter = 3 [(google.api.field_behavior) = OPTIONAL]; + + // How to order the retrieved test steps. Formatted as a comma-separated string i.e. "FIELD_NAME[ desc],...". + // Available fields to order_by are `test_step_id`, `name`, `step_type`, `step_path`, `status`, + // `start_time`, `end_time`, `created_date`, and `modified_date`. + // If left empty, items are ordered by `step_path` in ascending order. + // For more information about the format of this field, read [this](https://google.aip.dev/132#ordering) + // Example: "step_path asc,start_time desc" + string order_by = 4 [(google.api.field_behavior) = OPTIONAL]; +} + +// Response message for ListTestSteps +message ListTestStepsResponse { + // The list of test steps + repeated TestStep test_steps = 1; + + // The next page token for pagination + string next_page_token = 2; +} + +// Request message for UpdateTestStep +message UpdateTestStepRequest { + // The test step to update + TestStep test_step = 1 [(google.api.field_behavior) = REQUIRED]; + + // The field mask specifying which fields to update. The fields available to be updated are + // `name`, `description`, `step_type`, `step_path`, `test_case`, `status`, + // `start_time`, `end_time`, and `error_info`. + google.protobuf.FieldMask update_mask = 2 [(google.api.field_behavior) = OPTIONAL]; +} + +// Response message for UpdateTestStep +message UpdateTestStepResponse { + // The updated test step + TestStep test_step = 1; +} + +// Request message for DeleteTestStep +message DeleteTestStepRequest { + // The ID of the test step to delete + string test_step_id = 1 [(google.api.field_behavior) = REQUIRED]; +} + +// Response message for DeleteTestStep +message DeleteTestStepResponse { + // Empty response indicating successful deletion +} + +// Request message for CreateTestMeasurement +message CreateTestMeasurementRequest { + // The test measurement to create + TestMeasurement test_measurement = 1 [(google.api.field_behavior) = REQUIRED]; +} + +// Response message for CreateTestMeasurement +message CreateTestMeasurementResponse { + // The created test measurement + TestMeasurement test_measurement = 1; +} + +// Request message for CreateTestMeasurements +message CreateTestMeasurementsRequest { + // The test measurements to create + repeated TestMeasurement test_measurements = 1 [(google.api.field_behavior) = REQUIRED]; +} + +// Response message for CreateTestMeasurements +message CreateTestMeasurementsResponse { + // The number of test measurements successfully created + int32 measurements_created_count = 1 [(google.api.field_behavior) = REQUIRED]; + + // The IDs of the created test measurements + repeated string measurement_ids = 2 [(google.api.field_behavior) = REQUIRED]; +} + +// Request message for ListTestMeasurements +message ListTestMeasurementsRequest { + // The maximum number of test measurements to return. + // The service may return fewer than this value. + // If unspecified, at most 50 test measurements will be returned. + // The maximum value is 1000; values above 1000 will be coerced to 1000. + uint32 page_size = 1 [(google.api.field_behavior) = OPTIONAL]; + + // A page token, received from a previous `ListTestMeasurements` call. + // Provide this to retrieve the subsequent page. + // When paginating, all other parameters provided to `ListTestMeasurements` must match + // the call that provided the page token. + string page_token = 2 [(google.api.field_behavior) = OPTIONAL]; + + // A [Common Expression Language (CEL)](https://github.com/google/cel-spec) filter string. + // Available fields to filter by are `measurement_id`, `measurement_type`, `name`, `test_step_id`, + // `test_report_id`, `numeric_value`, `string_value`, `boolean_value`, `passed`, `timestamp`, + // `created_date`, and `modified_date`. + // For further information about how to use CELs, please refer to [this guide](https://github.com/google/cel-spec/blob/master/doc/langdef.md#standard-definitions). + // For more information about the fields used for filtering, please refer to [this definition](/docs/api/grpc/protocol-buffers/test-results#testmeasurement). Optional. + string filter = 3 [(google.api.field_behavior) = OPTIONAL]; + + // How to order the retrieved test measurements. Formatted as a comma-separated string i.e. "FIELD_NAME[ desc],...". + // Available fields to order_by are `measurement_id`, `name`, `measurement_type`, `test_step_id`, `test_report_id`, + // `passed`, `timestamp`, `created_date`, and `modified_date`. + // If left empty, items are ordered by `timestamp` in ascending order. + // For more information about the format of this field, read [this](https://google.aip.dev/132#ordering) + // Example: "timestamp asc,name" + string order_by = 4 [(google.api.field_behavior) = OPTIONAL]; +} + +// Response message for ListTestMeasurements +message ListTestMeasurementsResponse { + // The list of test measurements + repeated TestMeasurement test_measurements = 1; + + // The next page token for pagination + string next_page_token = 2; +} + +// Request message for CountTestSteps +message CountTestStepsRequest { + // A [Common Expression Language (CEL)](https://github.com/google/cel-spec) filter string. + // Available fields to filter by are `test_step_id`, `test_report_id`, `parent_step_id`, `name`, + // `description`, `step_type`, `step_path`, `status`, `start_time`, `end_time`, + // `error_code`, `error_message`, `created_date`, and `modified_date`. + // For further information about how to use CELs, please refer to [this guide](https://github.com/google/cel-spec/blob/master/doc/langdef.md#standard-definitions). + // For more information about the fields used for filtering, please refer to [this definition](/docs/api/grpc/protocol-buffers/test-results#teststep). Optional. + string filter = 1 [(google.api.field_behavior) = OPTIONAL]; +} + +// Response message for CountTestSteps +message CountTestStepsResponse { + // The total count of test steps matching the filter + int64 count = 1; +} + +// Request message for CountTestMeasurements +message CountTestMeasurementsRequest { + // A [Common Expression Language (CEL)](https://github.com/google/cel-spec) filter string. + // Available fields to filter by are `measurement_id`, `measurement_type`, `name`, `test_step_id`, + // `test_report_id`, `numeric_value`, `string_value`, `boolean_value`, `passed`, `timestamp`, + // `created_date`, and `modified_date`. + // For further information about how to use CELs, please refer to [this guide](https://github.com/google/cel-spec/blob/master/doc/langdef.md#standard-definitions). + // For more information about the fields used for filtering, please refer to [this definition](/docs/api/grpc/protocol-buffers/test-results#testmeasurement). Optional. + string filter = 1 [(google.api.field_behavior) = OPTIONAL]; +} + +// Response message for CountTestMeasurements +message CountTestMeasurementsResponse { + // The total count of test measurements matching the filter + int64 count = 1; +} + +// Request message for UpdateTestMeasurement +message UpdateTestMeasurementRequest { + // The test measurement to update + TestMeasurement test_measurement = 1 [(google.api.field_behavior) = REQUIRED]; + + // The field mask specifying which fields to update. The fields available to be updated are + // `name`, `measurement_type`, `numeric_value`, `string_value`, `boolean_value`, `unit`, `numeric_bounds`, + // `string_bounds`, `passed`, and `timestamp`. + google.protobuf.FieldMask update_mask = 2 [(google.api.field_behavior) = OPTIONAL]; +} + +// Response message for UpdateTestMeasurement +message UpdateTestMeasurementResponse { + // The updated test measurement + TestMeasurement test_measurement = 1; +} + +// Request message for DeleteTestMeasurement +message DeleteTestMeasurementRequest { + // The ID of the test measurement to delete + string measurement_id = 1 [(google.api.field_behavior) = REQUIRED]; +} + +// Response message for DeleteTestMeasurement +message DeleteTestMeasurementResponse { + // Empty response indicating successful deletion +} diff --git a/python/lib/sift/reports/v1/reports_pb2.pyi b/python/lib/sift/reports/v1/reports_pb2.pyi index c281070b2..2b5742521 100644 --- a/python/lib/sift/reports/v1/reports_pb2.pyi +++ b/python/lib/sift/reports/v1/reports_pb2.pyi @@ -562,7 +562,8 @@ class ListReportsRequest(google.protobuf.message.Message): """ filter: builtins.str """A [Common Expression Language (CEL)](https://github.com/google/cel-spec) filter string. - Available fields to filter by are `report_id`, `report_template_id`, `tag_name`, `name`, `run_id`, `is_archived`, and `archived_date`. + Available fields to filter by are `report_id`, `report_template_id`, `tag_name`, `name`, `run_id`, `is_archived`, `archived_date`, `created_date`, + `created_by_user_id`, `metadata`, `modified_date`, and `modified_by_user_id`. For further information about how to use CELs, please refer to [this guide](https://github.com/google/cel-spec/blob/master/doc/langdef.md#standard-definitions). For more information about the fields used for filtering, please refer to [this definition](/docs/api/grpc/protocol-buffers/reports#report). Optional. """ diff --git a/python/lib/sift/rules/v1/rules_pb2.pyi b/python/lib/sift/rules/v1/rules_pb2.pyi index 1210d7544..9911992a2 100644 --- a/python/lib/sift/rules/v1/rules_pb2.pyi +++ b/python/lib/sift/rules/v1/rules_pb2.pyi @@ -1276,7 +1276,7 @@ class ListRulesRequest(google.protobuf.message.Message): filter: builtins.str """A [Common Expression Language (CEL)](https://github.com/google/cel-spec) filter string. Available fields to filter by are `rule_id`, `client_key`, `name`, `description`, `is_external`, `asset_id`, `tag_id`, - `created_date`, `created_by_user_id`, `modified_date`, `modified_by_user_id`, `deleted_date`, `is_archived`, and `archived_date`. + `created_date`, `created_by_user_id`, `metadata`, `modified_date`, `modified_by_user_id`, `deleted_date`, `is_archived`, and `archived_date`. For further information about how to use CELs, please refer to [this guide](https://github.com/google/cel-spec/blob/master/doc/langdef.md#standard-definitions). Optional. """ diff --git a/python/lib/sift/test_reports/__init__.py b/python/lib/sift/test_reports/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/python/lib/sift/test_reports/v1/__init__.py b/python/lib/sift/test_reports/v1/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/python/lib/sift/test_reports/v1/test_reports_pb2.py b/python/lib/sift/test_reports/v1/test_reports_pb2.py new file mode 100644 index 000000000..b5f5fa31c --- /dev/null +++ b/python/lib/sift/test_reports/v1/test_reports_pb2.py @@ -0,0 +1,310 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: sift/test_reports/v1/test_reports.proto +# Protobuf Python Version: 5.26.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 +from google.api import field_behavior_pb2 as google_dot_api_dot_field__behavior__pb2 +from google.protobuf import field_mask_pb2 as google_dot_protobuf_dot_field__mask__pb2 +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 +from protoc_gen_openapiv2.options import annotations_pb2 as protoc__gen__openapiv2_dot_options_dot_annotations__pb2 +from sift.metadata.v1 import metadata_pb2 as sift_dot_metadata_dot_v1_dot_metadata__pb2 +from sift.unit.v2 import unit_pb2 as sift_dot_unit_dot_v2_dot_unit__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'sift/test_reports/v1/test_reports.proto\x12\x14sift.test_reports.v1\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a google/protobuf/field_mask.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a\x1fsift/metadata/v1/metadata.proto\x1a\x17sift/unit/v2/unit.proto\"\x88\x05\n\nTestReport\x12)\n\x0etest_report_id\x18\x01 \x01(\tB\x03\xe0\x41\x02R\x0ctestReportId\x12=\n\x06status\x18\x02 \x01(\x0e\x32 .sift.test_reports.v1.TestStatusB\x03\xe0\x41\x02R\x06status\x12\x17\n\x04name\x18\x03 \x01(\tB\x03\xe0\x41\x02R\x04name\x12-\n\x10test_system_name\x18\x04 \x01(\tB\x03\xe0\x41\x02R\x0etestSystemName\x12 \n\ttest_case\x18\x05 \x01(\tB\x03\xe0\x41\x02R\x08testCase\x12>\n\nstart_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x02R\tstartTime\x12:\n\x08\x65nd_time\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x02R\x07\x65ndTime\x12@\n\x08metadata\x18\x08 \x03(\x0b\x32\x1f.sift.metadata.v1.MetadataValueB\x03\xe0\x41\x01R\x08metadata\x12(\n\rserial_number\x18\t \x01(\tB\x03\xe0\x41\x01R\x0cserialNumber\x12$\n\x0bpart_number\x18\n \x01(\tB\x03\xe0\x41\x01R\npartNumber\x12,\n\x0fsystem_operator\x18\x0b \x01(\tB\x03\xe0\x41\x01R\x0esystemOperator\x12\x44\n\rarchived_date\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x01R\x0c\x61rchivedDate\x12$\n\x0bis_archived\x18\r \x01(\x08\x42\x03\xe0\x41\x01R\nisArchived\"\xaf\x04\n\x08TestStep\x12%\n\x0ctest_step_id\x18\x01 \x01(\tB\x03\xe0\x41\x02R\ntestStepId\x12)\n\x0etest_report_id\x18\x02 \x01(\tB\x03\xe0\x41\x02R\x0ctestReportId\x12)\n\x0eparent_step_id\x18\x03 \x01(\tB\x03\xe0\x41\x01R\x0cparentStepId\x12\x17\n\x04name\x18\x04 \x01(\tB\x03\xe0\x41\x02R\x04name\x12%\n\x0b\x64\x65scription\x18\x05 \x01(\tB\x03\xe0\x41\x01R\x0b\x64\x65scription\x12\x44\n\tstep_type\x18\x06 \x01(\x0e\x32\".sift.test_reports.v1.TestStepTypeB\x03\xe0\x41\x02R\x08stepType\x12 \n\tstep_path\x18\x07 \x01(\tB\x03\xe0\x41\x02R\x08stepPath\x12=\n\x06status\x18\x08 \x01(\x0e\x32 .sift.test_reports.v1.TestStatusB\x03\xe0\x41\x02R\x06status\x12>\n\nstart_time\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x02R\tstartTime\x12:\n\x08\x65nd_time\x18\n \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x02R\x07\x65ndTime\x12\x43\n\nerror_info\x18\x0b \x01(\x0b\x32\x1f.sift.test_reports.v1.ErrorInfoB\x03\xe0\x41\x01R\terrorInfo\"Y\n\tErrorInfo\x12\"\n\nerror_code\x18\x01 \x01(\x05\x42\x03\xe0\x41\x02R\terrorCode\x12(\n\rerror_message\x18\x02 \x01(\tB\x03\xe0\x41\x02R\x0c\x65rrorMessage\"\xab\x05\n\x0fTestMeasurement\x12*\n\x0emeasurement_id\x18\x01 \x01(\tB\x03\xe0\x41\x02R\rmeasurementId\x12Y\n\x10measurement_type\x18\x02 \x01(\x0e\x32).sift.test_reports.v1.TestMeasurementTypeB\x03\xe0\x41\x02R\x0fmeasurementType\x12\x17\n\x04name\x18\x03 \x01(\tB\x03\xe0\x41\x02R\x04name\x12%\n\x0ctest_step_id\x18\x04 \x01(\tB\x03\xe0\x41\x02R\ntestStepId\x12)\n\x0etest_report_id\x18\x05 \x01(\tB\x03\xe0\x41\x02R\x0ctestReportId\x12%\n\rnumeric_value\x18\x06 \x01(\x01H\x00R\x0cnumericValue\x12#\n\x0cstring_value\x18\x07 \x01(\tH\x00R\x0bstringValue\x12%\n\rboolean_value\x18\x08 \x01(\x08H\x00R\x0c\x62ooleanValue\x12+\n\x04unit\x18\t \x01(\x0b\x32\x12.sift.unit.v2.UnitB\x03\xe0\x41\x01R\x04unit\x12L\n\x0enumeric_bounds\x18\n \x01(\x0b\x32#.sift.test_reports.v1.NumericBoundsH\x01R\rnumericBounds\x12I\n\rstring_bounds\x18\x0b \x01(\x0b\x32\".sift.test_reports.v1.StringBoundsH\x01R\x0cstringBounds\x12\x1b\n\x06passed\x18\x0c \x01(\x08\x42\x03\xe0\x41\x02R\x06passed\x12=\n\ttimestamp\x18\r \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x02R\ttimestampB\x07\n\x05valueB\x08\n\x06\x62ounds\"W\n\rNumericBounds\x12\x1a\n\x03min\x18\x01 \x01(\x01\x42\x03\xe0\x41\x01H\x00R\x03min\x88\x01\x01\x12\x1a\n\x03max\x18\x02 \x01(\x01\x42\x03\xe0\x41\x01H\x01R\x03max\x88\x01\x01\x42\x06\n\x04_minB\x06\n\x04_max\":\n\x0cStringBounds\x12*\n\x0e\x65xpected_value\x18\x01 \x01(\tB\x03\xe0\x41\x02R\rexpectedValue\"D\n\x17ImportTestReportRequest\x12)\n\x0eremote_file_id\x18\x01 \x01(\tB\x03\xe0\x41\x02R\x0cremoteFileId\"]\n\x18ImportTestReportResponse\x12\x41\n\x0btest_report\x18\x01 \x01(\x0b\x32 .sift.test_reports.v1.TestReportR\ntestReport\"\xfe\x03\n\x17\x43reateTestReportRequest\x12=\n\x06status\x18\x01 \x01(\x0e\x32 .sift.test_reports.v1.TestStatusB\x03\xe0\x41\x02R\x06status\x12\x17\n\x04name\x18\x02 \x01(\tB\x03\xe0\x41\x02R\x04name\x12-\n\x10test_system_name\x18\x03 \x01(\tB\x03\xe0\x41\x02R\x0etestSystemName\x12 \n\ttest_case\x18\x04 \x01(\tB\x03\xe0\x41\x02R\x08testCase\x12>\n\nstart_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x02R\tstartTime\x12:\n\x08\x65nd_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x02R\x07\x65ndTime\x12@\n\x08metadata\x18\x07 \x03(\x0b\x32\x1f.sift.metadata.v1.MetadataValueB\x03\xe0\x41\x01R\x08metadata\x12(\n\rserial_number\x18\x08 \x01(\tB\x03\xe0\x41\x01R\x0cserialNumber\x12$\n\x0bpart_number\x18\t \x01(\tB\x03\xe0\x41\x01R\npartNumber\x12,\n\x0fsystem_operator\x18\n \x01(\tB\x03\xe0\x41\x01R\x0esystemOperator\"]\n\x18\x43reateTestReportResponse\x12\x41\n\x0btest_report\x18\x01 \x01(\x0b\x32 .sift.test_reports.v1.TestReportR\ntestReport\"A\n\x14GetTestReportRequest\x12)\n\x0etest_report_id\x18\x01 \x01(\tB\x03\xe0\x41\x02R\x0ctestReportId\"Z\n\x15GetTestReportResponse\x12\x41\n\x0btest_report\x18\x01 \x01(\x0b\x32 .sift.test_reports.v1.TestReportR\ntestReport\"\x9b\x01\n\x16ListTestReportsRequest\x12 \n\tpage_size\x18\x01 \x01(\rB\x03\xe0\x41\x01R\x08pageSize\x12\"\n\npage_token\x18\x02 \x01(\tB\x03\xe0\x41\x01R\tpageToken\x12\x1b\n\x06\x66ilter\x18\x03 \x01(\tB\x03\xe0\x41\x01R\x06\x66ilter\x12\x1e\n\x08order_by\x18\x04 \x01(\tB\x03\xe0\x41\x01R\x07orderBy\"\x86\x01\n\x17ListTestReportsResponse\x12\x43\n\x0ctest_reports\x18\x01 \x03(\x0b\x32 .sift.test_reports.v1.TestReportR\x0btestReports\x12&\n\x0fnext_page_token\x18\x02 \x01(\tR\rnextPageToken\"\xa3\x01\n\x17UpdateTestReportRequest\x12\x46\n\x0btest_report\x18\x01 \x01(\x0b\x32 .sift.test_reports.v1.TestReportB\x03\xe0\x41\x02R\ntestReport\x12@\n\x0bupdate_mask\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskB\x03\xe0\x41\x01R\nupdateMask\"]\n\x18UpdateTestReportResponse\x12\x41\n\x0btest_report\x18\x01 \x01(\x0b\x32 .sift.test_reports.v1.TestReportR\ntestReport\"D\n\x17\x44\x65leteTestReportRequest\x12)\n\x0etest_report_id\x18\x01 \x01(\tB\x03\xe0\x41\x02R\x0ctestReportId\"\x1a\n\x18\x44\x65leteTestReportResponse\"Y\n\x15\x43reateTestStepRequest\x12@\n\ttest_step\x18\x01 \x01(\x0b\x32\x1e.sift.test_reports.v1.TestStepB\x03\xe0\x41\x02R\x08testStep\"U\n\x16\x43reateTestStepResponse\x12;\n\ttest_step\x18\x01 \x01(\x0b\x32\x1e.sift.test_reports.v1.TestStepR\x08testStep\"\x99\x01\n\x14ListTestStepsRequest\x12 \n\tpage_size\x18\x01 \x01(\rB\x03\xe0\x41\x01R\x08pageSize\x12\"\n\npage_token\x18\x02 \x01(\tB\x03\xe0\x41\x01R\tpageToken\x12\x1b\n\x06\x66ilter\x18\x03 \x01(\tB\x03\xe0\x41\x01R\x06\x66ilter\x12\x1e\n\x08order_by\x18\x04 \x01(\tB\x03\xe0\x41\x01R\x07orderBy\"~\n\x15ListTestStepsResponse\x12=\n\ntest_steps\x18\x01 \x03(\x0b\x32\x1e.sift.test_reports.v1.TestStepR\ttestSteps\x12&\n\x0fnext_page_token\x18\x02 \x01(\tR\rnextPageToken\"\x9b\x01\n\x15UpdateTestStepRequest\x12@\n\ttest_step\x18\x01 \x01(\x0b\x32\x1e.sift.test_reports.v1.TestStepB\x03\xe0\x41\x02R\x08testStep\x12@\n\x0bupdate_mask\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskB\x03\xe0\x41\x01R\nupdateMask\"U\n\x16UpdateTestStepResponse\x12;\n\ttest_step\x18\x01 \x01(\x0b\x32\x1e.sift.test_reports.v1.TestStepR\x08testStep\">\n\x15\x44\x65leteTestStepRequest\x12%\n\x0ctest_step_id\x18\x01 \x01(\tB\x03\xe0\x41\x02R\ntestStepId\"\x18\n\x16\x44\x65leteTestStepResponse\"u\n\x1c\x43reateTestMeasurementRequest\x12U\n\x10test_measurement\x18\x01 \x01(\x0b\x32%.sift.test_reports.v1.TestMeasurementB\x03\xe0\x41\x02R\x0ftestMeasurement\"q\n\x1d\x43reateTestMeasurementResponse\x12P\n\x10test_measurement\x18\x01 \x01(\x0b\x32%.sift.test_reports.v1.TestMeasurementR\x0ftestMeasurement\"x\n\x1d\x43reateTestMeasurementsRequest\x12W\n\x11test_measurements\x18\x01 \x03(\x0b\x32%.sift.test_reports.v1.TestMeasurementB\x03\xe0\x41\x02R\x10testMeasurements\"\x91\x01\n\x1e\x43reateTestMeasurementsResponse\x12\x41\n\x1ameasurements_created_count\x18\x01 \x01(\x05\x42\x03\xe0\x41\x02R\x18measurementsCreatedCount\x12,\n\x0fmeasurement_ids\x18\x02 \x03(\tB\x03\xe0\x41\x02R\x0emeasurementIds\"\xa0\x01\n\x1bListTestMeasurementsRequest\x12 \n\tpage_size\x18\x01 \x01(\rB\x03\xe0\x41\x01R\x08pageSize\x12\"\n\npage_token\x18\x02 \x01(\tB\x03\xe0\x41\x01R\tpageToken\x12\x1b\n\x06\x66ilter\x18\x03 \x01(\tB\x03\xe0\x41\x01R\x06\x66ilter\x12\x1e\n\x08order_by\x18\x04 \x01(\tB\x03\xe0\x41\x01R\x07orderBy\"\x9a\x01\n\x1cListTestMeasurementsResponse\x12R\n\x11test_measurements\x18\x01 \x03(\x0b\x32%.sift.test_reports.v1.TestMeasurementR\x10testMeasurements\x12&\n\x0fnext_page_token\x18\x02 \x01(\tR\rnextPageToken\"4\n\x15\x43ountTestStepsRequest\x12\x1b\n\x06\x66ilter\x18\x01 \x01(\tB\x03\xe0\x41\x01R\x06\x66ilter\".\n\x16\x43ountTestStepsResponse\x12\x14\n\x05\x63ount\x18\x01 \x01(\x03R\x05\x63ount\";\n\x1c\x43ountTestMeasurementsRequest\x12\x1b\n\x06\x66ilter\x18\x01 \x01(\tB\x03\xe0\x41\x01R\x06\x66ilter\"5\n\x1d\x43ountTestMeasurementsResponse\x12\x14\n\x05\x63ount\x18\x01 \x01(\x03R\x05\x63ount\"\xb7\x01\n\x1cUpdateTestMeasurementRequest\x12U\n\x10test_measurement\x18\x01 \x01(\x0b\x32%.sift.test_reports.v1.TestMeasurementB\x03\xe0\x41\x02R\x0ftestMeasurement\x12@\n\x0bupdate_mask\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskB\x03\xe0\x41\x01R\nupdateMask\"q\n\x1dUpdateTestMeasurementResponse\x12P\n\x10test_measurement\x18\x01 \x01(\x0b\x32%.sift.test_reports.v1.TestMeasurementR\x0ftestMeasurement\"J\n\x1c\x44\x65leteTestMeasurementRequest\x12*\n\x0emeasurement_id\x18\x01 \x01(\tB\x03\xe0\x41\x02R\rmeasurementId\"\x1f\n\x1d\x44\x65leteTestMeasurementResponse*\xd6\x01\n\nTestStatus\x12\x1b\n\x17TEST_STATUS_UNSPECIFIED\x10\x00\x12\x15\n\x11TEST_STATUS_DRAFT\x10\x01\x12\x16\n\x12TEST_STATUS_PASSED\x10\x02\x12\x16\n\x12TEST_STATUS_FAILED\x10\x03\x12\x17\n\x13TEST_STATUS_ABORTED\x10\x04\x12\x15\n\x11TEST_STATUS_ERROR\x10\x05\x12\x1b\n\x17TEST_STATUS_IN_PROGRESS\x10\x06\x12\x17\n\x13TEST_STATUS_SKIPPED\x10\x07*\xa1\x01\n\x0cTestStepType\x12\x1e\n\x1aTEST_STEP_TYPE_UNSPECIFIED\x10\x00\x12\x1b\n\x17TEST_STEP_TYPE_SEQUENCE\x10\x01\x12\x18\n\x14TEST_STEP_TYPE_GROUP\x10\x02\x12\x19\n\x15TEST_STEP_TYPE_ACTION\x10\x03\x12\x1f\n\x1bTEST_STEP_TYPE_FLOW_CONTROL\x10\x04*\xc4\x01\n\x13TestMeasurementType\x12%\n!TEST_MEASUREMENT_TYPE_UNSPECIFIED\x10\x00\x12 \n\x1cTEST_MEASUREMENT_TYPE_DOUBLE\x10\x01\x12 \n\x1cTEST_MEASUREMENT_TYPE_STRING\x10\x03\x12!\n\x1dTEST_MEASUREMENT_TYPE_BOOLEAN\x10\x04\x12\x1f\n\x1bTEST_MEASUREMENT_TYPE_LIMIT\x10\x05\x32\xd7\x1c\n\x11TestReportService\x12\xe4\x01\n\x10ImportTestReport\x12-.sift.test_reports.v1.ImportTestReportRequest\x1a..sift.test_reports.v1.ImportTestReportResponse\"q\x92\x41H\x12\x10ImportTestReport\x1a\x34Imports a test report from an already-uploaded file.\x82\xd3\xe4\x93\x02 \"\x1b/api/v1/test-reports:import:\x01*\x12\xbe\x01\n\x10\x43reateTestReport\x12-.sift.test_reports.v1.CreateTestReportRequest\x1a..sift.test_reports.v1.CreateTestReportResponse\"K\x92\x41)\x12\x10\x43reateTestReport\x1a\x15\x43reates a test report\x82\xd3\xe4\x93\x02\x19\"\x14/api/v1/test-reports:\x01*\x12\xc4\x01\n\rGetTestReport\x12*.sift.test_reports.v1.GetTestReportRequest\x1a+.sift.test_reports.v1.GetTestReportResponse\"Z\x92\x41*\x12\rGetTestReport\x1a\x19Gets a single test report\x82\xd3\xe4\x93\x02\'\x12%/api/v1/test-reports/{test_report_id}\x12\xcc\x01\n\x0fListTestReports\x12,.sift.test_reports.v1.ListTestReportsRequest\x1a-.sift.test_reports.v1.ListTestReportsResponse\"\\\x92\x41=\x12\x0fListTestReports\x1a*Lists test reports with optional filtering\x82\xd3\xe4\x93\x02\x16\x12\x14/api/v1/test-reports\x12\xbe\x01\n\x10UpdateTestReport\x12-.sift.test_reports.v1.UpdateTestReportRequest\x1a..sift.test_reports.v1.UpdateTestReportResponse\"K\x92\x41)\x12\x10UpdateTestReport\x1a\x15Updates a test report\x82\xd3\xe4\x93\x02\x19\x32\x14/api/v1/test-reports:\x01*\x12\xcc\x01\n\x10\x44\x65leteTestReport\x12-.sift.test_reports.v1.DeleteTestReportRequest\x1a..sift.test_reports.v1.DeleteTestReportResponse\"Y\x92\x41)\x12\x10\x44\x65leteTestReport\x1a\x15\x44\x65letes a test report\x82\xd3\xe4\x93\x02\'*%/api/v1/test-reports/{test_report_id}\x12\xb2\x01\n\x0e\x43reateTestStep\x12+.sift.test_reports.v1.CreateTestStepRequest\x1a,.sift.test_reports.v1.CreateTestStepResponse\"E\x92\x41%\x12\x0e\x43reateTestStep\x1a\x13\x43reates a test step\x82\xd3\xe4\x93\x02\x17\"\x12/api/v1/test-steps:\x01*\x12\xc0\x01\n\rListTestSteps\x12*.sift.test_reports.v1.ListTestStepsRequest\x1a+.sift.test_reports.v1.ListTestStepsResponse\"V\x92\x41\x39\x12\rListTestSteps\x1a(Lists test steps with optional filtering\x82\xd3\xe4\x93\x02\x14\x12\x12/api/v1/test-steps\x12\xb2\x01\n\x0eUpdateTestStep\x12+.sift.test_reports.v1.UpdateTestStepRequest\x1a,.sift.test_reports.v1.UpdateTestStepResponse\"E\x92\x41%\x12\x0eUpdateTestStep\x1a\x13Updates a test step\x82\xd3\xe4\x93\x02\x17\x32\x12/api/v1/test-steps:\x01*\x12\xbe\x01\n\x0e\x44\x65leteTestStep\x12+.sift.test_reports.v1.DeleteTestStepRequest\x1a,.sift.test_reports.v1.DeleteTestStepResponse\"Q\x92\x41%\x12\x0e\x44\x65leteTestStep\x1a\x13\x44\x65letes a test step\x82\xd3\xe4\x93\x02#*!/api/v1/test-steps/{test_step_id}\x12\xdc\x01\n\x15\x43reateTestMeasurement\x12\x32.sift.test_reports.v1.CreateTestMeasurementRequest\x1a\x33.sift.test_reports.v1.CreateTestMeasurementResponse\"Z\x92\x41\x33\x12\x15\x43reateTestMeasurement\x1a\x1a\x43reates a test measurement\x82\xd3\xe4\x93\x02\x1e\"\x19/api/v1/test-measurements:\x01*\x12\x82\x02\n\x16\x43reateTestMeasurements\x12\x33.sift.test_reports.v1.CreateTestMeasurementsRequest\x1a\x34.sift.test_reports.v1.CreateTestMeasurementsResponse\"}\x92\x41P\x12\x16\x43reateTestMeasurements\x1a\x36\x43reates multiple test measurements in a single request\x82\xd3\xe4\x93\x02$\"\x1f/api/v1/test-measurements:batch:\x01*\x12\xea\x01\n\x14ListTestMeasurements\x12\x31.sift.test_reports.v1.ListTestMeasurementsRequest\x1a\x32.sift.test_reports.v1.ListTestMeasurementsResponse\"k\x92\x41G\x12\x14ListTestMeasurements\x1a/Lists test measurements with optional filtering\x82\xd3\xe4\x93\x02\x1b\x12\x19/api/v1/test-measurements\x12\xcb\x01\n\x0e\x43ountTestSteps\x12+.sift.test_reports.v1.CountTestStepsRequest\x1a,.sift.test_reports.v1.CountTestStepsResponse\"^\x92\x41;\x12\x0e\x43ountTestSteps\x1a)Counts test steps with optional filtering\x82\xd3\xe4\x93\x02\x1a\x12\x18/api/v1/test-steps/count\x12\xf5\x01\n\x15\x43ountTestMeasurements\x12\x32.sift.test_reports.v1.CountTestMeasurementsRequest\x1a\x33.sift.test_reports.v1.CountTestMeasurementsResponse\"s\x92\x41I\x12\x15\x43ountTestMeasurements\x1a\x30\x43ounts test measurements with optional filtering\x82\xd3\xe4\x93\x02!\x12\x1f/api/v1/test-measurements/count\x12\xdc\x01\n\x15UpdateTestMeasurement\x12\x32.sift.test_reports.v1.UpdateTestMeasurementRequest\x1a\x33.sift.test_reports.v1.UpdateTestMeasurementResponse\"Z\x92\x41\x33\x12\x15UpdateTestMeasurement\x1a\x1aUpdates a test measurement\x82\xd3\xe4\x93\x02\x1e\x32\x19/api/v1/test-measurements:\x01*\x12\xea\x01\n\x15\x44\x65leteTestMeasurement\x12\x32.sift.test_reports.v1.DeleteTestMeasurementRequest\x1a\x33.sift.test_reports.v1.DeleteTestMeasurementResponse\"h\x92\x41\x33\x12\x15\x44\x65leteTestMeasurement\x1a\x1a\x44\x65letes a test measurement\x82\xd3\xe4\x93\x02,**/api/v1/test-measurements/{measurement_id}\x1a#\x92\x41 \x12\x1eService to manage test reportsB\xb5\x01\n\x18\x63om.sift.test_reports.v1B\x10TestReportsProtoP\x01\xa2\x02\x03STX\xaa\x02\x13Sift.TestReports.V1\xca\x02\x13Sift\\TestReports\\V1\xe2\x02\x1fSift\\TestReports\\V1\\GPBMetadata\xea\x02\x15Sift::TestReports::V1\x92\x41\x18\x12\x16\n\x14Test Results Serviceb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'sift.test_reports.v1.test_reports_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\030com.sift.test_reports.v1B\020TestReportsProtoP\001\242\002\003STX\252\002\023Sift.TestReports.V1\312\002\023Sift\\TestReports\\V1\342\002\037Sift\\TestReports\\V1\\GPBMetadata\352\002\025Sift::TestReports::V1\222A\030\022\026\n\024Test Results Service' + _globals['_TESTREPORT'].fields_by_name['test_report_id']._loaded_options = None + _globals['_TESTREPORT'].fields_by_name['test_report_id']._serialized_options = b'\340A\002' + _globals['_TESTREPORT'].fields_by_name['status']._loaded_options = None + _globals['_TESTREPORT'].fields_by_name['status']._serialized_options = b'\340A\002' + _globals['_TESTREPORT'].fields_by_name['name']._loaded_options = None + _globals['_TESTREPORT'].fields_by_name['name']._serialized_options = b'\340A\002' + _globals['_TESTREPORT'].fields_by_name['test_system_name']._loaded_options = None + _globals['_TESTREPORT'].fields_by_name['test_system_name']._serialized_options = b'\340A\002' + _globals['_TESTREPORT'].fields_by_name['test_case']._loaded_options = None + _globals['_TESTREPORT'].fields_by_name['test_case']._serialized_options = b'\340A\002' + _globals['_TESTREPORT'].fields_by_name['start_time']._loaded_options = None + _globals['_TESTREPORT'].fields_by_name['start_time']._serialized_options = b'\340A\002' + _globals['_TESTREPORT'].fields_by_name['end_time']._loaded_options = None + _globals['_TESTREPORT'].fields_by_name['end_time']._serialized_options = b'\340A\002' + _globals['_TESTREPORT'].fields_by_name['metadata']._loaded_options = None + _globals['_TESTREPORT'].fields_by_name['metadata']._serialized_options = b'\340A\001' + _globals['_TESTREPORT'].fields_by_name['serial_number']._loaded_options = None + _globals['_TESTREPORT'].fields_by_name['serial_number']._serialized_options = b'\340A\001' + _globals['_TESTREPORT'].fields_by_name['part_number']._loaded_options = None + _globals['_TESTREPORT'].fields_by_name['part_number']._serialized_options = b'\340A\001' + _globals['_TESTREPORT'].fields_by_name['system_operator']._loaded_options = None + _globals['_TESTREPORT'].fields_by_name['system_operator']._serialized_options = b'\340A\001' + _globals['_TESTREPORT'].fields_by_name['archived_date']._loaded_options = None + _globals['_TESTREPORT'].fields_by_name['archived_date']._serialized_options = b'\340A\001' + _globals['_TESTREPORT'].fields_by_name['is_archived']._loaded_options = None + _globals['_TESTREPORT'].fields_by_name['is_archived']._serialized_options = b'\340A\001' + _globals['_TESTSTEP'].fields_by_name['test_step_id']._loaded_options = None + _globals['_TESTSTEP'].fields_by_name['test_step_id']._serialized_options = b'\340A\002' + _globals['_TESTSTEP'].fields_by_name['test_report_id']._loaded_options = None + _globals['_TESTSTEP'].fields_by_name['test_report_id']._serialized_options = b'\340A\002' + _globals['_TESTSTEP'].fields_by_name['parent_step_id']._loaded_options = None + _globals['_TESTSTEP'].fields_by_name['parent_step_id']._serialized_options = b'\340A\001' + _globals['_TESTSTEP'].fields_by_name['name']._loaded_options = None + _globals['_TESTSTEP'].fields_by_name['name']._serialized_options = b'\340A\002' + _globals['_TESTSTEP'].fields_by_name['description']._loaded_options = None + _globals['_TESTSTEP'].fields_by_name['description']._serialized_options = b'\340A\001' + _globals['_TESTSTEP'].fields_by_name['step_type']._loaded_options = None + _globals['_TESTSTEP'].fields_by_name['step_type']._serialized_options = b'\340A\002' + _globals['_TESTSTEP'].fields_by_name['step_path']._loaded_options = None + _globals['_TESTSTEP'].fields_by_name['step_path']._serialized_options = b'\340A\002' + _globals['_TESTSTEP'].fields_by_name['status']._loaded_options = None + _globals['_TESTSTEP'].fields_by_name['status']._serialized_options = b'\340A\002' + _globals['_TESTSTEP'].fields_by_name['start_time']._loaded_options = None + _globals['_TESTSTEP'].fields_by_name['start_time']._serialized_options = b'\340A\002' + _globals['_TESTSTEP'].fields_by_name['end_time']._loaded_options = None + _globals['_TESTSTEP'].fields_by_name['end_time']._serialized_options = b'\340A\002' + _globals['_TESTSTEP'].fields_by_name['error_info']._loaded_options = None + _globals['_TESTSTEP'].fields_by_name['error_info']._serialized_options = b'\340A\001' + _globals['_ERRORINFO'].fields_by_name['error_code']._loaded_options = None + _globals['_ERRORINFO'].fields_by_name['error_code']._serialized_options = b'\340A\002' + _globals['_ERRORINFO'].fields_by_name['error_message']._loaded_options = None + _globals['_ERRORINFO'].fields_by_name['error_message']._serialized_options = b'\340A\002' + _globals['_TESTMEASUREMENT'].fields_by_name['measurement_id']._loaded_options = None + _globals['_TESTMEASUREMENT'].fields_by_name['measurement_id']._serialized_options = b'\340A\002' + _globals['_TESTMEASUREMENT'].fields_by_name['measurement_type']._loaded_options = None + _globals['_TESTMEASUREMENT'].fields_by_name['measurement_type']._serialized_options = b'\340A\002' + _globals['_TESTMEASUREMENT'].fields_by_name['name']._loaded_options = None + _globals['_TESTMEASUREMENT'].fields_by_name['name']._serialized_options = b'\340A\002' + _globals['_TESTMEASUREMENT'].fields_by_name['test_step_id']._loaded_options = None + _globals['_TESTMEASUREMENT'].fields_by_name['test_step_id']._serialized_options = b'\340A\002' + _globals['_TESTMEASUREMENT'].fields_by_name['test_report_id']._loaded_options = None + _globals['_TESTMEASUREMENT'].fields_by_name['test_report_id']._serialized_options = b'\340A\002' + _globals['_TESTMEASUREMENT'].fields_by_name['unit']._loaded_options = None + _globals['_TESTMEASUREMENT'].fields_by_name['unit']._serialized_options = b'\340A\001' + _globals['_TESTMEASUREMENT'].fields_by_name['passed']._loaded_options = None + _globals['_TESTMEASUREMENT'].fields_by_name['passed']._serialized_options = b'\340A\002' + _globals['_TESTMEASUREMENT'].fields_by_name['timestamp']._loaded_options = None + _globals['_TESTMEASUREMENT'].fields_by_name['timestamp']._serialized_options = b'\340A\002' + _globals['_NUMERICBOUNDS'].fields_by_name['min']._loaded_options = None + _globals['_NUMERICBOUNDS'].fields_by_name['min']._serialized_options = b'\340A\001' + _globals['_NUMERICBOUNDS'].fields_by_name['max']._loaded_options = None + _globals['_NUMERICBOUNDS'].fields_by_name['max']._serialized_options = b'\340A\001' + _globals['_STRINGBOUNDS'].fields_by_name['expected_value']._loaded_options = None + _globals['_STRINGBOUNDS'].fields_by_name['expected_value']._serialized_options = b'\340A\002' + _globals['_IMPORTTESTREPORTREQUEST'].fields_by_name['remote_file_id']._loaded_options = None + _globals['_IMPORTTESTREPORTREQUEST'].fields_by_name['remote_file_id']._serialized_options = b'\340A\002' + _globals['_CREATETESTREPORTREQUEST'].fields_by_name['status']._loaded_options = None + _globals['_CREATETESTREPORTREQUEST'].fields_by_name['status']._serialized_options = b'\340A\002' + _globals['_CREATETESTREPORTREQUEST'].fields_by_name['name']._loaded_options = None + _globals['_CREATETESTREPORTREQUEST'].fields_by_name['name']._serialized_options = b'\340A\002' + _globals['_CREATETESTREPORTREQUEST'].fields_by_name['test_system_name']._loaded_options = None + _globals['_CREATETESTREPORTREQUEST'].fields_by_name['test_system_name']._serialized_options = b'\340A\002' + _globals['_CREATETESTREPORTREQUEST'].fields_by_name['test_case']._loaded_options = None + _globals['_CREATETESTREPORTREQUEST'].fields_by_name['test_case']._serialized_options = b'\340A\002' + _globals['_CREATETESTREPORTREQUEST'].fields_by_name['start_time']._loaded_options = None + _globals['_CREATETESTREPORTREQUEST'].fields_by_name['start_time']._serialized_options = b'\340A\002' + _globals['_CREATETESTREPORTREQUEST'].fields_by_name['end_time']._loaded_options = None + _globals['_CREATETESTREPORTREQUEST'].fields_by_name['end_time']._serialized_options = b'\340A\002' + _globals['_CREATETESTREPORTREQUEST'].fields_by_name['metadata']._loaded_options = None + _globals['_CREATETESTREPORTREQUEST'].fields_by_name['metadata']._serialized_options = b'\340A\001' + _globals['_CREATETESTREPORTREQUEST'].fields_by_name['serial_number']._loaded_options = None + _globals['_CREATETESTREPORTREQUEST'].fields_by_name['serial_number']._serialized_options = b'\340A\001' + _globals['_CREATETESTREPORTREQUEST'].fields_by_name['part_number']._loaded_options = None + _globals['_CREATETESTREPORTREQUEST'].fields_by_name['part_number']._serialized_options = b'\340A\001' + _globals['_CREATETESTREPORTREQUEST'].fields_by_name['system_operator']._loaded_options = None + _globals['_CREATETESTREPORTREQUEST'].fields_by_name['system_operator']._serialized_options = b'\340A\001' + _globals['_GETTESTREPORTREQUEST'].fields_by_name['test_report_id']._loaded_options = None + _globals['_GETTESTREPORTREQUEST'].fields_by_name['test_report_id']._serialized_options = b'\340A\002' + _globals['_LISTTESTREPORTSREQUEST'].fields_by_name['page_size']._loaded_options = None + _globals['_LISTTESTREPORTSREQUEST'].fields_by_name['page_size']._serialized_options = b'\340A\001' + _globals['_LISTTESTREPORTSREQUEST'].fields_by_name['page_token']._loaded_options = None + _globals['_LISTTESTREPORTSREQUEST'].fields_by_name['page_token']._serialized_options = b'\340A\001' + _globals['_LISTTESTREPORTSREQUEST'].fields_by_name['filter']._loaded_options = None + _globals['_LISTTESTREPORTSREQUEST'].fields_by_name['filter']._serialized_options = b'\340A\001' + _globals['_LISTTESTREPORTSREQUEST'].fields_by_name['order_by']._loaded_options = None + _globals['_LISTTESTREPORTSREQUEST'].fields_by_name['order_by']._serialized_options = b'\340A\001' + _globals['_UPDATETESTREPORTREQUEST'].fields_by_name['test_report']._loaded_options = None + _globals['_UPDATETESTREPORTREQUEST'].fields_by_name['test_report']._serialized_options = b'\340A\002' + _globals['_UPDATETESTREPORTREQUEST'].fields_by_name['update_mask']._loaded_options = None + _globals['_UPDATETESTREPORTREQUEST'].fields_by_name['update_mask']._serialized_options = b'\340A\001' + _globals['_DELETETESTREPORTREQUEST'].fields_by_name['test_report_id']._loaded_options = None + _globals['_DELETETESTREPORTREQUEST'].fields_by_name['test_report_id']._serialized_options = b'\340A\002' + _globals['_CREATETESTSTEPREQUEST'].fields_by_name['test_step']._loaded_options = None + _globals['_CREATETESTSTEPREQUEST'].fields_by_name['test_step']._serialized_options = b'\340A\002' + _globals['_LISTTESTSTEPSREQUEST'].fields_by_name['page_size']._loaded_options = None + _globals['_LISTTESTSTEPSREQUEST'].fields_by_name['page_size']._serialized_options = b'\340A\001' + _globals['_LISTTESTSTEPSREQUEST'].fields_by_name['page_token']._loaded_options = None + _globals['_LISTTESTSTEPSREQUEST'].fields_by_name['page_token']._serialized_options = b'\340A\001' + _globals['_LISTTESTSTEPSREQUEST'].fields_by_name['filter']._loaded_options = None + _globals['_LISTTESTSTEPSREQUEST'].fields_by_name['filter']._serialized_options = b'\340A\001' + _globals['_LISTTESTSTEPSREQUEST'].fields_by_name['order_by']._loaded_options = None + _globals['_LISTTESTSTEPSREQUEST'].fields_by_name['order_by']._serialized_options = b'\340A\001' + _globals['_UPDATETESTSTEPREQUEST'].fields_by_name['test_step']._loaded_options = None + _globals['_UPDATETESTSTEPREQUEST'].fields_by_name['test_step']._serialized_options = b'\340A\002' + _globals['_UPDATETESTSTEPREQUEST'].fields_by_name['update_mask']._loaded_options = None + _globals['_UPDATETESTSTEPREQUEST'].fields_by_name['update_mask']._serialized_options = b'\340A\001' + _globals['_DELETETESTSTEPREQUEST'].fields_by_name['test_step_id']._loaded_options = None + _globals['_DELETETESTSTEPREQUEST'].fields_by_name['test_step_id']._serialized_options = b'\340A\002' + _globals['_CREATETESTMEASUREMENTREQUEST'].fields_by_name['test_measurement']._loaded_options = None + _globals['_CREATETESTMEASUREMENTREQUEST'].fields_by_name['test_measurement']._serialized_options = b'\340A\002' + _globals['_CREATETESTMEASUREMENTSREQUEST'].fields_by_name['test_measurements']._loaded_options = None + _globals['_CREATETESTMEASUREMENTSREQUEST'].fields_by_name['test_measurements']._serialized_options = b'\340A\002' + _globals['_CREATETESTMEASUREMENTSRESPONSE'].fields_by_name['measurements_created_count']._loaded_options = None + _globals['_CREATETESTMEASUREMENTSRESPONSE'].fields_by_name['measurements_created_count']._serialized_options = b'\340A\002' + _globals['_CREATETESTMEASUREMENTSRESPONSE'].fields_by_name['measurement_ids']._loaded_options = None + _globals['_CREATETESTMEASUREMENTSRESPONSE'].fields_by_name['measurement_ids']._serialized_options = b'\340A\002' + _globals['_LISTTESTMEASUREMENTSREQUEST'].fields_by_name['page_size']._loaded_options = None + _globals['_LISTTESTMEASUREMENTSREQUEST'].fields_by_name['page_size']._serialized_options = b'\340A\001' + _globals['_LISTTESTMEASUREMENTSREQUEST'].fields_by_name['page_token']._loaded_options = None + _globals['_LISTTESTMEASUREMENTSREQUEST'].fields_by_name['page_token']._serialized_options = b'\340A\001' + _globals['_LISTTESTMEASUREMENTSREQUEST'].fields_by_name['filter']._loaded_options = None + _globals['_LISTTESTMEASUREMENTSREQUEST'].fields_by_name['filter']._serialized_options = b'\340A\001' + _globals['_LISTTESTMEASUREMENTSREQUEST'].fields_by_name['order_by']._loaded_options = None + _globals['_LISTTESTMEASUREMENTSREQUEST'].fields_by_name['order_by']._serialized_options = b'\340A\001' + _globals['_COUNTTESTSTEPSREQUEST'].fields_by_name['filter']._loaded_options = None + _globals['_COUNTTESTSTEPSREQUEST'].fields_by_name['filter']._serialized_options = b'\340A\001' + _globals['_COUNTTESTMEASUREMENTSREQUEST'].fields_by_name['filter']._loaded_options = None + _globals['_COUNTTESTMEASUREMENTSREQUEST'].fields_by_name['filter']._serialized_options = b'\340A\001' + _globals['_UPDATETESTMEASUREMENTREQUEST'].fields_by_name['test_measurement']._loaded_options = None + _globals['_UPDATETESTMEASUREMENTREQUEST'].fields_by_name['test_measurement']._serialized_options = b'\340A\002' + _globals['_UPDATETESTMEASUREMENTREQUEST'].fields_by_name['update_mask']._loaded_options = None + _globals['_UPDATETESTMEASUREMENTREQUEST'].fields_by_name['update_mask']._serialized_options = b'\340A\001' + _globals['_DELETETESTMEASUREMENTREQUEST'].fields_by_name['measurement_id']._loaded_options = None + _globals['_DELETETESTMEASUREMENTREQUEST'].fields_by_name['measurement_id']._serialized_options = b'\340A\002' + _globals['_TESTREPORTSERVICE']._loaded_options = None + _globals['_TESTREPORTSERVICE']._serialized_options = b'\222A \022\036Service to manage test reports' + _globals['_TESTREPORTSERVICE'].methods_by_name['ImportTestReport']._loaded_options = None + _globals['_TESTREPORTSERVICE'].methods_by_name['ImportTestReport']._serialized_options = b'\222AH\022\020ImportTestReport\0324Imports a test report from an already-uploaded file.\202\323\344\223\002 \"\033/api/v1/test-reports:import:\001*' + _globals['_TESTREPORTSERVICE'].methods_by_name['CreateTestReport']._loaded_options = None + _globals['_TESTREPORTSERVICE'].methods_by_name['CreateTestReport']._serialized_options = b'\222A)\022\020CreateTestReport\032\025Creates a test report\202\323\344\223\002\031\"\024/api/v1/test-reports:\001*' + _globals['_TESTREPORTSERVICE'].methods_by_name['GetTestReport']._loaded_options = None + _globals['_TESTREPORTSERVICE'].methods_by_name['GetTestReport']._serialized_options = b'\222A*\022\rGetTestReport\032\031Gets a single test report\202\323\344\223\002\'\022%/api/v1/test-reports/{test_report_id}' + _globals['_TESTREPORTSERVICE'].methods_by_name['ListTestReports']._loaded_options = None + _globals['_TESTREPORTSERVICE'].methods_by_name['ListTestReports']._serialized_options = b'\222A=\022\017ListTestReports\032*Lists test reports with optional filtering\202\323\344\223\002\026\022\024/api/v1/test-reports' + _globals['_TESTREPORTSERVICE'].methods_by_name['UpdateTestReport']._loaded_options = None + _globals['_TESTREPORTSERVICE'].methods_by_name['UpdateTestReport']._serialized_options = b'\222A)\022\020UpdateTestReport\032\025Updates a test report\202\323\344\223\002\0312\024/api/v1/test-reports:\001*' + _globals['_TESTREPORTSERVICE'].methods_by_name['DeleteTestReport']._loaded_options = None + _globals['_TESTREPORTSERVICE'].methods_by_name['DeleteTestReport']._serialized_options = b'\222A)\022\020DeleteTestReport\032\025Deletes a test report\202\323\344\223\002\'*%/api/v1/test-reports/{test_report_id}' + _globals['_TESTREPORTSERVICE'].methods_by_name['CreateTestStep']._loaded_options = None + _globals['_TESTREPORTSERVICE'].methods_by_name['CreateTestStep']._serialized_options = b'\222A%\022\016CreateTestStep\032\023Creates a test step\202\323\344\223\002\027\"\022/api/v1/test-steps:\001*' + _globals['_TESTREPORTSERVICE'].methods_by_name['ListTestSteps']._loaded_options = None + _globals['_TESTREPORTSERVICE'].methods_by_name['ListTestSteps']._serialized_options = b'\222A9\022\rListTestSteps\032(Lists test steps with optional filtering\202\323\344\223\002\024\022\022/api/v1/test-steps' + _globals['_TESTREPORTSERVICE'].methods_by_name['UpdateTestStep']._loaded_options = None + _globals['_TESTREPORTSERVICE'].methods_by_name['UpdateTestStep']._serialized_options = b'\222A%\022\016UpdateTestStep\032\023Updates a test step\202\323\344\223\002\0272\022/api/v1/test-steps:\001*' + _globals['_TESTREPORTSERVICE'].methods_by_name['DeleteTestStep']._loaded_options = None + _globals['_TESTREPORTSERVICE'].methods_by_name['DeleteTestStep']._serialized_options = b'\222A%\022\016DeleteTestStep\032\023Deletes a test step\202\323\344\223\002#*!/api/v1/test-steps/{test_step_id}' + _globals['_TESTREPORTSERVICE'].methods_by_name['CreateTestMeasurement']._loaded_options = None + _globals['_TESTREPORTSERVICE'].methods_by_name['CreateTestMeasurement']._serialized_options = b'\222A3\022\025CreateTestMeasurement\032\032Creates a test measurement\202\323\344\223\002\036\"\031/api/v1/test-measurements:\001*' + _globals['_TESTREPORTSERVICE'].methods_by_name['CreateTestMeasurements']._loaded_options = None + _globals['_TESTREPORTSERVICE'].methods_by_name['CreateTestMeasurements']._serialized_options = b'\222AP\022\026CreateTestMeasurements\0326Creates multiple test measurements in a single request\202\323\344\223\002$\"\037/api/v1/test-measurements:batch:\001*' + _globals['_TESTREPORTSERVICE'].methods_by_name['ListTestMeasurements']._loaded_options = None + _globals['_TESTREPORTSERVICE'].methods_by_name['ListTestMeasurements']._serialized_options = b'\222AG\022\024ListTestMeasurements\032/Lists test measurements with optional filtering\202\323\344\223\002\033\022\031/api/v1/test-measurements' + _globals['_TESTREPORTSERVICE'].methods_by_name['CountTestSteps']._loaded_options = None + _globals['_TESTREPORTSERVICE'].methods_by_name['CountTestSteps']._serialized_options = b'\222A;\022\016CountTestSteps\032)Counts test steps with optional filtering\202\323\344\223\002\032\022\030/api/v1/test-steps/count' + _globals['_TESTREPORTSERVICE'].methods_by_name['CountTestMeasurements']._loaded_options = None + _globals['_TESTREPORTSERVICE'].methods_by_name['CountTestMeasurements']._serialized_options = b'\222AI\022\025CountTestMeasurements\0320Counts test measurements with optional filtering\202\323\344\223\002!\022\037/api/v1/test-measurements/count' + _globals['_TESTREPORTSERVICE'].methods_by_name['UpdateTestMeasurement']._loaded_options = None + _globals['_TESTREPORTSERVICE'].methods_by_name['UpdateTestMeasurement']._serialized_options = b'\222A3\022\025UpdateTestMeasurement\032\032Updates a test measurement\202\323\344\223\002\0362\031/api/v1/test-measurements:\001*' + _globals['_TESTREPORTSERVICE'].methods_by_name['DeleteTestMeasurement']._loaded_options = None + _globals['_TESTREPORTSERVICE'].methods_by_name['DeleteTestMeasurement']._serialized_options = b'\222A3\022\025DeleteTestMeasurement\032\032Deletes a test measurement\202\323\344\223\002,**/api/v1/test-measurements/{measurement_id}' + _globals['_TESTSTATUS']._serialized_start=6276 + _globals['_TESTSTATUS']._serialized_end=6490 + _globals['_TESTSTEPTYPE']._serialized_start=6493 + _globals['_TESTSTEPTYPE']._serialized_end=6654 + _globals['_TESTMEASUREMENTTYPE']._serialized_start=6657 + _globals['_TESTMEASUREMENTTYPE']._serialized_end=6853 + _globals['_TESTREPORT']._serialized_start=302 + _globals['_TESTREPORT']._serialized_end=950 + _globals['_TESTSTEP']._serialized_start=953 + _globals['_TESTSTEP']._serialized_end=1512 + _globals['_ERRORINFO']._serialized_start=1514 + _globals['_ERRORINFO']._serialized_end=1603 + _globals['_TESTMEASUREMENT']._serialized_start=1606 + _globals['_TESTMEASUREMENT']._serialized_end=2289 + _globals['_NUMERICBOUNDS']._serialized_start=2291 + _globals['_NUMERICBOUNDS']._serialized_end=2378 + _globals['_STRINGBOUNDS']._serialized_start=2380 + _globals['_STRINGBOUNDS']._serialized_end=2438 + _globals['_IMPORTTESTREPORTREQUEST']._serialized_start=2440 + _globals['_IMPORTTESTREPORTREQUEST']._serialized_end=2508 + _globals['_IMPORTTESTREPORTRESPONSE']._serialized_start=2510 + _globals['_IMPORTTESTREPORTRESPONSE']._serialized_end=2603 + _globals['_CREATETESTREPORTREQUEST']._serialized_start=2606 + _globals['_CREATETESTREPORTREQUEST']._serialized_end=3116 + _globals['_CREATETESTREPORTRESPONSE']._serialized_start=3118 + _globals['_CREATETESTREPORTRESPONSE']._serialized_end=3211 + _globals['_GETTESTREPORTREQUEST']._serialized_start=3213 + _globals['_GETTESTREPORTREQUEST']._serialized_end=3278 + _globals['_GETTESTREPORTRESPONSE']._serialized_start=3280 + _globals['_GETTESTREPORTRESPONSE']._serialized_end=3370 + _globals['_LISTTESTREPORTSREQUEST']._serialized_start=3373 + _globals['_LISTTESTREPORTSREQUEST']._serialized_end=3528 + _globals['_LISTTESTREPORTSRESPONSE']._serialized_start=3531 + _globals['_LISTTESTREPORTSRESPONSE']._serialized_end=3665 + _globals['_UPDATETESTREPORTREQUEST']._serialized_start=3668 + _globals['_UPDATETESTREPORTREQUEST']._serialized_end=3831 + _globals['_UPDATETESTREPORTRESPONSE']._serialized_start=3833 + _globals['_UPDATETESTREPORTRESPONSE']._serialized_end=3926 + _globals['_DELETETESTREPORTREQUEST']._serialized_start=3928 + _globals['_DELETETESTREPORTREQUEST']._serialized_end=3996 + _globals['_DELETETESTREPORTRESPONSE']._serialized_start=3998 + _globals['_DELETETESTREPORTRESPONSE']._serialized_end=4024 + _globals['_CREATETESTSTEPREQUEST']._serialized_start=4026 + _globals['_CREATETESTSTEPREQUEST']._serialized_end=4115 + _globals['_CREATETESTSTEPRESPONSE']._serialized_start=4117 + _globals['_CREATETESTSTEPRESPONSE']._serialized_end=4202 + _globals['_LISTTESTSTEPSREQUEST']._serialized_start=4205 + _globals['_LISTTESTSTEPSREQUEST']._serialized_end=4358 + _globals['_LISTTESTSTEPSRESPONSE']._serialized_start=4360 + _globals['_LISTTESTSTEPSRESPONSE']._serialized_end=4486 + _globals['_UPDATETESTSTEPREQUEST']._serialized_start=4489 + _globals['_UPDATETESTSTEPREQUEST']._serialized_end=4644 + _globals['_UPDATETESTSTEPRESPONSE']._serialized_start=4646 + _globals['_UPDATETESTSTEPRESPONSE']._serialized_end=4731 + _globals['_DELETETESTSTEPREQUEST']._serialized_start=4733 + _globals['_DELETETESTSTEPREQUEST']._serialized_end=4795 + _globals['_DELETETESTSTEPRESPONSE']._serialized_start=4797 + _globals['_DELETETESTSTEPRESPONSE']._serialized_end=4821 + _globals['_CREATETESTMEASUREMENTREQUEST']._serialized_start=4823 + _globals['_CREATETESTMEASUREMENTREQUEST']._serialized_end=4940 + _globals['_CREATETESTMEASUREMENTRESPONSE']._serialized_start=4942 + _globals['_CREATETESTMEASUREMENTRESPONSE']._serialized_end=5055 + _globals['_CREATETESTMEASUREMENTSREQUEST']._serialized_start=5057 + _globals['_CREATETESTMEASUREMENTSREQUEST']._serialized_end=5177 + _globals['_CREATETESTMEASUREMENTSRESPONSE']._serialized_start=5180 + _globals['_CREATETESTMEASUREMENTSRESPONSE']._serialized_end=5325 + _globals['_LISTTESTMEASUREMENTSREQUEST']._serialized_start=5328 + _globals['_LISTTESTMEASUREMENTSREQUEST']._serialized_end=5488 + _globals['_LISTTESTMEASUREMENTSRESPONSE']._serialized_start=5491 + _globals['_LISTTESTMEASUREMENTSRESPONSE']._serialized_end=5645 + _globals['_COUNTTESTSTEPSREQUEST']._serialized_start=5647 + _globals['_COUNTTESTSTEPSREQUEST']._serialized_end=5699 + _globals['_COUNTTESTSTEPSRESPONSE']._serialized_start=5701 + _globals['_COUNTTESTSTEPSRESPONSE']._serialized_end=5747 + _globals['_COUNTTESTMEASUREMENTSREQUEST']._serialized_start=5749 + _globals['_COUNTTESTMEASUREMENTSREQUEST']._serialized_end=5808 + _globals['_COUNTTESTMEASUREMENTSRESPONSE']._serialized_start=5810 + _globals['_COUNTTESTMEASUREMENTSRESPONSE']._serialized_end=5863 + _globals['_UPDATETESTMEASUREMENTREQUEST']._serialized_start=5866 + _globals['_UPDATETESTMEASUREMENTREQUEST']._serialized_end=6049 + _globals['_UPDATETESTMEASUREMENTRESPONSE']._serialized_start=6051 + _globals['_UPDATETESTMEASUREMENTRESPONSE']._serialized_end=6164 + _globals['_DELETETESTMEASUREMENTREQUEST']._serialized_start=6166 + _globals['_DELETETESTMEASUREMENTREQUEST']._serialized_end=6240 + _globals['_DELETETESTMEASUREMENTRESPONSE']._serialized_start=6242 + _globals['_DELETETESTMEASUREMENTRESPONSE']._serialized_end=6273 + _globals['_TESTREPORTSERVICE']._serialized_start=6856 + _globals['_TESTREPORTSERVICE']._serialized_end=10527 +# @@protoc_insertion_point(module_scope) diff --git a/python/lib/sift/test_reports/v1/test_reports_pb2.pyi b/python/lib/sift/test_reports/v1/test_reports_pb2.pyi new file mode 100644 index 000000000..968729bb6 --- /dev/null +++ b/python/lib/sift/test_reports/v1/test_reports_pb2.pyi @@ -0,0 +1,1199 @@ +""" +@generated by mypy-protobuf. Do not edit manually! +isort:skip_file +""" + +import builtins +import collections.abc +import google.protobuf.descriptor +import google.protobuf.field_mask_pb2 +import google.protobuf.internal.containers +import google.protobuf.internal.enum_type_wrapper +import google.protobuf.message +import google.protobuf.timestamp_pb2 +import sift.metadata.v1.metadata_pb2 +import sift.unit.v2.unit_pb2 +import sys +import typing + +if sys.version_info >= (3, 10): + import typing as typing_extensions +else: + import typing_extensions + +DESCRIPTOR: google.protobuf.descriptor.FileDescriptor + +class _TestStatus: + ValueType = typing.NewType("ValueType", builtins.int) + V: typing_extensions.TypeAlias = ValueType + +class _TestStatusEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_TestStatus.ValueType], builtins.type): + DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor + TEST_STATUS_UNSPECIFIED: _TestStatus.ValueType # 0 + TEST_STATUS_DRAFT: _TestStatus.ValueType # 1 + """Barebones test report created, waiting for file processing""" + TEST_STATUS_PASSED: _TestStatus.ValueType # 2 + TEST_STATUS_FAILED: _TestStatus.ValueType # 3 + TEST_STATUS_ABORTED: _TestStatus.ValueType # 4 + TEST_STATUS_ERROR: _TestStatus.ValueType # 5 + TEST_STATUS_IN_PROGRESS: _TestStatus.ValueType # 6 + TEST_STATUS_SKIPPED: _TestStatus.ValueType # 7 + +class TestStatus(_TestStatus, metaclass=_TestStatusEnumTypeWrapper): ... + +TEST_STATUS_UNSPECIFIED: TestStatus.ValueType # 0 +TEST_STATUS_DRAFT: TestStatus.ValueType # 1 +"""Barebones test report created, waiting for file processing""" +TEST_STATUS_PASSED: TestStatus.ValueType # 2 +TEST_STATUS_FAILED: TestStatus.ValueType # 3 +TEST_STATUS_ABORTED: TestStatus.ValueType # 4 +TEST_STATUS_ERROR: TestStatus.ValueType # 5 +TEST_STATUS_IN_PROGRESS: TestStatus.ValueType # 6 +TEST_STATUS_SKIPPED: TestStatus.ValueType # 7 +global___TestStatus = TestStatus + +class _TestStepType: + ValueType = typing.NewType("ValueType", builtins.int) + V: typing_extensions.TypeAlias = ValueType + +class _TestStepTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_TestStepType.ValueType], builtins.type): + DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor + TEST_STEP_TYPE_UNSPECIFIED: _TestStepType.ValueType # 0 + TEST_STEP_TYPE_SEQUENCE: _TestStepType.ValueType # 1 + """ResultSet/MainSequence - top-level test sequence""" + TEST_STEP_TYPE_GROUP: _TestStepType.ValueType # 2 + """TestGroup - logical grouping of test steps""" + TEST_STEP_TYPE_ACTION: _TestStepType.ValueType # 3 + """SessionAction - individual executable action""" + TEST_STEP_TYPE_FLOW_CONTROL: _TestStepType.ValueType # 4 + """Flow control elements (While, If, etc.)""" + +class TestStepType(_TestStepType, metaclass=_TestStepTypeEnumTypeWrapper): ... + +TEST_STEP_TYPE_UNSPECIFIED: TestStepType.ValueType # 0 +TEST_STEP_TYPE_SEQUENCE: TestStepType.ValueType # 1 +"""ResultSet/MainSequence - top-level test sequence""" +TEST_STEP_TYPE_GROUP: TestStepType.ValueType # 2 +"""TestGroup - logical grouping of test steps""" +TEST_STEP_TYPE_ACTION: TestStepType.ValueType # 3 +"""SessionAction - individual executable action""" +TEST_STEP_TYPE_FLOW_CONTROL: TestStepType.ValueType # 4 +"""Flow control elements (While, If, etc.)""" +global___TestStepType = TestStepType + +class _TestMeasurementType: + ValueType = typing.NewType("ValueType", builtins.int) + V: typing_extensions.TypeAlias = ValueType + +class _TestMeasurementTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_TestMeasurementType.ValueType], builtins.type): + DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor + TEST_MEASUREMENT_TYPE_UNSPECIFIED: _TestMeasurementType.ValueType # 0 + TEST_MEASUREMENT_TYPE_DOUBLE: _TestMeasurementType.ValueType # 1 + TEST_MEASUREMENT_TYPE_STRING: _TestMeasurementType.ValueType # 3 + TEST_MEASUREMENT_TYPE_BOOLEAN: _TestMeasurementType.ValueType # 4 + TEST_MEASUREMENT_TYPE_LIMIT: _TestMeasurementType.ValueType # 5 + +class TestMeasurementType(_TestMeasurementType, metaclass=_TestMeasurementTypeEnumTypeWrapper): ... + +TEST_MEASUREMENT_TYPE_UNSPECIFIED: TestMeasurementType.ValueType # 0 +TEST_MEASUREMENT_TYPE_DOUBLE: TestMeasurementType.ValueType # 1 +TEST_MEASUREMENT_TYPE_STRING: TestMeasurementType.ValueType # 3 +TEST_MEASUREMENT_TYPE_BOOLEAN: TestMeasurementType.ValueType # 4 +TEST_MEASUREMENT_TYPE_LIMIT: TestMeasurementType.ValueType # 5 +global___TestMeasurementType = TestMeasurementType + +@typing.final +class TestReport(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + TEST_REPORT_ID_FIELD_NUMBER: builtins.int + STATUS_FIELD_NUMBER: builtins.int + NAME_FIELD_NUMBER: builtins.int + TEST_SYSTEM_NAME_FIELD_NUMBER: builtins.int + TEST_CASE_FIELD_NUMBER: builtins.int + START_TIME_FIELD_NUMBER: builtins.int + END_TIME_FIELD_NUMBER: builtins.int + METADATA_FIELD_NUMBER: builtins.int + SERIAL_NUMBER_FIELD_NUMBER: builtins.int + PART_NUMBER_FIELD_NUMBER: builtins.int + SYSTEM_OPERATOR_FIELD_NUMBER: builtins.int + ARCHIVED_DATE_FIELD_NUMBER: builtins.int + IS_ARCHIVED_FIELD_NUMBER: builtins.int + test_report_id: builtins.str + """Unique identifier for the run""" + status: global___TestStatus.ValueType + """The status of the test run""" + name: builtins.str + """The name of the test run""" + test_system_name: builtins.str + """The name of the test system""" + test_case: builtins.str + """The test case that was run""" + serial_number: builtins.str + """The serial number for the DUT""" + part_number: builtins.str + """The part number for the DUT""" + system_operator: builtins.str + """Unique identifier for user owner""" + is_archived: builtins.bool + """Whether the test run is archived (externally exposed)""" + @property + def start_time(self) -> google.protobuf.timestamp_pb2.Timestamp: + """The start time of the test run""" + + @property + def end_time(self) -> google.protobuf.timestamp_pb2.Timestamp: + """The end time of the test run""" + + @property + def metadata(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[sift.metadata.v1.metadata_pb2.MetadataValue]: + """The metadata values associated with this test run""" + + @property + def archived_date(self) -> google.protobuf.timestamp_pb2.Timestamp: + """The date and time the test run was archived (internal)""" + + def __init__( + self, + *, + test_report_id: builtins.str = ..., + status: global___TestStatus.ValueType = ..., + name: builtins.str = ..., + test_system_name: builtins.str = ..., + test_case: builtins.str = ..., + start_time: google.protobuf.timestamp_pb2.Timestamp | None = ..., + end_time: google.protobuf.timestamp_pb2.Timestamp | None = ..., + metadata: collections.abc.Iterable[sift.metadata.v1.metadata_pb2.MetadataValue] | None = ..., + serial_number: builtins.str = ..., + part_number: builtins.str = ..., + system_operator: builtins.str = ..., + archived_date: google.protobuf.timestamp_pb2.Timestamp | None = ..., + is_archived: builtins.bool = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["archived_date", b"archived_date", "end_time", b"end_time", "start_time", b"start_time"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["archived_date", b"archived_date", "end_time", b"end_time", "is_archived", b"is_archived", "metadata", b"metadata", "name", b"name", "part_number", b"part_number", "serial_number", b"serial_number", "start_time", b"start_time", "status", b"status", "system_operator", b"system_operator", "test_case", b"test_case", "test_report_id", b"test_report_id", "test_system_name", b"test_system_name"]) -> None: ... + +global___TestReport = TestReport + +@typing.final +class TestStep(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + TEST_STEP_ID_FIELD_NUMBER: builtins.int + TEST_REPORT_ID_FIELD_NUMBER: builtins.int + PARENT_STEP_ID_FIELD_NUMBER: builtins.int + NAME_FIELD_NUMBER: builtins.int + DESCRIPTION_FIELD_NUMBER: builtins.int + STEP_TYPE_FIELD_NUMBER: builtins.int + STEP_PATH_FIELD_NUMBER: builtins.int + STATUS_FIELD_NUMBER: builtins.int + START_TIME_FIELD_NUMBER: builtins.int + END_TIME_FIELD_NUMBER: builtins.int + ERROR_INFO_FIELD_NUMBER: builtins.int + test_step_id: builtins.str + """unique identifier for the step""" + test_report_id: builtins.str + """pointer to overall test run""" + parent_step_id: builtins.str + """pointer to parent step, if any""" + name: builtins.str + """Name of the test step for display""" + description: builtins.str + """Description of the test step from test controller""" + step_type: global___TestStepType.ValueType + """Semantic type of the test step""" + step_path: builtins.str + """Hierarchical path (e.g., "1", "1.1", "1.2.3")""" + status: global___TestStatus.ValueType + """Status of the test step""" + @property + def start_time(self) -> google.protobuf.timestamp_pb2.Timestamp: + """Start time of the test step""" + + @property + def end_time(self) -> google.protobuf.timestamp_pb2.Timestamp: + """End time of the test step""" + + @property + def error_info(self) -> global___ErrorInfo: + """Error information of the test step""" + + def __init__( + self, + *, + test_step_id: builtins.str = ..., + test_report_id: builtins.str = ..., + parent_step_id: builtins.str = ..., + name: builtins.str = ..., + description: builtins.str = ..., + step_type: global___TestStepType.ValueType = ..., + step_path: builtins.str = ..., + status: global___TestStatus.ValueType = ..., + start_time: google.protobuf.timestamp_pb2.Timestamp | None = ..., + end_time: google.protobuf.timestamp_pb2.Timestamp | None = ..., + error_info: global___ErrorInfo | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["end_time", b"end_time", "error_info", b"error_info", "start_time", b"start_time"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["description", b"description", "end_time", b"end_time", "error_info", b"error_info", "name", b"name", "parent_step_id", b"parent_step_id", "start_time", b"start_time", "status", b"status", "step_path", b"step_path", "step_type", b"step_type", "test_report_id", b"test_report_id", "test_step_id", b"test_step_id"]) -> None: ... + +global___TestStep = TestStep + +@typing.final +class ErrorInfo(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + ERROR_CODE_FIELD_NUMBER: builtins.int + ERROR_MESSAGE_FIELD_NUMBER: builtins.int + error_code: builtins.int + error_message: builtins.str + def __init__( + self, + *, + error_code: builtins.int = ..., + error_message: builtins.str = ..., + ) -> None: ... + def ClearField(self, field_name: typing.Literal["error_code", b"error_code", "error_message", b"error_message"]) -> None: ... + +global___ErrorInfo = ErrorInfo + +@typing.final +class TestMeasurement(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + MEASUREMENT_ID_FIELD_NUMBER: builtins.int + MEASUREMENT_TYPE_FIELD_NUMBER: builtins.int + NAME_FIELD_NUMBER: builtins.int + TEST_STEP_ID_FIELD_NUMBER: builtins.int + TEST_REPORT_ID_FIELD_NUMBER: builtins.int + NUMERIC_VALUE_FIELD_NUMBER: builtins.int + STRING_VALUE_FIELD_NUMBER: builtins.int + BOOLEAN_VALUE_FIELD_NUMBER: builtins.int + UNIT_FIELD_NUMBER: builtins.int + NUMERIC_BOUNDS_FIELD_NUMBER: builtins.int + STRING_BOUNDS_FIELD_NUMBER: builtins.int + PASSED_FIELD_NUMBER: builtins.int + TIMESTAMP_FIELD_NUMBER: builtins.int + measurement_id: builtins.str + measurement_type: global___TestMeasurementType.ValueType + name: builtins.str + test_step_id: builtins.str + test_report_id: builtins.str + numeric_value: builtins.float + string_value: builtins.str + boolean_value: builtins.bool + passed: builtins.bool + @property + def unit(self) -> sift.unit.v2.unit_pb2.Unit: ... + @property + def numeric_bounds(self) -> global___NumericBounds: ... + @property + def string_bounds(self) -> global___StringBounds: ... + @property + def timestamp(self) -> google.protobuf.timestamp_pb2.Timestamp: ... + def __init__( + self, + *, + measurement_id: builtins.str = ..., + measurement_type: global___TestMeasurementType.ValueType = ..., + name: builtins.str = ..., + test_step_id: builtins.str = ..., + test_report_id: builtins.str = ..., + numeric_value: builtins.float = ..., + string_value: builtins.str = ..., + boolean_value: builtins.bool = ..., + unit: sift.unit.v2.unit_pb2.Unit | None = ..., + numeric_bounds: global___NumericBounds | None = ..., + string_bounds: global___StringBounds | None = ..., + passed: builtins.bool = ..., + timestamp: google.protobuf.timestamp_pb2.Timestamp | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["boolean_value", b"boolean_value", "bounds", b"bounds", "numeric_bounds", b"numeric_bounds", "numeric_value", b"numeric_value", "string_bounds", b"string_bounds", "string_value", b"string_value", "timestamp", b"timestamp", "unit", b"unit", "value", b"value"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["boolean_value", b"boolean_value", "bounds", b"bounds", "measurement_id", b"measurement_id", "measurement_type", b"measurement_type", "name", b"name", "numeric_bounds", b"numeric_bounds", "numeric_value", b"numeric_value", "passed", b"passed", "string_bounds", b"string_bounds", "string_value", b"string_value", "test_report_id", b"test_report_id", "test_step_id", b"test_step_id", "timestamp", b"timestamp", "unit", b"unit", "value", b"value"]) -> None: ... + @typing.overload + def WhichOneof(self, oneof_group: typing.Literal["bounds", b"bounds"]) -> typing.Literal["numeric_bounds", "string_bounds"] | None: ... + @typing.overload + def WhichOneof(self, oneof_group: typing.Literal["value", b"value"]) -> typing.Literal["numeric_value", "string_value", "boolean_value"] | None: ... + +global___TestMeasurement = TestMeasurement + +@typing.final +class NumericBounds(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + MIN_FIELD_NUMBER: builtins.int + MAX_FIELD_NUMBER: builtins.int + min: builtins.float + max: builtins.float + def __init__( + self, + *, + min: builtins.float | None = ..., + max: builtins.float | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["_max", b"_max", "_min", b"_min", "max", b"max", "min", b"min"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["_max", b"_max", "_min", b"_min", "max", b"max", "min", b"min"]) -> None: ... + @typing.overload + def WhichOneof(self, oneof_group: typing.Literal["_max", b"_max"]) -> typing.Literal["max"] | None: ... + @typing.overload + def WhichOneof(self, oneof_group: typing.Literal["_min", b"_min"]) -> typing.Literal["min"] | None: ... + +global___NumericBounds = NumericBounds + +@typing.final +class StringBounds(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + EXPECTED_VALUE_FIELD_NUMBER: builtins.int + expected_value: builtins.str + def __init__( + self, + *, + expected_value: builtins.str = ..., + ) -> None: ... + def ClearField(self, field_name: typing.Literal["expected_value", b"expected_value"]) -> None: ... + +global___StringBounds = StringBounds + +@typing.final +class ImportTestReportRequest(google.protobuf.message.Message): + """Request message for ImportTestReport""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + REMOTE_FILE_ID_FIELD_NUMBER: builtins.int + remote_file_id: builtins.str + """The remote file ID containing the XML test data""" + def __init__( + self, + *, + remote_file_id: builtins.str = ..., + ) -> None: ... + def ClearField(self, field_name: typing.Literal["remote_file_id", b"remote_file_id"]) -> None: ... + +global___ImportTestReportRequest = ImportTestReportRequest + +@typing.final +class ImportTestReportResponse(google.protobuf.message.Message): + """Response message for ImportTestReport""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + TEST_REPORT_FIELD_NUMBER: builtins.int + @property + def test_report(self) -> global___TestReport: + """The imported test report""" + + def __init__( + self, + *, + test_report: global___TestReport | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["test_report", b"test_report"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["test_report", b"test_report"]) -> None: ... + +global___ImportTestReportResponse = ImportTestReportResponse + +@typing.final +class CreateTestReportRequest(google.protobuf.message.Message): + """Request message for CreateTestReport""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + STATUS_FIELD_NUMBER: builtins.int + NAME_FIELD_NUMBER: builtins.int + TEST_SYSTEM_NAME_FIELD_NUMBER: builtins.int + TEST_CASE_FIELD_NUMBER: builtins.int + START_TIME_FIELD_NUMBER: builtins.int + END_TIME_FIELD_NUMBER: builtins.int + METADATA_FIELD_NUMBER: builtins.int + SERIAL_NUMBER_FIELD_NUMBER: builtins.int + PART_NUMBER_FIELD_NUMBER: builtins.int + SYSTEM_OPERATOR_FIELD_NUMBER: builtins.int + status: global___TestStatus.ValueType + """The status of the test run""" + name: builtins.str + """The name of the test run""" + test_system_name: builtins.str + """The name of the test system""" + test_case: builtins.str + """The test case that was run""" + serial_number: builtins.str + """The serial number for the DUT""" + part_number: builtins.str + """The part number for the DUT""" + system_operator: builtins.str + """Unique identifier for user owner""" + @property + def start_time(self) -> google.protobuf.timestamp_pb2.Timestamp: + """The start time of the test run""" + + @property + def end_time(self) -> google.protobuf.timestamp_pb2.Timestamp: + """The end time of the test run""" + + @property + def metadata(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[sift.metadata.v1.metadata_pb2.MetadataValue]: + """The metadata values associated with this test run""" + + def __init__( + self, + *, + status: global___TestStatus.ValueType = ..., + name: builtins.str = ..., + test_system_name: builtins.str = ..., + test_case: builtins.str = ..., + start_time: google.protobuf.timestamp_pb2.Timestamp | None = ..., + end_time: google.protobuf.timestamp_pb2.Timestamp | None = ..., + metadata: collections.abc.Iterable[sift.metadata.v1.metadata_pb2.MetadataValue] | None = ..., + serial_number: builtins.str = ..., + part_number: builtins.str = ..., + system_operator: builtins.str = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["end_time", b"end_time", "start_time", b"start_time"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["end_time", b"end_time", "metadata", b"metadata", "name", b"name", "part_number", b"part_number", "serial_number", b"serial_number", "start_time", b"start_time", "status", b"status", "system_operator", b"system_operator", "test_case", b"test_case", "test_system_name", b"test_system_name"]) -> None: ... + +global___CreateTestReportRequest = CreateTestReportRequest + +@typing.final +class CreateTestReportResponse(google.protobuf.message.Message): + """Response message for CreateTestReport""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + TEST_REPORT_FIELD_NUMBER: builtins.int + @property + def test_report(self) -> global___TestReport: + """The created test report""" + + def __init__( + self, + *, + test_report: global___TestReport | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["test_report", b"test_report"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["test_report", b"test_report"]) -> None: ... + +global___CreateTestReportResponse = CreateTestReportResponse + +@typing.final +class GetTestReportRequest(google.protobuf.message.Message): + """Request message for GetTestReport""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + TEST_REPORT_ID_FIELD_NUMBER: builtins.int + test_report_id: builtins.str + """The ID of the test report to get""" + def __init__( + self, + *, + test_report_id: builtins.str = ..., + ) -> None: ... + def ClearField(self, field_name: typing.Literal["test_report_id", b"test_report_id"]) -> None: ... + +global___GetTestReportRequest = GetTestReportRequest + +@typing.final +class GetTestReportResponse(google.protobuf.message.Message): + """Response message for GetTestReport""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + TEST_REPORT_FIELD_NUMBER: builtins.int + @property + def test_report(self) -> global___TestReport: + """The test report""" + + def __init__( + self, + *, + test_report: global___TestReport | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["test_report", b"test_report"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["test_report", b"test_report"]) -> None: ... + +global___GetTestReportResponse = GetTestReportResponse + +@typing.final +class ListTestReportsRequest(google.protobuf.message.Message): + """Request message for ListTestReports""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + PAGE_SIZE_FIELD_NUMBER: builtins.int + PAGE_TOKEN_FIELD_NUMBER: builtins.int + FILTER_FIELD_NUMBER: builtins.int + ORDER_BY_FIELD_NUMBER: builtins.int + page_size: builtins.int + """The maximum number of test reports to return. + The service may return fewer than this value. + If unspecified, at most 50 test reports will be returned. + The maximum value is 1000; values above 1000 will be coerced to 1000. + """ + page_token: builtins.str + """A page token, received from a previous `ListTestReports` call. + Provide this to retrieve the subsequent page. + When paginating, all other parameters provided to `ListTestReports` must match + the call that provided the page token. + """ + filter: builtins.str + """A [Common Expression Language (CEL)](https://github.com/google/cel-spec) filter string. + Available fields to filter by are `test_report_id`, `status`, `name`, `test_system_name`, + `test_case`, `start_time`, `end_time`, `serial_number`, `created_by_user_id`, `modified_by_user_id`, + `part_number`, `system_operator`, `archived_date`, and `metadata`. + Metadata can be used in filters by using `metadata.{metadata_key_name}` as the field name. + For further information about how to use CELs, please refer to [this guide](https://github.com/google/cel-spec/blob/master/doc/langdef.md#standard-definitions). + For more information about the fields used for filtering, please refer to [this definition](/docs/api/grpc/protocol-buffers/test-results#testreport). Optional. + """ + order_by: builtins.str + """How to order the retrieved test reports. Formatted as a comma-separated string i.e. "FIELD_NAME[ desc],...". + Available fields to order_by are `test_report_id`, `name`, `test_system_name`, `test_case`, `start_time`, `end_time`, + `created_date`, and `modified_date`. + If left empty, items are ordered by `start_time` in descending order (newest-first). + For more information about the format of this field, read [this](https://google.aip.dev/132#ordering) + Example: "start_time desc,name" + """ + def __init__( + self, + *, + page_size: builtins.int = ..., + page_token: builtins.str = ..., + filter: builtins.str = ..., + order_by: builtins.str = ..., + ) -> None: ... + def ClearField(self, field_name: typing.Literal["filter", b"filter", "order_by", b"order_by", "page_size", b"page_size", "page_token", b"page_token"]) -> None: ... + +global___ListTestReportsRequest = ListTestReportsRequest + +@typing.final +class ListTestReportsResponse(google.protobuf.message.Message): + """Response message for ListTestReports""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + TEST_REPORTS_FIELD_NUMBER: builtins.int + NEXT_PAGE_TOKEN_FIELD_NUMBER: builtins.int + next_page_token: builtins.str + """The next page token for pagination""" + @property + def test_reports(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___TestReport]: + """The list of test reports""" + + def __init__( + self, + *, + test_reports: collections.abc.Iterable[global___TestReport] | None = ..., + next_page_token: builtins.str = ..., + ) -> None: ... + def ClearField(self, field_name: typing.Literal["next_page_token", b"next_page_token", "test_reports", b"test_reports"]) -> None: ... + +global___ListTestReportsResponse = ListTestReportsResponse + +@typing.final +class UpdateTestReportRequest(google.protobuf.message.Message): + """Request message for UpdateTestReport""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + TEST_REPORT_FIELD_NUMBER: builtins.int + UPDATE_MASK_FIELD_NUMBER: builtins.int + @property + def test_report(self) -> global___TestReport: + """The test report to update""" + + @property + def update_mask(self) -> google.protobuf.field_mask_pb2.FieldMask: + """The field mask specifying which fields to update. The fields available to be updated are + `status`, `name`, `test_system_name`, `test_case`, `start_time`, `end_time`, `serial_number`, + `part_number`, `system_operator`, and `is_archived`. + """ + + def __init__( + self, + *, + test_report: global___TestReport | None = ..., + update_mask: google.protobuf.field_mask_pb2.FieldMask | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["test_report", b"test_report", "update_mask", b"update_mask"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["test_report", b"test_report", "update_mask", b"update_mask"]) -> None: ... + +global___UpdateTestReportRequest = UpdateTestReportRequest + +@typing.final +class UpdateTestReportResponse(google.protobuf.message.Message): + """Response message for UpdateTestReport""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + TEST_REPORT_FIELD_NUMBER: builtins.int + @property + def test_report(self) -> global___TestReport: + """The updated test report""" + + def __init__( + self, + *, + test_report: global___TestReport | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["test_report", b"test_report"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["test_report", b"test_report"]) -> None: ... + +global___UpdateTestReportResponse = UpdateTestReportResponse + +@typing.final +class DeleteTestReportRequest(google.protobuf.message.Message): + """Request message for DeleteTestReport""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + TEST_REPORT_ID_FIELD_NUMBER: builtins.int + test_report_id: builtins.str + """The ID of the test report to delete""" + def __init__( + self, + *, + test_report_id: builtins.str = ..., + ) -> None: ... + def ClearField(self, field_name: typing.Literal["test_report_id", b"test_report_id"]) -> None: ... + +global___DeleteTestReportRequest = DeleteTestReportRequest + +@typing.final +class DeleteTestReportResponse(google.protobuf.message.Message): + """Response message for DeleteTestReport + Empty response indicating successful deletion + """ + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + def __init__( + self, + ) -> None: ... + +global___DeleteTestReportResponse = DeleteTestReportResponse + +@typing.final +class CreateTestStepRequest(google.protobuf.message.Message): + """Request message for CreateTestStep""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + TEST_STEP_FIELD_NUMBER: builtins.int + @property + def test_step(self) -> global___TestStep: + """The test step to create""" + + def __init__( + self, + *, + test_step: global___TestStep | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["test_step", b"test_step"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["test_step", b"test_step"]) -> None: ... + +global___CreateTestStepRequest = CreateTestStepRequest + +@typing.final +class CreateTestStepResponse(google.protobuf.message.Message): + """Response message for CreateTestStep""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + TEST_STEP_FIELD_NUMBER: builtins.int + @property + def test_step(self) -> global___TestStep: + """The created test step""" + + def __init__( + self, + *, + test_step: global___TestStep | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["test_step", b"test_step"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["test_step", b"test_step"]) -> None: ... + +global___CreateTestStepResponse = CreateTestStepResponse + +@typing.final +class ListTestStepsRequest(google.protobuf.message.Message): + """Request message for ListTestSteps""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + PAGE_SIZE_FIELD_NUMBER: builtins.int + PAGE_TOKEN_FIELD_NUMBER: builtins.int + FILTER_FIELD_NUMBER: builtins.int + ORDER_BY_FIELD_NUMBER: builtins.int + page_size: builtins.int + """The maximum number of test steps to return. + The service may return fewer than this value. + If unspecified, at most 50 test steps will be returned. + The maximum value is 1000; values above 1000 will be coerced to 1000. + """ + page_token: builtins.str + """A page token, received from a previous `ListTestSteps` call. + Provide this to retrieve the subsequent page. + When paginating, all other parameters provided to `ListTestSteps` must match + the call that provided the page token. + """ + filter: builtins.str + """A [Common Expression Language (CEL)](https://github.com/google/cel-spec) filter string. + Available fields to filter by are `test_step_id`, `test_report_id`, `parent_step_id`, `name`, + `description`, `step_type`, `step_path`, `status`, `start_time`, `end_time`, + `error_code`, `error_message`, `created_date`, and `modified_date`. + For further information about how to use CELs, please refer to [this guide](https://github.com/google/cel-spec/blob/master/doc/langdef.md#standard-definitions). + For more information about the fields used for filtering, please refer to [this definition](/docs/api/grpc/protocol-buffers/test-results#teststep). Optional. + """ + order_by: builtins.str + """How to order the retrieved test steps. Formatted as a comma-separated string i.e. "FIELD_NAME[ desc],...". + Available fields to order_by are `test_step_id`, `name`, `step_type`, `step_path`, `status`, + `start_time`, `end_time`, `created_date`, and `modified_date`. + If left empty, items are ordered by `step_path` in ascending order. + For more information about the format of this field, read [this](https://google.aip.dev/132#ordering) + Example: "step_path asc,start_time desc" + """ + def __init__( + self, + *, + page_size: builtins.int = ..., + page_token: builtins.str = ..., + filter: builtins.str = ..., + order_by: builtins.str = ..., + ) -> None: ... + def ClearField(self, field_name: typing.Literal["filter", b"filter", "order_by", b"order_by", "page_size", b"page_size", "page_token", b"page_token"]) -> None: ... + +global___ListTestStepsRequest = ListTestStepsRequest + +@typing.final +class ListTestStepsResponse(google.protobuf.message.Message): + """Response message for ListTestSteps""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + TEST_STEPS_FIELD_NUMBER: builtins.int + NEXT_PAGE_TOKEN_FIELD_NUMBER: builtins.int + next_page_token: builtins.str + """The next page token for pagination""" + @property + def test_steps(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___TestStep]: + """The list of test steps""" + + def __init__( + self, + *, + test_steps: collections.abc.Iterable[global___TestStep] | None = ..., + next_page_token: builtins.str = ..., + ) -> None: ... + def ClearField(self, field_name: typing.Literal["next_page_token", b"next_page_token", "test_steps", b"test_steps"]) -> None: ... + +global___ListTestStepsResponse = ListTestStepsResponse + +@typing.final +class UpdateTestStepRequest(google.protobuf.message.Message): + """Request message for UpdateTestStep""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + TEST_STEP_FIELD_NUMBER: builtins.int + UPDATE_MASK_FIELD_NUMBER: builtins.int + @property + def test_step(self) -> global___TestStep: + """The test step to update""" + + @property + def update_mask(self) -> google.protobuf.field_mask_pb2.FieldMask: + """The field mask specifying which fields to update. The fields available to be updated are + `name`, `description`, `step_type`, `step_path`, `test_case`, `status`, + `start_time`, `end_time`, and `error_info`. + """ + + def __init__( + self, + *, + test_step: global___TestStep | None = ..., + update_mask: google.protobuf.field_mask_pb2.FieldMask | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["test_step", b"test_step", "update_mask", b"update_mask"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["test_step", b"test_step", "update_mask", b"update_mask"]) -> None: ... + +global___UpdateTestStepRequest = UpdateTestStepRequest + +@typing.final +class UpdateTestStepResponse(google.protobuf.message.Message): + """Response message for UpdateTestStep""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + TEST_STEP_FIELD_NUMBER: builtins.int + @property + def test_step(self) -> global___TestStep: + """The updated test step""" + + def __init__( + self, + *, + test_step: global___TestStep | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["test_step", b"test_step"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["test_step", b"test_step"]) -> None: ... + +global___UpdateTestStepResponse = UpdateTestStepResponse + +@typing.final +class DeleteTestStepRequest(google.protobuf.message.Message): + """Request message for DeleteTestStep""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + TEST_STEP_ID_FIELD_NUMBER: builtins.int + test_step_id: builtins.str + """The ID of the test step to delete""" + def __init__( + self, + *, + test_step_id: builtins.str = ..., + ) -> None: ... + def ClearField(self, field_name: typing.Literal["test_step_id", b"test_step_id"]) -> None: ... + +global___DeleteTestStepRequest = DeleteTestStepRequest + +@typing.final +class DeleteTestStepResponse(google.protobuf.message.Message): + """Response message for DeleteTestStep + Empty response indicating successful deletion + """ + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + def __init__( + self, + ) -> None: ... + +global___DeleteTestStepResponse = DeleteTestStepResponse + +@typing.final +class CreateTestMeasurementRequest(google.protobuf.message.Message): + """Request message for CreateTestMeasurement""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + TEST_MEASUREMENT_FIELD_NUMBER: builtins.int + @property + def test_measurement(self) -> global___TestMeasurement: + """The test measurement to create""" + + def __init__( + self, + *, + test_measurement: global___TestMeasurement | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["test_measurement", b"test_measurement"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["test_measurement", b"test_measurement"]) -> None: ... + +global___CreateTestMeasurementRequest = CreateTestMeasurementRequest + +@typing.final +class CreateTestMeasurementResponse(google.protobuf.message.Message): + """Response message for CreateTestMeasurement""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + TEST_MEASUREMENT_FIELD_NUMBER: builtins.int + @property + def test_measurement(self) -> global___TestMeasurement: + """The created test measurement""" + + def __init__( + self, + *, + test_measurement: global___TestMeasurement | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["test_measurement", b"test_measurement"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["test_measurement", b"test_measurement"]) -> None: ... + +global___CreateTestMeasurementResponse = CreateTestMeasurementResponse + +@typing.final +class CreateTestMeasurementsRequest(google.protobuf.message.Message): + """Request message for CreateTestMeasurements""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + TEST_MEASUREMENTS_FIELD_NUMBER: builtins.int + @property + def test_measurements(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___TestMeasurement]: + """The test measurements to create""" + + def __init__( + self, + *, + test_measurements: collections.abc.Iterable[global___TestMeasurement] | None = ..., + ) -> None: ... + def ClearField(self, field_name: typing.Literal["test_measurements", b"test_measurements"]) -> None: ... + +global___CreateTestMeasurementsRequest = CreateTestMeasurementsRequest + +@typing.final +class CreateTestMeasurementsResponse(google.protobuf.message.Message): + """Response message for CreateTestMeasurements""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + MEASUREMENTS_CREATED_COUNT_FIELD_NUMBER: builtins.int + MEASUREMENT_IDS_FIELD_NUMBER: builtins.int + measurements_created_count: builtins.int + """The number of test measurements successfully created""" + @property + def measurement_ids(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: + """The IDs of the created test measurements""" + + def __init__( + self, + *, + measurements_created_count: builtins.int = ..., + measurement_ids: collections.abc.Iterable[builtins.str] | None = ..., + ) -> None: ... + def ClearField(self, field_name: typing.Literal["measurement_ids", b"measurement_ids", "measurements_created_count", b"measurements_created_count"]) -> None: ... + +global___CreateTestMeasurementsResponse = CreateTestMeasurementsResponse + +@typing.final +class ListTestMeasurementsRequest(google.protobuf.message.Message): + """Request message for ListTestMeasurements""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + PAGE_SIZE_FIELD_NUMBER: builtins.int + PAGE_TOKEN_FIELD_NUMBER: builtins.int + FILTER_FIELD_NUMBER: builtins.int + ORDER_BY_FIELD_NUMBER: builtins.int + page_size: builtins.int + """The maximum number of test measurements to return. + The service may return fewer than this value. + If unspecified, at most 50 test measurements will be returned. + The maximum value is 1000; values above 1000 will be coerced to 1000. + """ + page_token: builtins.str + """A page token, received from a previous `ListTestMeasurements` call. + Provide this to retrieve the subsequent page. + When paginating, all other parameters provided to `ListTestMeasurements` must match + the call that provided the page token. + """ + filter: builtins.str + """A [Common Expression Language (CEL)](https://github.com/google/cel-spec) filter string. + Available fields to filter by are `measurement_id`, `measurement_type`, `name`, `test_step_id`, + `test_report_id`, `numeric_value`, `string_value`, `boolean_value`, `passed`, `timestamp`, + `created_date`, and `modified_date`. + For further information about how to use CELs, please refer to [this guide](https://github.com/google/cel-spec/blob/master/doc/langdef.md#standard-definitions). + For more information about the fields used for filtering, please refer to [this definition](/docs/api/grpc/protocol-buffers/test-results#testmeasurement). Optional. + """ + order_by: builtins.str + """How to order the retrieved test measurements. Formatted as a comma-separated string i.e. "FIELD_NAME[ desc],...". + Available fields to order_by are `measurement_id`, `name`, `measurement_type`, `test_step_id`, `test_report_id`, + `passed`, `timestamp`, `created_date`, and `modified_date`. + If left empty, items are ordered by `timestamp` in ascending order. + For more information about the format of this field, read [this](https://google.aip.dev/132#ordering) + Example: "timestamp asc,name" + """ + def __init__( + self, + *, + page_size: builtins.int = ..., + page_token: builtins.str = ..., + filter: builtins.str = ..., + order_by: builtins.str = ..., + ) -> None: ... + def ClearField(self, field_name: typing.Literal["filter", b"filter", "order_by", b"order_by", "page_size", b"page_size", "page_token", b"page_token"]) -> None: ... + +global___ListTestMeasurementsRequest = ListTestMeasurementsRequest + +@typing.final +class ListTestMeasurementsResponse(google.protobuf.message.Message): + """Response message for ListTestMeasurements""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + TEST_MEASUREMENTS_FIELD_NUMBER: builtins.int + NEXT_PAGE_TOKEN_FIELD_NUMBER: builtins.int + next_page_token: builtins.str + """The next page token for pagination""" + @property + def test_measurements(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___TestMeasurement]: + """The list of test measurements""" + + def __init__( + self, + *, + test_measurements: collections.abc.Iterable[global___TestMeasurement] | None = ..., + next_page_token: builtins.str = ..., + ) -> None: ... + def ClearField(self, field_name: typing.Literal["next_page_token", b"next_page_token", "test_measurements", b"test_measurements"]) -> None: ... + +global___ListTestMeasurementsResponse = ListTestMeasurementsResponse + +@typing.final +class CountTestStepsRequest(google.protobuf.message.Message): + """Request message for CountTestSteps""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + FILTER_FIELD_NUMBER: builtins.int + filter: builtins.str + """A [Common Expression Language (CEL)](https://github.com/google/cel-spec) filter string. + Available fields to filter by are `test_step_id`, `test_report_id`, `parent_step_id`, `name`, + `description`, `step_type`, `step_path`, `status`, `start_time`, `end_time`, + `error_code`, `error_message`, `created_date`, and `modified_date`. + For further information about how to use CELs, please refer to [this guide](https://github.com/google/cel-spec/blob/master/doc/langdef.md#standard-definitions). + For more information about the fields used for filtering, please refer to [this definition](/docs/api/grpc/protocol-buffers/test-results#teststep). Optional. + """ + def __init__( + self, + *, + filter: builtins.str = ..., + ) -> None: ... + def ClearField(self, field_name: typing.Literal["filter", b"filter"]) -> None: ... + +global___CountTestStepsRequest = CountTestStepsRequest + +@typing.final +class CountTestStepsResponse(google.protobuf.message.Message): + """Response message for CountTestSteps""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + COUNT_FIELD_NUMBER: builtins.int + count: builtins.int + """The total count of test steps matching the filter""" + def __init__( + self, + *, + count: builtins.int = ..., + ) -> None: ... + def ClearField(self, field_name: typing.Literal["count", b"count"]) -> None: ... + +global___CountTestStepsResponse = CountTestStepsResponse + +@typing.final +class CountTestMeasurementsRequest(google.protobuf.message.Message): + """Request message for CountTestMeasurements""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + FILTER_FIELD_NUMBER: builtins.int + filter: builtins.str + """A [Common Expression Language (CEL)](https://github.com/google/cel-spec) filter string. + Available fields to filter by are `measurement_id`, `measurement_type`, `name`, `test_step_id`, + `test_report_id`, `numeric_value`, `string_value`, `boolean_value`, `passed`, `timestamp`, + `created_date`, and `modified_date`. + For further information about how to use CELs, please refer to [this guide](https://github.com/google/cel-spec/blob/master/doc/langdef.md#standard-definitions). + For more information about the fields used for filtering, please refer to [this definition](/docs/api/grpc/protocol-buffers/test-results#testmeasurement). Optional. + """ + def __init__( + self, + *, + filter: builtins.str = ..., + ) -> None: ... + def ClearField(self, field_name: typing.Literal["filter", b"filter"]) -> None: ... + +global___CountTestMeasurementsRequest = CountTestMeasurementsRequest + +@typing.final +class CountTestMeasurementsResponse(google.protobuf.message.Message): + """Response message for CountTestMeasurements""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + COUNT_FIELD_NUMBER: builtins.int + count: builtins.int + """The total count of test measurements matching the filter""" + def __init__( + self, + *, + count: builtins.int = ..., + ) -> None: ... + def ClearField(self, field_name: typing.Literal["count", b"count"]) -> None: ... + +global___CountTestMeasurementsResponse = CountTestMeasurementsResponse + +@typing.final +class UpdateTestMeasurementRequest(google.protobuf.message.Message): + """Request message for UpdateTestMeasurement""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + TEST_MEASUREMENT_FIELD_NUMBER: builtins.int + UPDATE_MASK_FIELD_NUMBER: builtins.int + @property + def test_measurement(self) -> global___TestMeasurement: + """The test measurement to update""" + + @property + def update_mask(self) -> google.protobuf.field_mask_pb2.FieldMask: + """The field mask specifying which fields to update. The fields available to be updated are + `name`, `measurement_type`, `numeric_value`, `string_value`, `boolean_value`, `unit`, `numeric_bounds`, + `string_bounds`, `passed`, and `timestamp`. + """ + + def __init__( + self, + *, + test_measurement: global___TestMeasurement | None = ..., + update_mask: google.protobuf.field_mask_pb2.FieldMask | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["test_measurement", b"test_measurement", "update_mask", b"update_mask"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["test_measurement", b"test_measurement", "update_mask", b"update_mask"]) -> None: ... + +global___UpdateTestMeasurementRequest = UpdateTestMeasurementRequest + +@typing.final +class UpdateTestMeasurementResponse(google.protobuf.message.Message): + """Response message for UpdateTestMeasurement""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + TEST_MEASUREMENT_FIELD_NUMBER: builtins.int + @property + def test_measurement(self) -> global___TestMeasurement: + """The updated test measurement""" + + def __init__( + self, + *, + test_measurement: global___TestMeasurement | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["test_measurement", b"test_measurement"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["test_measurement", b"test_measurement"]) -> None: ... + +global___UpdateTestMeasurementResponse = UpdateTestMeasurementResponse + +@typing.final +class DeleteTestMeasurementRequest(google.protobuf.message.Message): + """Request message for DeleteTestMeasurement""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + MEASUREMENT_ID_FIELD_NUMBER: builtins.int + measurement_id: builtins.str + """The ID of the test measurement to delete""" + def __init__( + self, + *, + measurement_id: builtins.str = ..., + ) -> None: ... + def ClearField(self, field_name: typing.Literal["measurement_id", b"measurement_id"]) -> None: ... + +global___DeleteTestMeasurementRequest = DeleteTestMeasurementRequest + +@typing.final +class DeleteTestMeasurementResponse(google.protobuf.message.Message): + """Response message for DeleteTestMeasurement + Empty response indicating successful deletion + """ + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + def __init__( + self, + ) -> None: ... + +global___DeleteTestMeasurementResponse = DeleteTestMeasurementResponse diff --git a/python/lib/sift/test_reports/v1/test_reports_pb2_grpc.py b/python/lib/sift/test_reports/v1/test_reports_pb2_grpc.py new file mode 100644 index 000000000..abb0c496d --- /dev/null +++ b/python/lib/sift/test_reports/v1/test_reports_pb2_grpc.py @@ -0,0 +1,611 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc + +from sift.test_reports.v1 import test_reports_pb2 as sift_dot_test__reports_dot_v1_dot_test__reports__pb2 + + +class TestReportServiceStub(object): + """Missing associated documentation comment in .proto file.""" + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.ImportTestReport = channel.unary_unary( + '/sift.test_reports.v1.TestReportService/ImportTestReport', + request_serializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.ImportTestReportRequest.SerializeToString, + response_deserializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.ImportTestReportResponse.FromString, + ) + self.CreateTestReport = channel.unary_unary( + '/sift.test_reports.v1.TestReportService/CreateTestReport', + request_serializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.CreateTestReportRequest.SerializeToString, + response_deserializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.CreateTestReportResponse.FromString, + ) + self.GetTestReport = channel.unary_unary( + '/sift.test_reports.v1.TestReportService/GetTestReport', + request_serializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.GetTestReportRequest.SerializeToString, + response_deserializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.GetTestReportResponse.FromString, + ) + self.ListTestReports = channel.unary_unary( + '/sift.test_reports.v1.TestReportService/ListTestReports', + request_serializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.ListTestReportsRequest.SerializeToString, + response_deserializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.ListTestReportsResponse.FromString, + ) + self.UpdateTestReport = channel.unary_unary( + '/sift.test_reports.v1.TestReportService/UpdateTestReport', + request_serializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.UpdateTestReportRequest.SerializeToString, + response_deserializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.UpdateTestReportResponse.FromString, + ) + self.DeleteTestReport = channel.unary_unary( + '/sift.test_reports.v1.TestReportService/DeleteTestReport', + request_serializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.DeleteTestReportRequest.SerializeToString, + response_deserializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.DeleteTestReportResponse.FromString, + ) + self.CreateTestStep = channel.unary_unary( + '/sift.test_reports.v1.TestReportService/CreateTestStep', + request_serializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.CreateTestStepRequest.SerializeToString, + response_deserializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.CreateTestStepResponse.FromString, + ) + self.ListTestSteps = channel.unary_unary( + '/sift.test_reports.v1.TestReportService/ListTestSteps', + request_serializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.ListTestStepsRequest.SerializeToString, + response_deserializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.ListTestStepsResponse.FromString, + ) + self.UpdateTestStep = channel.unary_unary( + '/sift.test_reports.v1.TestReportService/UpdateTestStep', + request_serializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.UpdateTestStepRequest.SerializeToString, + response_deserializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.UpdateTestStepResponse.FromString, + ) + self.DeleteTestStep = channel.unary_unary( + '/sift.test_reports.v1.TestReportService/DeleteTestStep', + request_serializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.DeleteTestStepRequest.SerializeToString, + response_deserializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.DeleteTestStepResponse.FromString, + ) + self.CreateTestMeasurement = channel.unary_unary( + '/sift.test_reports.v1.TestReportService/CreateTestMeasurement', + request_serializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.CreateTestMeasurementRequest.SerializeToString, + response_deserializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.CreateTestMeasurementResponse.FromString, + ) + self.CreateTestMeasurements = channel.unary_unary( + '/sift.test_reports.v1.TestReportService/CreateTestMeasurements', + request_serializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.CreateTestMeasurementsRequest.SerializeToString, + response_deserializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.CreateTestMeasurementsResponse.FromString, + ) + self.ListTestMeasurements = channel.unary_unary( + '/sift.test_reports.v1.TestReportService/ListTestMeasurements', + request_serializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.ListTestMeasurementsRequest.SerializeToString, + response_deserializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.ListTestMeasurementsResponse.FromString, + ) + self.CountTestSteps = channel.unary_unary( + '/sift.test_reports.v1.TestReportService/CountTestSteps', + request_serializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.CountTestStepsRequest.SerializeToString, + response_deserializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.CountTestStepsResponse.FromString, + ) + self.CountTestMeasurements = channel.unary_unary( + '/sift.test_reports.v1.TestReportService/CountTestMeasurements', + request_serializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.CountTestMeasurementsRequest.SerializeToString, + response_deserializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.CountTestMeasurementsResponse.FromString, + ) + self.UpdateTestMeasurement = channel.unary_unary( + '/sift.test_reports.v1.TestReportService/UpdateTestMeasurement', + request_serializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.UpdateTestMeasurementRequest.SerializeToString, + response_deserializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.UpdateTestMeasurementResponse.FromString, + ) + self.DeleteTestMeasurement = channel.unary_unary( + '/sift.test_reports.v1.TestReportService/DeleteTestMeasurement', + request_serializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.DeleteTestMeasurementRequest.SerializeToString, + response_deserializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.DeleteTestMeasurementResponse.FromString, + ) + + +class TestReportServiceServicer(object): + """Missing associated documentation comment in .proto file.""" + + def ImportTestReport(self, request, context): + """Imports a test report from an already-uploaded file + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def CreateTestReport(self, request, context): + """Creates a test report + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetTestReport(self, request, context): + """Gets a single test report + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ListTestReports(self, request, context): + """Lists test reports with optional filtering + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def UpdateTestReport(self, request, context): + """Updates a test report + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DeleteTestReport(self, request, context): + """Deletes a test report + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def CreateTestStep(self, request, context): + """Creates a test step + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ListTestSteps(self, request, context): + """Lists test steps with optional filtering + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def UpdateTestStep(self, request, context): + """Updates a test step + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DeleteTestStep(self, request, context): + """Deletes a test step + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def CreateTestMeasurement(self, request, context): + """Creates a test measurement + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def CreateTestMeasurements(self, request, context): + """Creates multiple test measurements in a single request + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ListTestMeasurements(self, request, context): + """Lists test measurements with optional filtering + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def CountTestSteps(self, request, context): + """Counts test steps with optional filtering + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def CountTestMeasurements(self, request, context): + """Counts test measurements with optional filtering + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def UpdateTestMeasurement(self, request, context): + """Updates a test measurement + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DeleteTestMeasurement(self, request, context): + """Deletes a test measurement + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_TestReportServiceServicer_to_server(servicer, server): + rpc_method_handlers = { + 'ImportTestReport': grpc.unary_unary_rpc_method_handler( + servicer.ImportTestReport, + request_deserializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.ImportTestReportRequest.FromString, + response_serializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.ImportTestReportResponse.SerializeToString, + ), + 'CreateTestReport': grpc.unary_unary_rpc_method_handler( + servicer.CreateTestReport, + request_deserializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.CreateTestReportRequest.FromString, + response_serializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.CreateTestReportResponse.SerializeToString, + ), + 'GetTestReport': grpc.unary_unary_rpc_method_handler( + servicer.GetTestReport, + request_deserializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.GetTestReportRequest.FromString, + response_serializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.GetTestReportResponse.SerializeToString, + ), + 'ListTestReports': grpc.unary_unary_rpc_method_handler( + servicer.ListTestReports, + request_deserializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.ListTestReportsRequest.FromString, + response_serializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.ListTestReportsResponse.SerializeToString, + ), + 'UpdateTestReport': grpc.unary_unary_rpc_method_handler( + servicer.UpdateTestReport, + request_deserializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.UpdateTestReportRequest.FromString, + response_serializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.UpdateTestReportResponse.SerializeToString, + ), + 'DeleteTestReport': grpc.unary_unary_rpc_method_handler( + servicer.DeleteTestReport, + request_deserializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.DeleteTestReportRequest.FromString, + response_serializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.DeleteTestReportResponse.SerializeToString, + ), + 'CreateTestStep': grpc.unary_unary_rpc_method_handler( + servicer.CreateTestStep, + request_deserializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.CreateTestStepRequest.FromString, + response_serializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.CreateTestStepResponse.SerializeToString, + ), + 'ListTestSteps': grpc.unary_unary_rpc_method_handler( + servicer.ListTestSteps, + request_deserializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.ListTestStepsRequest.FromString, + response_serializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.ListTestStepsResponse.SerializeToString, + ), + 'UpdateTestStep': grpc.unary_unary_rpc_method_handler( + servicer.UpdateTestStep, + request_deserializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.UpdateTestStepRequest.FromString, + response_serializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.UpdateTestStepResponse.SerializeToString, + ), + 'DeleteTestStep': grpc.unary_unary_rpc_method_handler( + servicer.DeleteTestStep, + request_deserializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.DeleteTestStepRequest.FromString, + response_serializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.DeleteTestStepResponse.SerializeToString, + ), + 'CreateTestMeasurement': grpc.unary_unary_rpc_method_handler( + servicer.CreateTestMeasurement, + request_deserializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.CreateTestMeasurementRequest.FromString, + response_serializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.CreateTestMeasurementResponse.SerializeToString, + ), + 'CreateTestMeasurements': grpc.unary_unary_rpc_method_handler( + servicer.CreateTestMeasurements, + request_deserializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.CreateTestMeasurementsRequest.FromString, + response_serializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.CreateTestMeasurementsResponse.SerializeToString, + ), + 'ListTestMeasurements': grpc.unary_unary_rpc_method_handler( + servicer.ListTestMeasurements, + request_deserializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.ListTestMeasurementsRequest.FromString, + response_serializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.ListTestMeasurementsResponse.SerializeToString, + ), + 'CountTestSteps': grpc.unary_unary_rpc_method_handler( + servicer.CountTestSteps, + request_deserializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.CountTestStepsRequest.FromString, + response_serializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.CountTestStepsResponse.SerializeToString, + ), + 'CountTestMeasurements': grpc.unary_unary_rpc_method_handler( + servicer.CountTestMeasurements, + request_deserializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.CountTestMeasurementsRequest.FromString, + response_serializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.CountTestMeasurementsResponse.SerializeToString, + ), + 'UpdateTestMeasurement': grpc.unary_unary_rpc_method_handler( + servicer.UpdateTestMeasurement, + request_deserializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.UpdateTestMeasurementRequest.FromString, + response_serializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.UpdateTestMeasurementResponse.SerializeToString, + ), + 'DeleteTestMeasurement': grpc.unary_unary_rpc_method_handler( + servicer.DeleteTestMeasurement, + request_deserializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.DeleteTestMeasurementRequest.FromString, + response_serializer=sift_dot_test__reports_dot_v1_dot_test__reports__pb2.DeleteTestMeasurementResponse.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'sift.test_reports.v1.TestReportService', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + + + # This class is part of an EXPERIMENTAL API. +class TestReportService(object): + """Missing associated documentation comment in .proto file.""" + + @staticmethod + def ImportTestReport(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/sift.test_reports.v1.TestReportService/ImportTestReport', + sift_dot_test__reports_dot_v1_dot_test__reports__pb2.ImportTestReportRequest.SerializeToString, + sift_dot_test__reports_dot_v1_dot_test__reports__pb2.ImportTestReportResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def CreateTestReport(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/sift.test_reports.v1.TestReportService/CreateTestReport', + sift_dot_test__reports_dot_v1_dot_test__reports__pb2.CreateTestReportRequest.SerializeToString, + sift_dot_test__reports_dot_v1_dot_test__reports__pb2.CreateTestReportResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def GetTestReport(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/sift.test_reports.v1.TestReportService/GetTestReport', + sift_dot_test__reports_dot_v1_dot_test__reports__pb2.GetTestReportRequest.SerializeToString, + sift_dot_test__reports_dot_v1_dot_test__reports__pb2.GetTestReportResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def ListTestReports(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/sift.test_reports.v1.TestReportService/ListTestReports', + sift_dot_test__reports_dot_v1_dot_test__reports__pb2.ListTestReportsRequest.SerializeToString, + sift_dot_test__reports_dot_v1_dot_test__reports__pb2.ListTestReportsResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def UpdateTestReport(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/sift.test_reports.v1.TestReportService/UpdateTestReport', + sift_dot_test__reports_dot_v1_dot_test__reports__pb2.UpdateTestReportRequest.SerializeToString, + sift_dot_test__reports_dot_v1_dot_test__reports__pb2.UpdateTestReportResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def DeleteTestReport(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/sift.test_reports.v1.TestReportService/DeleteTestReport', + sift_dot_test__reports_dot_v1_dot_test__reports__pb2.DeleteTestReportRequest.SerializeToString, + sift_dot_test__reports_dot_v1_dot_test__reports__pb2.DeleteTestReportResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def CreateTestStep(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/sift.test_reports.v1.TestReportService/CreateTestStep', + sift_dot_test__reports_dot_v1_dot_test__reports__pb2.CreateTestStepRequest.SerializeToString, + sift_dot_test__reports_dot_v1_dot_test__reports__pb2.CreateTestStepResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def ListTestSteps(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/sift.test_reports.v1.TestReportService/ListTestSteps', + sift_dot_test__reports_dot_v1_dot_test__reports__pb2.ListTestStepsRequest.SerializeToString, + sift_dot_test__reports_dot_v1_dot_test__reports__pb2.ListTestStepsResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def UpdateTestStep(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/sift.test_reports.v1.TestReportService/UpdateTestStep', + sift_dot_test__reports_dot_v1_dot_test__reports__pb2.UpdateTestStepRequest.SerializeToString, + sift_dot_test__reports_dot_v1_dot_test__reports__pb2.UpdateTestStepResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def DeleteTestStep(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/sift.test_reports.v1.TestReportService/DeleteTestStep', + sift_dot_test__reports_dot_v1_dot_test__reports__pb2.DeleteTestStepRequest.SerializeToString, + sift_dot_test__reports_dot_v1_dot_test__reports__pb2.DeleteTestStepResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def CreateTestMeasurement(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/sift.test_reports.v1.TestReportService/CreateTestMeasurement', + sift_dot_test__reports_dot_v1_dot_test__reports__pb2.CreateTestMeasurementRequest.SerializeToString, + sift_dot_test__reports_dot_v1_dot_test__reports__pb2.CreateTestMeasurementResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def CreateTestMeasurements(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/sift.test_reports.v1.TestReportService/CreateTestMeasurements', + sift_dot_test__reports_dot_v1_dot_test__reports__pb2.CreateTestMeasurementsRequest.SerializeToString, + sift_dot_test__reports_dot_v1_dot_test__reports__pb2.CreateTestMeasurementsResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def ListTestMeasurements(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/sift.test_reports.v1.TestReportService/ListTestMeasurements', + sift_dot_test__reports_dot_v1_dot_test__reports__pb2.ListTestMeasurementsRequest.SerializeToString, + sift_dot_test__reports_dot_v1_dot_test__reports__pb2.ListTestMeasurementsResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def CountTestSteps(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/sift.test_reports.v1.TestReportService/CountTestSteps', + sift_dot_test__reports_dot_v1_dot_test__reports__pb2.CountTestStepsRequest.SerializeToString, + sift_dot_test__reports_dot_v1_dot_test__reports__pb2.CountTestStepsResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def CountTestMeasurements(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/sift.test_reports.v1.TestReportService/CountTestMeasurements', + sift_dot_test__reports_dot_v1_dot_test__reports__pb2.CountTestMeasurementsRequest.SerializeToString, + sift_dot_test__reports_dot_v1_dot_test__reports__pb2.CountTestMeasurementsResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def UpdateTestMeasurement(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/sift.test_reports.v1.TestReportService/UpdateTestMeasurement', + sift_dot_test__reports_dot_v1_dot_test__reports__pb2.UpdateTestMeasurementRequest.SerializeToString, + sift_dot_test__reports_dot_v1_dot_test__reports__pb2.UpdateTestMeasurementResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def DeleteTestMeasurement(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/sift.test_reports.v1.TestReportService/DeleteTestMeasurement', + sift_dot_test__reports_dot_v1_dot_test__reports__pb2.DeleteTestMeasurementRequest.SerializeToString, + sift_dot_test__reports_dot_v1_dot_test__reports__pb2.DeleteTestMeasurementResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/python/lib/sift/test_reports/v1/test_reports_pb2_grpc.pyi b/python/lib/sift/test_reports/v1/test_reports_pb2_grpc.pyi new file mode 100644 index 000000000..614d7ad43 --- /dev/null +++ b/python/lib/sift/test_reports/v1/test_reports_pb2_grpc.pyi @@ -0,0 +1,364 @@ +""" +@generated by mypy-protobuf. Do not edit manually! +isort:skip_file +""" + +import abc +import collections.abc +import grpc +import grpc.aio +import sift.test_reports.v1.test_reports_pb2 +import typing + +_T = typing.TypeVar("_T") + +class _MaybeAsyncIterator(collections.abc.AsyncIterator[_T], collections.abc.Iterator[_T], metaclass=abc.ABCMeta): ... + +class _ServicerContext(grpc.ServicerContext, grpc.aio.ServicerContext): # type: ignore[misc, type-arg] + ... + +class TestReportServiceStub: + def __init__(self, channel: typing.Union[grpc.Channel, grpc.aio.Channel]) -> None: ... + ImportTestReport: grpc.UnaryUnaryMultiCallable[ + sift.test_reports.v1.test_reports_pb2.ImportTestReportRequest, + sift.test_reports.v1.test_reports_pb2.ImportTestReportResponse, + ] + """Imports a test report from an already-uploaded file""" + + CreateTestReport: grpc.UnaryUnaryMultiCallable[ + sift.test_reports.v1.test_reports_pb2.CreateTestReportRequest, + sift.test_reports.v1.test_reports_pb2.CreateTestReportResponse, + ] + """Creates a test report""" + + GetTestReport: grpc.UnaryUnaryMultiCallable[ + sift.test_reports.v1.test_reports_pb2.GetTestReportRequest, + sift.test_reports.v1.test_reports_pb2.GetTestReportResponse, + ] + """Gets a single test report""" + + ListTestReports: grpc.UnaryUnaryMultiCallable[ + sift.test_reports.v1.test_reports_pb2.ListTestReportsRequest, + sift.test_reports.v1.test_reports_pb2.ListTestReportsResponse, + ] + """Lists test reports with optional filtering""" + + UpdateTestReport: grpc.UnaryUnaryMultiCallable[ + sift.test_reports.v1.test_reports_pb2.UpdateTestReportRequest, + sift.test_reports.v1.test_reports_pb2.UpdateTestReportResponse, + ] + """Updates a test report""" + + DeleteTestReport: grpc.UnaryUnaryMultiCallable[ + sift.test_reports.v1.test_reports_pb2.DeleteTestReportRequest, + sift.test_reports.v1.test_reports_pb2.DeleteTestReportResponse, + ] + """Deletes a test report""" + + CreateTestStep: grpc.UnaryUnaryMultiCallable[ + sift.test_reports.v1.test_reports_pb2.CreateTestStepRequest, + sift.test_reports.v1.test_reports_pb2.CreateTestStepResponse, + ] + """Creates a test step""" + + ListTestSteps: grpc.UnaryUnaryMultiCallable[ + sift.test_reports.v1.test_reports_pb2.ListTestStepsRequest, + sift.test_reports.v1.test_reports_pb2.ListTestStepsResponse, + ] + """Lists test steps with optional filtering""" + + UpdateTestStep: grpc.UnaryUnaryMultiCallable[ + sift.test_reports.v1.test_reports_pb2.UpdateTestStepRequest, + sift.test_reports.v1.test_reports_pb2.UpdateTestStepResponse, + ] + """Updates a test step""" + + DeleteTestStep: grpc.UnaryUnaryMultiCallable[ + sift.test_reports.v1.test_reports_pb2.DeleteTestStepRequest, + sift.test_reports.v1.test_reports_pb2.DeleteTestStepResponse, + ] + """Deletes a test step""" + + CreateTestMeasurement: grpc.UnaryUnaryMultiCallable[ + sift.test_reports.v1.test_reports_pb2.CreateTestMeasurementRequest, + sift.test_reports.v1.test_reports_pb2.CreateTestMeasurementResponse, + ] + """Creates a test measurement""" + + CreateTestMeasurements: grpc.UnaryUnaryMultiCallable[ + sift.test_reports.v1.test_reports_pb2.CreateTestMeasurementsRequest, + sift.test_reports.v1.test_reports_pb2.CreateTestMeasurementsResponse, + ] + """Creates multiple test measurements in a single request""" + + ListTestMeasurements: grpc.UnaryUnaryMultiCallable[ + sift.test_reports.v1.test_reports_pb2.ListTestMeasurementsRequest, + sift.test_reports.v1.test_reports_pb2.ListTestMeasurementsResponse, + ] + """Lists test measurements with optional filtering""" + + CountTestSteps: grpc.UnaryUnaryMultiCallable[ + sift.test_reports.v1.test_reports_pb2.CountTestStepsRequest, + sift.test_reports.v1.test_reports_pb2.CountTestStepsResponse, + ] + """Counts test steps with optional filtering""" + + CountTestMeasurements: grpc.UnaryUnaryMultiCallable[ + sift.test_reports.v1.test_reports_pb2.CountTestMeasurementsRequest, + sift.test_reports.v1.test_reports_pb2.CountTestMeasurementsResponse, + ] + """Counts test measurements with optional filtering""" + + UpdateTestMeasurement: grpc.UnaryUnaryMultiCallable[ + sift.test_reports.v1.test_reports_pb2.UpdateTestMeasurementRequest, + sift.test_reports.v1.test_reports_pb2.UpdateTestMeasurementResponse, + ] + """Updates a test measurement""" + + DeleteTestMeasurement: grpc.UnaryUnaryMultiCallable[ + sift.test_reports.v1.test_reports_pb2.DeleteTestMeasurementRequest, + sift.test_reports.v1.test_reports_pb2.DeleteTestMeasurementResponse, + ] + """Deletes a test measurement""" + +class TestReportServiceAsyncStub: + ImportTestReport: grpc.aio.UnaryUnaryMultiCallable[ + sift.test_reports.v1.test_reports_pb2.ImportTestReportRequest, + sift.test_reports.v1.test_reports_pb2.ImportTestReportResponse, + ] + """Imports a test report from an already-uploaded file""" + + CreateTestReport: grpc.aio.UnaryUnaryMultiCallable[ + sift.test_reports.v1.test_reports_pb2.CreateTestReportRequest, + sift.test_reports.v1.test_reports_pb2.CreateTestReportResponse, + ] + """Creates a test report""" + + GetTestReport: grpc.aio.UnaryUnaryMultiCallable[ + sift.test_reports.v1.test_reports_pb2.GetTestReportRequest, + sift.test_reports.v1.test_reports_pb2.GetTestReportResponse, + ] + """Gets a single test report""" + + ListTestReports: grpc.aio.UnaryUnaryMultiCallable[ + sift.test_reports.v1.test_reports_pb2.ListTestReportsRequest, + sift.test_reports.v1.test_reports_pb2.ListTestReportsResponse, + ] + """Lists test reports with optional filtering""" + + UpdateTestReport: grpc.aio.UnaryUnaryMultiCallable[ + sift.test_reports.v1.test_reports_pb2.UpdateTestReportRequest, + sift.test_reports.v1.test_reports_pb2.UpdateTestReportResponse, + ] + """Updates a test report""" + + DeleteTestReport: grpc.aio.UnaryUnaryMultiCallable[ + sift.test_reports.v1.test_reports_pb2.DeleteTestReportRequest, + sift.test_reports.v1.test_reports_pb2.DeleteTestReportResponse, + ] + """Deletes a test report""" + + CreateTestStep: grpc.aio.UnaryUnaryMultiCallable[ + sift.test_reports.v1.test_reports_pb2.CreateTestStepRequest, + sift.test_reports.v1.test_reports_pb2.CreateTestStepResponse, + ] + """Creates a test step""" + + ListTestSteps: grpc.aio.UnaryUnaryMultiCallable[ + sift.test_reports.v1.test_reports_pb2.ListTestStepsRequest, + sift.test_reports.v1.test_reports_pb2.ListTestStepsResponse, + ] + """Lists test steps with optional filtering""" + + UpdateTestStep: grpc.aio.UnaryUnaryMultiCallable[ + sift.test_reports.v1.test_reports_pb2.UpdateTestStepRequest, + sift.test_reports.v1.test_reports_pb2.UpdateTestStepResponse, + ] + """Updates a test step""" + + DeleteTestStep: grpc.aio.UnaryUnaryMultiCallable[ + sift.test_reports.v1.test_reports_pb2.DeleteTestStepRequest, + sift.test_reports.v1.test_reports_pb2.DeleteTestStepResponse, + ] + """Deletes a test step""" + + CreateTestMeasurement: grpc.aio.UnaryUnaryMultiCallable[ + sift.test_reports.v1.test_reports_pb2.CreateTestMeasurementRequest, + sift.test_reports.v1.test_reports_pb2.CreateTestMeasurementResponse, + ] + """Creates a test measurement""" + + CreateTestMeasurements: grpc.aio.UnaryUnaryMultiCallable[ + sift.test_reports.v1.test_reports_pb2.CreateTestMeasurementsRequest, + sift.test_reports.v1.test_reports_pb2.CreateTestMeasurementsResponse, + ] + """Creates multiple test measurements in a single request""" + + ListTestMeasurements: grpc.aio.UnaryUnaryMultiCallable[ + sift.test_reports.v1.test_reports_pb2.ListTestMeasurementsRequest, + sift.test_reports.v1.test_reports_pb2.ListTestMeasurementsResponse, + ] + """Lists test measurements with optional filtering""" + + CountTestSteps: grpc.aio.UnaryUnaryMultiCallable[ + sift.test_reports.v1.test_reports_pb2.CountTestStepsRequest, + sift.test_reports.v1.test_reports_pb2.CountTestStepsResponse, + ] + """Counts test steps with optional filtering""" + + CountTestMeasurements: grpc.aio.UnaryUnaryMultiCallable[ + sift.test_reports.v1.test_reports_pb2.CountTestMeasurementsRequest, + sift.test_reports.v1.test_reports_pb2.CountTestMeasurementsResponse, + ] + """Counts test measurements with optional filtering""" + + UpdateTestMeasurement: grpc.aio.UnaryUnaryMultiCallable[ + sift.test_reports.v1.test_reports_pb2.UpdateTestMeasurementRequest, + sift.test_reports.v1.test_reports_pb2.UpdateTestMeasurementResponse, + ] + """Updates a test measurement""" + + DeleteTestMeasurement: grpc.aio.UnaryUnaryMultiCallable[ + sift.test_reports.v1.test_reports_pb2.DeleteTestMeasurementRequest, + sift.test_reports.v1.test_reports_pb2.DeleteTestMeasurementResponse, + ] + """Deletes a test measurement""" + +class TestReportServiceServicer(metaclass=abc.ABCMeta): + @abc.abstractmethod + def ImportTestReport( + self, + request: sift.test_reports.v1.test_reports_pb2.ImportTestReportRequest, + context: _ServicerContext, + ) -> typing.Union[sift.test_reports.v1.test_reports_pb2.ImportTestReportResponse, collections.abc.Awaitable[sift.test_reports.v1.test_reports_pb2.ImportTestReportResponse]]: + """Imports a test report from an already-uploaded file""" + + @abc.abstractmethod + def CreateTestReport( + self, + request: sift.test_reports.v1.test_reports_pb2.CreateTestReportRequest, + context: _ServicerContext, + ) -> typing.Union[sift.test_reports.v1.test_reports_pb2.CreateTestReportResponse, collections.abc.Awaitable[sift.test_reports.v1.test_reports_pb2.CreateTestReportResponse]]: + """Creates a test report""" + + @abc.abstractmethod + def GetTestReport( + self, + request: sift.test_reports.v1.test_reports_pb2.GetTestReportRequest, + context: _ServicerContext, + ) -> typing.Union[sift.test_reports.v1.test_reports_pb2.GetTestReportResponse, collections.abc.Awaitable[sift.test_reports.v1.test_reports_pb2.GetTestReportResponse]]: + """Gets a single test report""" + + @abc.abstractmethod + def ListTestReports( + self, + request: sift.test_reports.v1.test_reports_pb2.ListTestReportsRequest, + context: _ServicerContext, + ) -> typing.Union[sift.test_reports.v1.test_reports_pb2.ListTestReportsResponse, collections.abc.Awaitable[sift.test_reports.v1.test_reports_pb2.ListTestReportsResponse]]: + """Lists test reports with optional filtering""" + + @abc.abstractmethod + def UpdateTestReport( + self, + request: sift.test_reports.v1.test_reports_pb2.UpdateTestReportRequest, + context: _ServicerContext, + ) -> typing.Union[sift.test_reports.v1.test_reports_pb2.UpdateTestReportResponse, collections.abc.Awaitable[sift.test_reports.v1.test_reports_pb2.UpdateTestReportResponse]]: + """Updates a test report""" + + @abc.abstractmethod + def DeleteTestReport( + self, + request: sift.test_reports.v1.test_reports_pb2.DeleteTestReportRequest, + context: _ServicerContext, + ) -> typing.Union[sift.test_reports.v1.test_reports_pb2.DeleteTestReportResponse, collections.abc.Awaitable[sift.test_reports.v1.test_reports_pb2.DeleteTestReportResponse]]: + """Deletes a test report""" + + @abc.abstractmethod + def CreateTestStep( + self, + request: sift.test_reports.v1.test_reports_pb2.CreateTestStepRequest, + context: _ServicerContext, + ) -> typing.Union[sift.test_reports.v1.test_reports_pb2.CreateTestStepResponse, collections.abc.Awaitable[sift.test_reports.v1.test_reports_pb2.CreateTestStepResponse]]: + """Creates a test step""" + + @abc.abstractmethod + def ListTestSteps( + self, + request: sift.test_reports.v1.test_reports_pb2.ListTestStepsRequest, + context: _ServicerContext, + ) -> typing.Union[sift.test_reports.v1.test_reports_pb2.ListTestStepsResponse, collections.abc.Awaitable[sift.test_reports.v1.test_reports_pb2.ListTestStepsResponse]]: + """Lists test steps with optional filtering""" + + @abc.abstractmethod + def UpdateTestStep( + self, + request: sift.test_reports.v1.test_reports_pb2.UpdateTestStepRequest, + context: _ServicerContext, + ) -> typing.Union[sift.test_reports.v1.test_reports_pb2.UpdateTestStepResponse, collections.abc.Awaitable[sift.test_reports.v1.test_reports_pb2.UpdateTestStepResponse]]: + """Updates a test step""" + + @abc.abstractmethod + def DeleteTestStep( + self, + request: sift.test_reports.v1.test_reports_pb2.DeleteTestStepRequest, + context: _ServicerContext, + ) -> typing.Union[sift.test_reports.v1.test_reports_pb2.DeleteTestStepResponse, collections.abc.Awaitable[sift.test_reports.v1.test_reports_pb2.DeleteTestStepResponse]]: + """Deletes a test step""" + + @abc.abstractmethod + def CreateTestMeasurement( + self, + request: sift.test_reports.v1.test_reports_pb2.CreateTestMeasurementRequest, + context: _ServicerContext, + ) -> typing.Union[sift.test_reports.v1.test_reports_pb2.CreateTestMeasurementResponse, collections.abc.Awaitable[sift.test_reports.v1.test_reports_pb2.CreateTestMeasurementResponse]]: + """Creates a test measurement""" + + @abc.abstractmethod + def CreateTestMeasurements( + self, + request: sift.test_reports.v1.test_reports_pb2.CreateTestMeasurementsRequest, + context: _ServicerContext, + ) -> typing.Union[sift.test_reports.v1.test_reports_pb2.CreateTestMeasurementsResponse, collections.abc.Awaitable[sift.test_reports.v1.test_reports_pb2.CreateTestMeasurementsResponse]]: + """Creates multiple test measurements in a single request""" + + @abc.abstractmethod + def ListTestMeasurements( + self, + request: sift.test_reports.v1.test_reports_pb2.ListTestMeasurementsRequest, + context: _ServicerContext, + ) -> typing.Union[sift.test_reports.v1.test_reports_pb2.ListTestMeasurementsResponse, collections.abc.Awaitable[sift.test_reports.v1.test_reports_pb2.ListTestMeasurementsResponse]]: + """Lists test measurements with optional filtering""" + + @abc.abstractmethod + def CountTestSteps( + self, + request: sift.test_reports.v1.test_reports_pb2.CountTestStepsRequest, + context: _ServicerContext, + ) -> typing.Union[sift.test_reports.v1.test_reports_pb2.CountTestStepsResponse, collections.abc.Awaitable[sift.test_reports.v1.test_reports_pb2.CountTestStepsResponse]]: + """Counts test steps with optional filtering""" + + @abc.abstractmethod + def CountTestMeasurements( + self, + request: sift.test_reports.v1.test_reports_pb2.CountTestMeasurementsRequest, + context: _ServicerContext, + ) -> typing.Union[sift.test_reports.v1.test_reports_pb2.CountTestMeasurementsResponse, collections.abc.Awaitable[sift.test_reports.v1.test_reports_pb2.CountTestMeasurementsResponse]]: + """Counts test measurements with optional filtering""" + + @abc.abstractmethod + def UpdateTestMeasurement( + self, + request: sift.test_reports.v1.test_reports_pb2.UpdateTestMeasurementRequest, + context: _ServicerContext, + ) -> typing.Union[sift.test_reports.v1.test_reports_pb2.UpdateTestMeasurementResponse, collections.abc.Awaitable[sift.test_reports.v1.test_reports_pb2.UpdateTestMeasurementResponse]]: + """Updates a test measurement""" + + @abc.abstractmethod + def DeleteTestMeasurement( + self, + request: sift.test_reports.v1.test_reports_pb2.DeleteTestMeasurementRequest, + context: _ServicerContext, + ) -> typing.Union[sift.test_reports.v1.test_reports_pb2.DeleteTestMeasurementResponse, collections.abc.Awaitable[sift.test_reports.v1.test_reports_pb2.DeleteTestMeasurementResponse]]: + """Deletes a test measurement""" + +def add_TestReportServiceServicer_to_server(servicer: TestReportServiceServicer, server: typing.Union[grpc.Server, grpc.aio.Server]) -> None: ... diff --git a/python/lib/sift_client/_internal/low_level_wrappers/__init__.py b/python/lib/sift_client/_internal/low_level_wrappers/__init__.py index 6bdef7f17..69722cc41 100644 --- a/python/lib/sift_client/_internal/low_level_wrappers/__init__.py +++ b/python/lib/sift_client/_internal/low_level_wrappers/__init__.py @@ -7,6 +7,8 @@ from sift_client._internal.low_level_wrappers.ping import PingLowLevelClient from sift_client._internal.low_level_wrappers.rules import RulesLowLevelClient from sift_client._internal.low_level_wrappers.runs import RunsLowLevelClient +from sift_client._internal.low_level_wrappers.test_results import TestResultsLowLevelClient +from sift_client._internal.low_level_wrappers.upload import UploadLowLevelClient __all__ = [ "AssetsLowLevelClient", @@ -16,4 +18,6 @@ "PingLowLevelClient", "RulesLowLevelClient", "RunsLowLevelClient", + "TestResultsLowLevelClient", + "UploadLowLevelClient", ] diff --git a/python/lib/sift_client/_internal/low_level_wrappers/test_results.py b/python/lib/sift_client/_internal/low_level_wrappers/test_results.py new file mode 100644 index 000000000..4f9eafbe3 --- /dev/null +++ b/python/lib/sift_client/_internal/low_level_wrappers/test_results.py @@ -0,0 +1,493 @@ +from __future__ import annotations + +import logging +from typing import TYPE_CHECKING, Any, cast + +from google.protobuf.timestamp_pb2 import Timestamp +from sift.test_reports.v1.test_reports_pb2 import ( + CreateTestMeasurementRequest, + CreateTestMeasurementResponse, + CreateTestMeasurementsRequest, + CreateTestMeasurementsResponse, + CreateTestReportRequest, + CreateTestReportResponse, + CreateTestStepRequest, + CreateTestStepResponse, + DeleteTestMeasurementRequest, + DeleteTestReportRequest, + DeleteTestStepRequest, + GetTestReportRequest, + GetTestReportResponse, + ImportTestReportRequest, + ImportTestReportResponse, + ListTestMeasurementsRequest, + ListTestMeasurementsResponse, + ListTestReportsRequest, + ListTestReportsResponse, + ListTestStepsRequest, + ListTestStepsResponse, + UpdateTestMeasurementRequest, + UpdateTestMeasurementResponse, + UpdateTestReportRequest, + UpdateTestReportResponse, + UpdateTestStepRequest, + UpdateTestStepResponse, +) +from sift.test_reports.v1.test_reports_pb2_grpc import TestReportServiceStub + +from sift_client._internal.low_level_wrappers.base import LowLevelClientBase +from sift_client.sift_types.test_report import ( + TestMeasurement, + TestMeasurementCreate, + TestMeasurementUpdate, + TestReport, + TestReportCreate, + TestReportUpdate, + TestStatus, + TestStep, + TestStepCreate, + TestStepUpdate, +) +from sift_client.transport import WithGrpcClient +from sift_client.util.metadata import metadata_dict_to_proto + +if TYPE_CHECKING: + from sift_client.transport.grpc_transport import GrpcClient + +# Configure logging +logger = logging.getLogger(__name__) + + +class TestResultsLowLevelClient(LowLevelClientBase, WithGrpcClient): + """Low-level client for the TestResultsAPI. + + This class provides a thin wrapper around the autogenerated bindings for the TestResultsAPI. + """ + + def __init__(self, grpc_client: GrpcClient): + """Initialize the TestResultsLowLevelClient. + + Args: + grpc_client: The gRPC client to use for making API calls. + """ + super().__init__(grpc_client) + + async def import_test_report(self, remote_file_id: str) -> TestReport: + """Import a test report from an already-uploaded file. + + Args: + remote_file_id: The remote file ID containing the XML test data. + + Returns: + The imported TestReport. + + Raises: + ValueError: If remote_file_id is not provided. + """ + if not remote_file_id: + raise ValueError("remote_file_id must be provided") + + request = ImportTestReportRequest(remote_file_id=remote_file_id) + response = await self._grpc_client.get_stub(TestReportServiceStub).ImportTestReport(request) + grpc_test_report = cast("ImportTestReportResponse", response).test_report + return TestReport._from_proto(grpc_test_report) + + async def create_test_report( + self, + *, + test_report: TestReportCreate, + ) -> TestReport: + """Create a new test report. + + Args: + test_report: The test report to create. + + Returns: + The created TestReport. + """ + request_kwargs: dict[str, Any] = { + "status": test_report.status.value + if isinstance(test_report.status, TestStatus) + else test_report.status, + "name": test_report.name, + "test_system_name": test_report.test_system_name, + "test_case": test_report.test_case, + } + + # Handle timestamps + start_ts = Timestamp() + start_ts.FromDatetime(test_report.start_time) + request_kwargs["start_time"] = start_ts + + end_ts = Timestamp() + end_ts.FromDatetime(test_report.end_time) + request_kwargs["end_time"] = end_ts + + if test_report.metadata is not None: + request_kwargs["metadata"] = metadata_dict_to_proto(test_report.metadata) + + if test_report.serial_number is not None: + request_kwargs["serial_number"] = test_report.serial_number + + if test_report.part_number is not None: + request_kwargs["part_number"] = test_report.part_number + + if test_report.system_operator is not None: + request_kwargs["system_operator"] = test_report.system_operator + + request = CreateTestReportRequest(**request_kwargs) + response = await self._grpc_client.get_stub(TestReportServiceStub).CreateTestReport(request) + grpc_test_report = cast("CreateTestReportResponse", response).test_report + return TestReport._from_proto(grpc_test_report) + + async def get_test_report(self, test_report_id: str) -> TestReport: + """Get a test report by test_report_id. + + Args: + test_report_id: The test report ID to get. + + Returns: + The TestReport. + + Raises: + ValueError: If test_report_id is not provided. + """ + if not test_report_id: + raise ValueError("test_report_id must be provided") + + request = GetTestReportRequest(test_report_id=test_report_id) + response = await self._grpc_client.get_stub(TestReportServiceStub).GetTestReport(request) + grpc_test_report = cast("GetTestReportResponse", response).test_report + return TestReport._from_proto(grpc_test_report) + + async def list_test_reports( + self, + *, + page_size: int | None = None, + page_token: str | None = None, + query_filter: str | None = None, + order_by: str | None = None, + ) -> tuple[list[TestReport], str]: + """List test reports with optional filtering and pagination. + + Args: + page_size: The maximum number of test reports to return. + page_token: A page token for pagination. + query_filter: A CEL filter string. + order_by: How to order the retrieved test reports. + + Returns: + A tuple of (test_reports, next_page_token). + """ + request_kwargs: dict[str, Any] = {} + if page_size is not None: + request_kwargs["page_size"] = page_size + if page_token is not None: + request_kwargs["page_token"] = page_token + if query_filter is not None: + request_kwargs["filter"] = query_filter + if order_by is not None: + request_kwargs["order_by"] = order_by + + request = ListTestReportsRequest(**request_kwargs) + response = await self._grpc_client.get_stub(TestReportServiceStub).ListTestReports(request) + response = cast("ListTestReportsResponse", response) + + test_reports = [TestReport._from_proto(tr) for tr in response.test_reports] + return test_reports, response.next_page_token + + async def list_all_test_reports( + self, + *, + query_filter: str | None = None, + order_by: str | None = None, + max_results: int | None = None, + ) -> list[TestReport]: + """List all test reports with optional filtering. + + Args: + query_filter: A CEL filter string. + order_by: How to order the retrieved test reports. + max_results: Maximum number of results to return. + + Returns: + A list of all matching test reports. + """ + return await self._handle_pagination( + self.list_test_reports, + kwargs={"query_filter": query_filter}, + order_by=order_by, + max_results=max_results, + ) + + async def update_test_report(self, update: TestReportUpdate) -> TestReport: + """Update an existing test report. + + Args: + update: The updates to apply. + + Returns: + The updated TestReport. + """ + test_report_proto, field_mask = update.to_proto_with_mask() + request = UpdateTestReportRequest(test_report=test_report_proto, update_mask=field_mask) + response = await self._grpc_client.get_stub(TestReportServiceStub).UpdateTestReport(request) + grpc_test_report = cast("UpdateTestReportResponse", response).test_report + return TestReport._from_proto(grpc_test_report) + + async def delete_test_report(self, test_report_id: str) -> None: + """Delete a test report. + + Args: + test_report_id: The ID of the test report to delete. + + Raises: + ValueError: If test_report_id is not provided. + """ + if not test_report_id: + raise ValueError("test_report_id must be provided") + + request = DeleteTestReportRequest(test_report_id=test_report_id) + await self._grpc_client.get_stub(TestReportServiceStub).DeleteTestReport(request) + + # Test Steps + + async def create_test_step(self, test_step: TestStepCreate) -> TestStep: + """Create a new test step. + + Args: + test_step: The test step to create. + + Returns: + The created TestStep. + """ + request = CreateTestStepRequest(test_step=test_step.to_proto()) + response = await self._grpc_client.get_stub(TestReportServiceStub).CreateTestStep(request) + grpc_test_step = cast("CreateTestStepResponse", response).test_step + return TestStep._from_proto(grpc_test_step) + + async def list_test_steps( + self, + *, + page_size: int | None = None, + page_token: str | None = None, + query_filter: str | None = None, + order_by: str | None = None, + ) -> tuple[list[TestStep], str]: + """List test steps with optional filtering and pagination. + + Args: + page_size: The maximum number of test steps to return. + page_token: A page token for pagination. + query_filter: A CEL filter string. + order_by: How to order the retrieved test steps. + + Returns: + A tuple of (test_steps, next_page_token). + """ + request_kwargs: dict[str, Any] = {} + if page_size is not None: + request_kwargs["page_size"] = page_size + if page_token is not None: + request_kwargs["page_token"] = page_token + if query_filter is not None: + request_kwargs["filter"] = query_filter + if order_by is not None: + request_kwargs["order_by"] = order_by + + request = ListTestStepsRequest(**request_kwargs) + response = await self._grpc_client.get_stub(TestReportServiceStub).ListTestSteps(request) + response = cast("ListTestStepsResponse", response) + + test_steps = [TestStep._from_proto(ts) for ts in response.test_steps] + return test_steps, response.next_page_token + + async def list_all_test_steps( + self, + *, + query_filter: str | None = None, + order_by: str | None = None, + max_results: int | None = None, + ) -> list[TestStep]: + """List all test steps with optional filtering. + + Args: + query_filter: A CEL filter string. + order_by: How to order the retrieved test steps. + max_results: Maximum number of results to return. + + Returns: + A list of all matching test steps. + """ + return await self._handle_pagination( + self.list_test_steps, + kwargs={"query_filter": query_filter}, + order_by=order_by, + max_results=max_results, + ) + + async def update_test_step(self, update: TestStepUpdate) -> TestStep: + """Update an existing test step. + + Args: + update: The updates to apply. + + Returns: + The updated TestStep. + """ + test_step_proto, field_mask = update.to_proto_with_mask() + + request = UpdateTestStepRequest(test_step=test_step_proto, update_mask=field_mask) + response = await self._grpc_client.get_stub(TestReportServiceStub).UpdateTestStep(request) + grpc_test_step = cast("UpdateTestStepResponse", response).test_step + return TestStep._from_proto(grpc_test_step) + + async def delete_test_step(self, test_step_id: str) -> None: + """Delete a test step. + + Args: + test_step_id: The ID of the test step to delete. + + Raises: + ValueError: If test_step_id is not provided. + """ + if not test_step_id: + raise ValueError("test_step_id must be provided") + + request = DeleteTestStepRequest(test_step_id=test_step_id) + await self._grpc_client.get_stub(TestReportServiceStub).DeleteTestStep(request) + + # Test Measurements + + async def create_test_measurement( + self, test_measurement: TestMeasurementCreate + ) -> TestMeasurement: + """Create a new test measurement. + + Args: + test_measurement: The test measurement to create. + + Returns: + The created TestMeasurement. + """ + request = CreateTestMeasurementRequest(test_measurement=test_measurement.to_proto()) + response = await self._grpc_client.get_stub(TestReportServiceStub).CreateTestMeasurement( + request + ) + grpc_test_measurement = cast("CreateTestMeasurementResponse", response).test_measurement + return TestMeasurement._from_proto(grpc_test_measurement) + + async def create_test_measurements( + self, test_measurements: list[TestMeasurementCreate] + ) -> tuple[int, list[str]]: + """Create multiple test measurements in a single request. + + Args: + test_measurements: The test measurements to create. + + Returns: + A tuple of (measurements_created_count, measurement_ids). + """ + measurement_protos = [tm.to_proto() for tm in test_measurements] + request = CreateTestMeasurementsRequest(test_measurements=measurement_protos) + response = await self._grpc_client.get_stub(TestReportServiceStub).CreateTestMeasurements( + request + ) + response = cast("CreateTestMeasurementsResponse", response) + return response.measurements_created_count, list(response.measurement_ids) + + async def list_test_measurements( + self, + *, + page_size: int | None = None, + page_token: str | None = None, + query_filter: str | None = None, + order_by: str | None = None, + ) -> tuple[list[TestMeasurement], str]: + """List test measurements with optional filtering and pagination. + + Args: + page_size: The maximum number of test measurements to return. + page_token: A page token for pagination. + query_filter: A CEL filter string. + order_by: How to order the retrieved test measurements. + + Returns: + A tuple of (test_measurements, next_page_token). + """ + request_kwargs: dict[str, Any] = {} + if page_size is not None: + request_kwargs["page_size"] = page_size + if page_token is not None: + request_kwargs["page_token"] = page_token + if query_filter is not None: + request_kwargs["filter"] = query_filter + if order_by is not None: + request_kwargs["order_by"] = order_by + + request = ListTestMeasurementsRequest(**request_kwargs) + response = await self._grpc_client.get_stub(TestReportServiceStub).ListTestMeasurements( + request + ) + response = cast("ListTestMeasurementsResponse", response) + + test_measurements = [TestMeasurement._from_proto(tm) for tm in response.test_measurements] + return test_measurements, response.next_page_token + + async def list_all_test_measurements( + self, + *, + query_filter: str | None = None, + order_by: str | None = None, + max_results: int | None = None, + ) -> list[TestMeasurement]: + """List all test measurements with optional filtering. + + Args: + query_filter: A CEL filter string. + order_by: How to order the retrieved test measurements. + max_results: Maximum number of results to return. + + Returns: + A list of all matching test measurements. + """ + return await self._handle_pagination( + self.list_test_measurements, + kwargs={"query_filter": query_filter}, + order_by=order_by, + max_results=max_results, + ) + + async def update_test_measurement(self, update: TestMeasurementUpdate) -> TestMeasurement: + """Update an existing test measurement. + + Args: + update: The updates to apply. + + Returns: + The updated TestMeasurement. + """ + test_measurement_proto, field_mask = update.to_proto_with_mask() + request = UpdateTestMeasurementRequest( + test_measurement=test_measurement_proto, update_mask=field_mask + ) + response = await self._grpc_client.get_stub(TestReportServiceStub).UpdateTestMeasurement( + request + ) + grpc_test_measurement = cast("UpdateTestMeasurementResponse", response).test_measurement + return TestMeasurement._from_proto(grpc_test_measurement) + + async def delete_test_measurement(self, measurement_id: str) -> None: + """Delete a test measurement. + + Args: + measurement_id: The ID of the test measurement to delete. + + Raises: + ValueError: If measurement_id is not provided. + """ + if not measurement_id: + raise ValueError("measurement_id must be provided") + + request = DeleteTestMeasurementRequest(measurement_id=measurement_id) + await self._grpc_client.get_stub(TestReportServiceStub).DeleteTestMeasurement(request) diff --git a/python/lib/sift_client/_internal/low_level_wrappers/upload.py b/python/lib/sift_client/_internal/low_level_wrappers/upload.py new file mode 100644 index 000000000..ba7e595f3 --- /dev/null +++ b/python/lib/sift_client/_internal/low_level_wrappers/upload.py @@ -0,0 +1,189 @@ +from __future__ import annotations + +import asyncio +import logging +from pathlib import Path +from typing import TYPE_CHECKING, Any + +from requests_toolbelt import MultipartEncoder + +from sift_client._internal.low_level_wrappers.base import LowLevelClientBase +from sift_client.transport import WithRestClient + +if TYPE_CHECKING: + from sift_client.transport.rest_transport import RestClient + +# Configure logging +logger = logging.getLogger(__name__) + + +class UploadLowLevelClient(LowLevelClientBase, WithRestClient): + """Low-level client for file upload operations. + + This class provides a thin wrapper for uploading file attachments via REST API. + + Example: + ```python + from sift_client.client import SiftClient + from sift_client._internal.low_level_wrappers.upload import UploadLowLevelClient + + # Initialize the REST client + sift_client = SiftClient(rest_url="https://your-api.siftstack.com", grpc_url="https://your-grpc-api.siftstack.com", api_key="your-api-key") + + # Create the upload client + upload_client = UploadLowLevelClient(sift_client.rest_client) + + # Upload a file + remote_file_id = await upload_client.upload_attachment( + path="path/to/file.mp4", + entity_id="run_12345", + entity_type="runs", + description="Video of test run", + ) + ``` + """ + + UPLOAD_PATH = "/api/v0/remote-files/upload" + UPLOAD_BULK_PATH = "/api/v0/remote-files/upload:bulk" + + def __init__(self, rest_client: RestClient): + """Initialize the UploadLowLevelClient. + + Args: + rest_client: The REST client to use for making API calls. + """ + super().__init__(rest_client) + + async def upload_attachment( + self, + path: str | Path, + entity_id: str, + entity_type: str, + metadata: dict[str, Any] | None = None, + description: str | None = None, + organization_id: str | None = None, + ) -> str: + """Upload a file attachment to an entity. + + Args: + path: Path to the file to upload. + entity_id: The ID of the entity to attach the file to. + entity_type: The type of entity (e.g., "runs", "annotations", "annotation_logs"). + metadata: Optional metadata for the file (e.g., video/image metadata). + description: Optional description of the file. + organization_id: Optional organization ID. + + Returns: + The remote file ID of the uploaded file. + + Raises: + ValueError: If the path doesn't point to a regular file or MIME type cannot be determined. + Exception: If the upload fails. + """ + posix_path = Path(path) if isinstance(path, str) else path + + if not posix_path.is_file(): + raise ValueError(f"Provided path, '{path}', does not point to a regular file.") + + file_name, mimetype, content_encoding = self._mime_and_content_type_from_path(posix_path) + + if not mimetype: + raise ValueError(f"The MIME-type of '{posix_path}' could not be computed.") + + # Run the synchronous file upload in a thread pool to avoid blocking the event loop + loop = asyncio.get_event_loop() + return await loop.run_in_executor( + None, + self._upload_file_sync, + posix_path, + file_name, + mimetype, + content_encoding, + entity_id, + entity_type, + metadata, + description, + organization_id, + ) + + def _upload_file_sync( + self, + path: Path, + file_name: str, + mimetype: str, + content_encoding: str | None, + entity_id: str, + entity_type: str, + metadata: dict[str, Any] | None, + description: str | None, + organization_id: str | None, + ) -> str: + """Synchronous helper to upload the file. + + This is called from a thread pool to avoid blocking the async event loop. + """ + with open(path, "rb") as file: + form_fields: dict[str, Any] = { + "entityId": entity_id, + "entityType": entity_type, + } + + if content_encoding: + form_fields["file"] = ( + file_name, + file, + mimetype, + { + "Content-Encoding": content_encoding, + }, + ) + else: + form_fields["file"] = (file_name, file, mimetype) + + if metadata: + import json + + form_fields["metadata"] = json.dumps( + metadata, default=lambda x: x.as_json() if hasattr(x, "as_json") else x + ) + + if organization_id: + form_fields["organizationId"] = organization_id + + if description: + form_fields["description"] = description + + form_data = MultipartEncoder(fields=form_fields) + + # Use the RestClient to make the POST request + response = self._rest_client.post( + endpoint=self.UPLOAD_PATH, + data=form_data, # type: ignore + headers={ + "Content-Type": form_data.content_type, + }, + ) + + if response.status_code != 200: + raise Exception( + f"Request failed with status code {response.status_code} ({response.reason})." + ) + + response_data = response.json() + return response_data.get("remoteFile", {}).get("remoteFileId") + + @staticmethod + def _mime_and_content_type_from_path(path: Path) -> tuple[str, str | None, str | None]: + """Determine the MIME type and content encoding from a file path. + + Args: + path: The file path to analyze. + + Returns: + A tuple of (file_name, mime_type, content_encoding). + """ + import mimetypes + + file_name = path.name + mime, encoding = mimetypes.guess_type(path) + return file_name, mime, encoding diff --git a/python/lib/sift_client/_tests/conftest.py b/python/lib/sift_client/_tests/conftest.py index 1f218dedc..3d22df167 100644 --- a/python/lib/sift_client/_tests/conftest.py +++ b/python/lib/sift_client/_tests/conftest.py @@ -6,6 +6,7 @@ import pytest from sift_client import SiftClient +from sift_client.transport import SiftConnectionConfig from sift_client.util.util import AsyncAPIs @@ -21,9 +22,12 @@ def sift_client() -> SiftClient: api_key = os.getenv("SIFT_API_KEY", "") return SiftClient( - api_key=api_key, - grpc_url=grpc_url, - rest_url=rest_url, + connection_config=SiftConnectionConfig( + api_key=api_key, + grpc_url=grpc_url, + rest_url=rest_url, + use_ssl=True, + ) ) @@ -37,6 +41,7 @@ def mock_client(): client.channels = MagicMock() client.calculated_channels = MagicMock() client.rules = MagicMock() + client.test_results = MagicMock() client.async_ = MagicMock(spec=AsyncAPIs) client.async_.ingestion = MagicMock() return client diff --git a/python/lib/sift_client/_tests/resources/test_files/demo_test_report.xml b/python/lib/sift_client/_tests/resources/test_files/demo_test_report.xml new file mode 100644 index 000000000..1b19dee80 --- /dev/null +++ b/python/lib/sift_client/_tests/resources/test_files/demo_test_report.xml @@ -0,0 +1,4313 @@ + + + + + + + + + + SequenceCall + Main + + + + + + + + + + + SequenceCall + Setup + + + + + + + + + + + Action + Main + + + + + + + + + + + + + + + + + + + Action + Main + + + + + + + + + + + + + + Done + + + + + + + AdditionalResults + Main + + + + + + + + + + + + + DAQ1.100Hz Engine.uut_2_p + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Action + Main + + + + + + + + + + + + + + Done + + + + + + + AdditionalResults + Main + + + + + + + + + + + SequenceCall + Main + + + + + + + + + + + Action + Main + + + + + + + + + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + + + + + + + + + + NI_Flow_While + Main + + + + + + + + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + + + (While) + + + + + + + NI_Flow_End + Main + + + + + + + + + + + + + {False} + + + + + + + NI_Flow_If + Main + + + + + + + + + + + + + (If) + + + + + + + NI_Flow_End + Main + + + + + + + + + + + + NI_Wait + Main + + + + + + + + + + + Action + Main + + + + + + + + + + + + NI_Wait + Main + + + + + + + + + + + SequenceCall + Main + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + + + + + + + + + + NI_Flow_While + Main + + + + + + + + + + + NumericLimitTest + Main + + + + + + + + + + + + + + + + + + + + + + + + Action + Main + + + + + + + + + + + + + + (While) + + + + + + + NI_Flow_End + Main + + + + + + + + + + + + + + + + + + + + NI_Flow_While + Main + + + + + + + + + + + NumericLimitTest + Main + + + + + + + + + + + + + + + + + + + + + + + + Action + Main + + + + + + + + + + + + + + (While) + + + + + + + NI_Flow_End + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + NI_Wait + Main + + + + + + + + + + + SequenceCall + Main + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + + + =20 && Locals.TimestampDelta<=60 && Locals.i<=60]]> + + + + + + + NI_Flow_While + Main + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + + + (While) + + + + + + + NI_Flow_End + Main + + + + + + + + + + + + + =20 && Locals.TimestampDelta<=60 && Locals.i<=60]]> + + + + + + + NI_Flow_While + Main + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + + + (While) + + + + + + + NI_Flow_End + Main + + + + + + + + + + + + + =20 && Locals.TimestampDelta<=60 && Locals.i<=60]]> + + + + + + + NI_Flow_While + Main + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + + + (While) + + + + + + + NI_Flow_End + Main + + + + + + + + + + + + + =20 && Locals.TimestampDelta<=60 && Locals.i<=60]]> + + + + + + + NI_Flow_While + Main + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + + + (While) + + + + + + + NI_Flow_End + Main + + + + + + + + + + + + + =20 && Locals.TimestampDelta<=60 && Locals.i<=60]]> + + + + + + + NI_Flow_While + Main + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + + + (While) + + + + + + + NI_Flow_End + Main + + + + + + + + + + + + + =20 && Locals.TimestampDelta<=60 && Locals.i<=60]]> + + + + + + + NI_Flow_While + Main + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + + + (While) + + + + + + + NI_Flow_End + Main + + + + + + + + + + + + + =20 && Locals.TimestampDelta<=60 && Locals.i<=60]]> + + + + + + + NI_Flow_While + Main + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + + + (While) + + + + + + + NI_Flow_End + Main + + + + + + + + + + + + + =20 && Locals.TimestampDelta<=60 && Locals.i<=60]]> + + + + + + + NI_Flow_While + Main + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + + + (While) + + + + + + + NI_Flow_End + Main + + + + + + + + + + + + + =20 && Locals.TimestampDelta<=60 && Locals.i<=60]]> + + + + + + + NI_Flow_While + Main + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + + + (While) + + + + + + + NI_Flow_End + Main + + + + + + + + + + + + + =20 && Locals.TimestampDelta<=60 && Locals.i<=60]]> + + + + + + + NI_Flow_While + Main + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + + + (While) + + + + + + + NI_Flow_End + Main + + + + + + + + + + + + + =20 && Locals.TimestampDelta<=60 && Locals.i<=60]]> + + + + + + + NI_Flow_While + Main + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + + + (While) + + + + + + + NI_Flow_End + Main + + + + + + + + + + + + + =20 && Locals.TimestampDelta<=60 && Locals.i<=60]]> + + + + + + + NI_Flow_While + Main + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + + + (While) + + + + + + + NI_Flow_End + Main + + + + + + + + + + + + + =20 && Locals.TimestampDelta<=60 && Locals.i<=60]]> + + + + + + + NI_Flow_While + Main + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + + + (While) + + + + + + + NI_Flow_End + Main + + + + + + + + + + + + + =20 && Locals.TimestampDelta<=60 && Locals.i<=60]]> + + + + + + + NI_Flow_While + Main + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + + + (While) + + + + + + + NI_Flow_End + Main + + + + + + + + + + + + + =20 && Locals.TimestampDelta<=60 && Locals.i<=60]]> + + + + + + + NI_Flow_While + Main + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + + + (While) + + + + + + + NI_Flow_End + Main + + + + + + + + + + + + + =20 && Locals.TimestampDelta<=60 && Locals.i<=60]]> + + + + + + + NI_Flow_While + Main + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + + + (While) + + + + + + + NI_Flow_End + Main + + + + + + + + + + + + + =20 && Locals.TimestampDelta<=60 && Locals.i<=60]]> + + + + + + + NI_Flow_While + Main + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + + + (While) + + + + + + + NI_Flow_End + Main + + + + + + + + + + + + + =20 && Locals.TimestampDelta<=60 && Locals.i<=60]]> + + + + + + + NI_Flow_While + Main + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + + + (While) + + + + + + + NI_Flow_End + Main + + + + + + + + + + + + + =20 && Locals.TimestampDelta<=60 && Locals.i<=60]]> + + + + + + + NI_Flow_While + Main + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + + + (While) + + + + + + + NI_Flow_End + Main + + + + + + + + + + + + NI_Wait + Main + + + + + + + + + + + PassFailTest + Main + + + + + + + + + + + + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + SequenceCall + Main + + + + + + + + + + + Action + Main + + + + + + + + + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + + + + + + + + + + NI_Flow_While + Main + + + + + + + + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + + + (While) + + + + + + + NI_Flow_End + Main + + + + + + + + + + + + + + + + + + + + NI_Flow_While + Main + + + + + + + + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + + + (While) + + + + + + + NI_Flow_End + Main + + + + + + + + + + + + + {False} + + + + + + + NI_Flow_If + Main + + + + + + + + + + + + + (If) + + + + + + + NI_Flow_End + Main + + + + + + + + + + + + NI_Wait + Main + + + + + + + + + + + Action + Main + + + + + + + + + + + + NI_Wait + Main + + + + + + + + + + + Label + Main + + + + + + + + + + + SequenceCall + Main + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + + + + + + + + + + NI_Flow_While + Main + + + + + + + + + + + NumericLimitTest + Main + + + + + + + + + + + + + + + + + + + + + + + + Action + Main + + + + + + + + + + + + + + (While) + + + + + + + NI_Flow_End + Main + + + + + + + + + + + + + + + + + + + + NI_Flow_While + Main + + + + + + + + + + + NumericLimitTest + Main + + + + + + + + + + + + + + + + + + + + + + + + Action + Main + + + + + + + + + + + + + + (While) + + + + + + + NI_Flow_End + Main + + + + + + + + + + + + + SequenceCall + Main + + + + + + + + + + + + + + + + + + + + + + + + + + + AdditionalResults + Main + + + + + + + + + + + + SequenceCall + Main + + + + + + + + + + + + + + + + + + + + + + + + + + + AdditionalResults + Main + + + + + + + + + + + + SequenceCall + Main + + + + + + + + + + + SequenceCall + Main + + + + + + + + + + + + + + + + + + SequenceCall + Main + + + + + + + + + + + + + + NumericLimitTest + Main + + + + + + + + + + + + + + + + + + + + + + + + NumericLimitTest + Main + + + + + + + + + + + NumericLimitTest + Main + + + + + + + + + + + + + + + + + + + + + + + + NumericLimitTest + Main + + + + + + + + + + + + + + + + + + + + + + + + + SequenceCall + Main + + + + + + + + + + + + + + NumericLimitTest + Main + + + + + + + + + + + + + + + + + + + + + + + + NumericLimitTest + Main + + + + + + + + + + + NumericLimitTest + Main + + + + + + + + + + + + + + + + + + + + + + + + NumericLimitTest + Main + + + + + + + + + + + + + + + + + + + + + + + + + SequenceCall + Main + + + + + + + + + + + + + + NumericLimitTest + Main + + + + + + + + + + + + + + + + + + + + + + + + NumericLimitTest + Main + + + + + + + + + + + NumericLimitTest + Main + + + + + + + + + + + + + + + + + + + + + + + + NumericLimitTest + Main + + + + + + + + + + + + + + + + + + + + + + + + + SequenceCall + Main + + + + + + + + + + + + + + + + + + SequenceCall + Main + + + + + + + + + + + + + + Action + Main + + + + + + + + + + + + NI_Wait + Main + + + + + + + + + + + Action + Main + + + + + + + + + + + + NI_Wait + Main + + + + + + + + + + + + + + + + + + + + + + + + + + + AdditionalResults + Main + + + + + + + + + + + + SequenceCall + Main + + + + + + + + + + + + + + Action + Main + + + + + + + + + + + + NI_Wait + Main + + + + + + + + + + + Action + Main + + + + + + + + + + + + NI_Wait + Main + + + + + + + + + + + + + + + + + + + + + + + + + + + AdditionalResults + Main + + + + + + + + + + + + SequenceCall + Main + + + + + + + + + + + + + + Action + Main + + + + + + + + + + + + NI_Wait + Main + + + + + + + + + + + Action + Main + + + + + + + + + + + + NI_Wait + Main + + + + + + + + + + + + + + + + + + + + + + + + + + + AdditionalResults + Main + + + + + + + + + + + + SequenceCall + Main + + + + + + + + + + + + + + + + + + + + + + + + + + + AdditionalResults + Main + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AdditionalResults + Main + + + + + + + + + + + + + {False} + + + + + + + NI_Flow_If + Main + + + + + + + + + + + + + (If) + + + + + + + NI_Flow_End + Main + + + + + + + + + + + + + {False} + + + + + + + NI_Flow_If + Main + + + + + + + + + + + + + (If) + + + + + + + NI_Flow_End + Main + + + + + + + + + + + + SequenceCall + Main + + + + + + + + + + + SequenceCall + Main + + + + + + + + + + + SequenceCall + Main + + + + + + + + + + + Action + Main + + + + + + + + + + + + SequenceCall + Main + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + + + =20 && Locals.TimestampDelta<=60 && Locals.i<=60]]> + + + + + + + NI_Flow_While + Main + + + + + + + + + + + + + (While) + + + + + + + NI_Flow_End + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + SequenceCall + Main + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + + SequenceCall + Main + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + Action + Main + + + + + + + + + + + + + example-test-system + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + xml + + + + + %$.13g + + + + + True + + + + + + + + + + + + + + + + + + + + + + + + + + SequenceFileDirectory + + + + + + + + + + Report + + + + + + + + + + + + + + + + + + + + + + + + DLL + + + + + + + + + + #FFFFFF + + + + + #32FFFF + + + + + #0000E0 + + + + + #8000CC + + + + + #000000 + + + + + #00C4C4 + + + + + #FF8000 + + + + + #ADD8E6 + + + + + #FF32CC + + + + + #000080 + + + + + #FF0000 + + + + + #FF0000 + + + + + #008000 + + + + + #B98028 + + + + + #008000 + + + + + #FFCC33 + + + + + #0000FF + + + + + #FF0000 + + + + + #FF0000 + + + + + #00FF00 + + + + + #FFFF00 + + + + + #00FFCC + + + + + #FFCC33 + + + + + #FF2020 + + + + + #D0D0D0 + + + + + #00C4C4 + + + + + + + TimeFirst + + + + + + + + + + + + + + + + + BatchReport + + + + + + + + tr5_horizontal.xsl + + + + + C:\Program Files\National Instruments\TestStand 2023\Components\Models\TestStandModels\ATML\StyleSheets\tr5_horizontal.xsl + + + + + + horizontal.xsl + + + report.xsl + + + expand.xsl + + + + + + + + + + + + + TR_horizontal.xsl + + + trml.xsl + + + + + + + + + + + + + + + + + + + + + + + + + + + ATML5 + + + + + "$(ClientFileDir)\\$(ClientFileName)_Report[$(FileTime)][$(FileDate)]$(Unique).$(FileExtension)" + + + + + "$(ClientFileDir)\\$(ClientFileName)_Report[$(FileTime)][$(FileDate)]$(Unique).$(FileExtension)" + + + + + "$(ClientFileDir)\\$(ClientFileName)_BatchReport[$(FileTime)][$(FileDate)]$(Unique).$(FileExtension)" + + + + + "$(ClientFileDir)\\$(ClientFileName)_BatchReport[$(FileTime)][$(FileDate)]$(Unique).$(FileExtension)" + + + + + + + + + + + + + + + + + + + + + + tr5_horizontal.xsl + + + tr5_report.xsl + + + tr5_expand.xsl + + + + + + + + + + + + + + + + + + + + + + + + tr6_horizontal.xsl + + + tr6_report.xsl + + + tr6_expand.xsl + + + + + + + + + + + + + + LPTC-02-WIN + + + + + UNKNOWN + + + + + + + + + + + 3898 + + + + + + + + NONE + + + + + + + + diff --git a/python/lib/sift_client/_tests/resources/test_results.py b/python/lib/sift_client/_tests/resources/test_results.py new file mode 100644 index 000000000..12eaedfe0 --- /dev/null +++ b/python/lib/sift_client/_tests/resources/test_results.py @@ -0,0 +1,343 @@ +from __future__ import annotations + +from datetime import datetime, timedelta, timezone +from pathlib import Path +from typing import ClassVar + +import grpc +import pytest +from grpc import aio as aiogrpc + +from sift_client.resources import TestResultsAPI, TestResultsAPIAsync +from sift_client.sift_types.test_report import ( + ErrorInfo, + NumericBounds, + TestMeasurement, + TestMeasurementCreate, + TestMeasurementType, + TestReport, + TestReportUpdate, + TestStatus, + TestStep, + TestStepCreate, + TestStepType, +) + +pytestmark = pytest.mark.integration + + +def test_client_binding(sift_client): + assert sift_client.test_results + assert isinstance(sift_client.test_results, TestResultsAPI) + assert sift_client.async_.test_results + assert isinstance(sift_client.async_.test_results, TestResultsAPIAsync) + + +class TestResultsTest: + test_reports: ClassVar[dict[str, TestReport]] = {} + test_steps: ClassVar[dict[str, TestStep]] = {} + test_measurements: ClassVar[dict[str, TestMeasurement]] = {} + + def test_create_test_report(self, sift_client): + # Create a test report + simulated_time = datetime.now(timezone.utc) + test_report = sift_client.test_results.create( + { + "status": TestStatus.PASSED, + "name": "Test Report with Steps and Measurements", + "test_system_name": "Test System", + "test_case": "Test Case", + "start_time": simulated_time, + "end_time": simulated_time, + }, + ) + assert test_report.id_ is not None + self.test_reports["basic_test_report"] = test_report + + def test_create_test_steps(self, sift_client): + test_report = self.test_reports.get("basic_test_report") + if not test_report: + pytest.skip("Need to create a test report first") + simulated_time = test_report.start_time + + # Create multiple test steps using TestStepCreate + step1 = sift_client.test_results.create_step( + TestStepCreate( + test_report_id=test_report.id_, + name="Step 1: Initialization", + description="Initialize the test environment", + step_type=TestStepType.ACTION, + step_path="1", + status=TestStatus.PASSED, + start_time=simulated_time, + end_time=simulated_time + timedelta(seconds=10), + ), + ) + simulated_time = simulated_time + timedelta(seconds=10.1) + + # Create a step using a dict + step1_1 = sift_client.test_results.create_step( + { + "test_report_id": test_report.id_, + "parent_step_id": step1.id_, + "name": "Step 1.1: Substep 1", + "description": "Substep 1 of Step 1", + "step_type": TestStepType.ACTION, + "step_path": "1.1", + "status": TestStatus.PASSED, + "start_time": simulated_time, + "end_time": simulated_time + timedelta(seconds=10), + }, + ) + simulated_time = simulated_time + timedelta(seconds=10.1) + + step2 = sift_client.test_results.create_step( + TestStepCreate( + test_report_id=test_report.id_, + name="Step 2: Data Collection", + description="Collect sensor data", + step_type=TestStepType.ACTION, + step_path="2", + status=TestStatus.PASSED, + start_time=simulated_time, + end_time=simulated_time + timedelta(seconds=10), + ) + ) + simulated_time = simulated_time + timedelta(seconds=10.1) + step3 = sift_client.test_results.create_step( + TestStepCreate( + test_report_id=test_report.id_, + name="Step 3: Validation", + description="Validate collected data", + step_type=TestStepType.ACTION, + step_path="3", + status=TestStatus.IN_PROGRESS, + start_time=simulated_time, + end_time=simulated_time + timedelta(seconds=10), + ), + ) + + step3_1 = sift_client.test_results.create_step( + TestStepCreate( + test_report_id=test_report.id_, + parent_step_id=step3.id_, + name="Step 3.1: Substep 3.1", + description="Error demo", + step_type=TestStepType.ACTION, + step_path="3.1", + status=TestStatus.FAILED, + start_time=simulated_time, + end_time=simulated_time + timedelta(seconds=11), + error_info=ErrorInfo( + error_code=1, + error_message="Demo error message", + ), + ), + ) + assert step1.id_ is not None + assert step1_1.id_ is not None + assert step2.id_ is not None + assert step3.id_ is not None + assert step3_1.id_ is not None + self.test_steps["step1"] = step1 + self.test_steps["step1_1"] = step1_1 + self.test_steps["step2"] = step2 + self.test_steps["step3"] = step3 + self.test_steps["step3_1"] = step3_1 + + def test_update_test_steps(self, sift_client): + step3 = self.test_steps.get("step3") + step3_1 = self.test_steps.get("step3_1") + if not step3 or not step3_1: + pytest.skip("Need to create a step first") + step3 = sift_client.test_results.update_step( + step3, + {"status": TestStatus.PASSED}, + ) + # Update the step using class function. + step3_1 = step3_1.update( + {"description": "Error demo w/ updated description"}, + ) + assert step3.status == TestStatus.PASSED + assert step3_1.description == "Error demo w/ updated description" + + def test_create_test_measurements(self, sift_client): + step1 = self.test_steps.get("step1") + step2 = self.test_steps.get("step2") + step3 = self.test_steps.get("step3") + step1_1 = self.test_steps.get("step1_1") + if not step1 or not step2 or not step3 or not step1_1: + pytest.skip("Need to create steps first") + + # Create measurements for each step using TestMeasurementCreate + measurement1 = sift_client.test_results.create_measurement( + TestMeasurementCreate( + test_step_id=step1.id_, + name="Temperature Reading", + measurement_type=TestMeasurementType.DOUBLE, + numeric_value=25.5, + numeric_bounds=NumericBounds( + min=24, + max=26, + ), + unit="Celsius", + passed=True, + timestamp=step1.start_time, + ), + update_step=True, + ) + + # Create a measurement using a dict + measurement2 = sift_client.test_results.create_measurement( + { + "test_step_id": step2.id_, + "name": "FW Version", + "measurement_type": TestMeasurementType.STRING, + "string_value": "1.10.3", + "passed": True, + "timestamp": step2.start_time, + }, + update_step=True, + ) + + measurement3 = sift_client.test_results.create_measurement( + TestMeasurementCreate( + test_step_id=step3.id_, + name="Status Check", + measurement_type=TestMeasurementType.BOOLEAN, + boolean_value=True, + passed=True, + timestamp=step3.start_time, + ), + update_step=True, + ) + + measurement4 = sift_client.test_results.create_measurement( + TestMeasurementCreate( + test_step_id=step1_1.id_, + name="Substep 1.1: Substep 1.1.1", + measurement_type=TestMeasurementType.BOOLEAN, + boolean_value=True, + passed=True, + timestamp=step1_1.start_time, + ) + ) + + assert measurement1.id_ is not None + assert measurement2.id_ is not None + assert measurement3.id_ is not None + assert measurement4.id_ is not None + self.test_measurements["measurement1"] = measurement1 + self.test_measurements["measurement2"] = measurement2 + self.test_measurements["measurement3"] = measurement3 + self.test_measurements["measurement4"] = measurement4 + + def test_update_test_measurements(self, sift_client): + measurement2 = self.test_measurements.get("measurement2") + measurement4 = self.test_measurements.get("measurement4") + if not measurement2 or not measurement4: + pytest.skip("Need to create measurements first") + + measurement2 = sift_client.test_results.update_measurement( + measurement2, + update={ + "passed": False, + "string_expected_value": "1.10.4", + }, + update_step=True, + ) + assert measurement2.passed == False + assert measurement2.string_expected_value == "1.10.4" + + # Update the measurement using class function. + measurement4 = measurement4.update( + { + "passed": False, + "numeric_bounds": NumericBounds( + min=10, + max=20, + ), + }, + update_step=True, + ) + assert measurement4.passed == False + assert measurement4.numeric_bounds == NumericBounds( + min=10, + max=20, + ) + # Verify update_step propogated the status. + updated_step = sift_client.test_results.get_step(test_step=measurement4.test_step_id) + assert updated_step.status == TestStatus.FAILED + + self.test_measurements["measurement2"] = measurement2 + self.test_measurements["measurement4"] = measurement4 + + def test_update_test_report(self, sift_client): + test_report = self.test_reports.get("basic_test_report") + if not test_report: + pytest.skip("Need to create a test report first") + new_end_time = test_report.start_time + timedelta(seconds=42) + # Update the report with metadata + updated_report = sift_client.test_results.update( + test_report=test_report, + update=TestReportUpdate( + metadata={ + "test_environment": "production", + "temperature": 22.5, + "humidity": 45.0, + "automated": True, + }, + end_time=new_end_time, + ), + ) + + # Update the report using class function. + updated_report = updated_report.update( + {"status": TestStatus.FAILED}, + ) + assert updated_report.metadata == { + "test_environment": "production", + "temperature": 22.5, + "humidity": 45.0, + "automated": True, + } + assert updated_report.status == TestStatus.FAILED + assert updated_report.end_time == new_end_time + + self.test_reports["basic_test_report"] = updated_report + + def test_archive_and_delete_test_report(self, sift_client): + test_report = self.test_reports.get("basic_test_report") + if not test_report: + pytest.skip("Need to create a test report first") + + # Archive the report + archived_report = sift_client.test_results.archive(test_report=test_report) + assert archived_report.is_archived + + sift_client.test_results.delete(test_report=test_report) + try: + deleted_report = sift_client.test_results.get(test_report_id=test_report.id_) + assert deleted_report is None # Shouldn't reach here so error if we get something. + except aiogrpc.AioRpcError as e: + self.test_reports.pop("basic_test_report") + assert e.code() == grpc.StatusCode.NOT_FOUND + + def test_import_test_report(self, sift_client): + # Import a test report from a file + create_time = datetime.now(timezone.utc) + current_dir = Path(__file__).parent + test_file = Path(current_dir, "test_files", "demo_test_report.xml") + test_report = sift_client.test_results.import_(test_file=test_file) + + # Excercise find_report, custom_filter, and filtering by commonon-proto fields such as created_date + found_report = sift_client.test_results.find( + filter_query=f"test_report_id == '{test_report.id_}' && created_date >= timestamp('{create_time}')" + ) + assert found_report is not None + assert found_report.id_ == test_report.id_ + self.test_reports["imported_test_report"] = found_report + + def test_delete_test_reports(self, sift_client): + for test_report in self.test_reports.values(): + sift_client.test_results.delete(test_report=test_report) diff --git a/python/lib/sift_client/_tests/sift_types/test_results.py b/python/lib/sift_client/_tests/sift_types/test_results.py new file mode 100644 index 000000000..2ae139a7e --- /dev/null +++ b/python/lib/sift_client/_tests/sift_types/test_results.py @@ -0,0 +1,211 @@ +"""Unit tests for test results models using mocks.""" + +from __future__ import annotations + +from datetime import datetime, timedelta, timezone +from unittest.mock import MagicMock + +import pytest + +from sift_client.sift_types.test_report import ( + ErrorInfo, + NumericBounds, + TestMeasurement, + TestMeasurementType, + TestReport, + TestStatus, + TestStep, + TestStepType, +) + + +@pytest.fixture +def mock_test_report(mock_client): + """Create a mock TestReport instance for testing.""" + simulated_time = datetime.now(timezone.utc) + test_report = TestReport( + proto=MagicMock(), + id_="test_report_123", + name="Test Report with Steps and Measurements", + test_system_name="Test System", + test_case="Test Case", + status=TestStatus.PASSED, + start_time=simulated_time, + end_time=simulated_time, + metadata={}, + serial_number="123456", + part_number="123456", + system_operator="test@test.com", + archived_date=None, + is_archived=False, + ) + test_report._apply_client_to_instance(mock_client) + return test_report + + +@pytest.fixture +def mock_test_step(mock_client): + """Create a mock TestStep instance for testing.""" + simulated_time = datetime.now(timezone.utc) + test_step = TestStep( + proto=MagicMock(), + id_="step_123", + test_report_id="test_report_123", + parent_step_id=None, + name="Step 1: Initialization", + description="Error demo", + step_type=TestStepType.ACTION, + step_path="1", + status=TestStatus.FAILED, + start_time=simulated_time, + end_time=simulated_time + timedelta(seconds=11), + error_info=ErrorInfo( + error_code=1, + error_message="Demo error message", + ), + ) + test_step._apply_client_to_instance(mock_client) + return test_step + + +@pytest.fixture +def mock_test_measurement(mock_client): + """Create a mock TestMeasurement instance for testing.""" + simulated_time = datetime.now(timezone.utc) + test_measurement = TestMeasurement( + proto=MagicMock(), + id_="measurement_123", + test_step_id="step_123", + name="Temperature Reading", + measurement_type=TestMeasurementType.DOUBLE, + numeric_value=25.5, + numeric_bounds=NumericBounds(min=24, max=26), + unit="Celsius", + passed=True, + timestamp=simulated_time, + ) + test_measurement._apply_client_to_instance(mock_client) + return test_measurement + + +class TestResultsTest: + """Unit tests for test results models.""" + + def test_update_test_step(self, mock_test_step, mock_client): + """Test updating a test step.""" + # Create updated step mock + updated_step = TestStep( + proto=MagicMock(), + id_="step_123", + test_report_id="test_report_123", + parent_step_id=None, + name="Step 1: Initialization", + description="Error demo w/ updated description", + step_type=TestStepType.ACTION, + step_path="1", + status=TestStatus.FAILED, + start_time=mock_test_step.start_time, + end_time=mock_test_step.end_time, + error_info=mock_test_step.error_info, + ) + updated_step._apply_client_to_instance(mock_client) + + # Configure mock to return updated step + mock_client.test_results = MagicMock() + mock_client.test_results.update_step.return_value = updated_step + + # Update the step + result = mock_test_step.update( + {"description": "Error demo w/ updated description"}, + ) + + # Verify the update method was called + mock_client.test_results.update_step.assert_called_once() + assert result.description == "Error demo w/ updated description" + + def test_update_test_measurement(self, mock_test_measurement, mock_client): + """Test updating a test measurement.""" + updated_measurement = MagicMock() + updated_measurement.passed = False + updated_measurement.numeric_bounds = NumericBounds(min=10, max=20) + mock_client.test_results.update_measurement.return_value = updated_measurement + + with MagicMock() as mock_update: + mock_test_measurement._update = mock_update + # Update the measurement + update = { + "passed": False, + "numeric_bounds": NumericBounds(min=10, max=20), + } + result = mock_test_measurement.update( + update, + update_step=True, + ) + + # Verify the update method was called + mock_client.test_results.update_measurement.assert_called_once_with( + test_measurement=mock_test_measurement, + update=update, + update_step=True, + ) + mock_update.assert_called_once_with(updated_measurement) + assert result is mock_test_measurement + + def test_update_test_report(self, mock_test_report, mock_client): + """Test updating a test report.""" + updated_report = MagicMock() + updated_report.status = TestStatus.FAILED + mock_client.test_results.update.return_value = updated_report + with MagicMock() as mock_update: + mock_test_report._update = mock_update + # Update the report + update = { + "status": TestStatus.FAILED, + } + mock_test_report.update( + update, + ) + + # Verify the update method was called + mock_client.test_results.update.assert_called_once_with( + test_report=mock_test_report, + update=update, + ) + mock_update.assert_called_once_with(updated_report) + + def test_archive_test_report(self, mock_test_report, mock_client): + """Test archiving a test report.""" + # Create archived report mock + archived_report = MagicMock() + archived_report.is_archived = True + mock_client.test_results.archive.return_value = archived_report + with MagicMock() as mock_update: + mock_test_report._update = mock_update + # Archive the report + mock_test_report.archive() + + # Verify the archive method was called + mock_client.test_results.archive.assert_called_once() + mock_update.assert_called_once_with(archived_report) + + def test_numeric_bounds_eq(self): + """Test the equality of NumericBounds.""" + bounds1 = NumericBounds(min=10, max=20) + bounds2 = NumericBounds(min=10, max=20) + bounds3 = NumericBounds(min=10, max=30) + assert bounds1 == bounds2 + assert bounds1 != bounds3 + + def test_report_steps(self, mock_test_report, mock_test_step, mock_client): + """Test the steps property of TestReport.""" + mock_client.test_results.list_steps.return_value = [mock_test_step] + steps = mock_test_report.steps + assert len(steps) == 1 + assert steps[0] == mock_test_step + + def test_step_measurements(self, mock_test_step, mock_test_measurement, mock_client): + """Test the measurements property of TestStep.""" + mock_client.test_results.list_measurements.return_value = [mock_test_measurement] + measurements = mock_test_step.measurements + assert len(measurements) == 1 + assert measurements[0] == mock_test_measurement diff --git a/python/lib/sift_client/client.py b/python/lib/sift_client/client.py index e77ab5e20..9729c2f90 100644 --- a/python/lib/sift_client/client.py +++ b/python/lib/sift_client/client.py @@ -15,6 +15,8 @@ RulesAPIAsync, RunsAPI, RunsAPIAsync, + TestResultsAPI, + TestResultsAPIAsync, ) from sift_client.transport import ( GrpcClient, @@ -86,6 +88,9 @@ class SiftClient( runs: RunsAPI """Instance of the Runs API for making synchronous requests.""" + test_results: TestResultsAPI + """Instance of the Test Results API for making synchronous requests.""" + async_: AsyncAPIs """Accessor for the asynchronous APIs. All asynchronous APIs are available as attributes on this accessor.""" @@ -129,7 +134,7 @@ def __init__( self.channels = ChannelsAPI(self) self.rules = RulesAPI(self) self.runs = RunsAPI(self) - + self.test_results = TestResultsAPI(self) # Accessor for the asynchronous APIs self.async_ = AsyncAPIs( ping=PingAPIAsync(self), @@ -139,6 +144,7 @@ def __init__( ingestion=IngestionAPIAsync(self), rules=RulesAPIAsync(self), runs=RunsAPIAsync(self), + test_results=TestResultsAPIAsync(self), ) @property diff --git a/python/lib/sift_client/resources/__init__.py b/python/lib/sift_client/resources/__init__.py index 5997acb02..a9498a330 100644 --- a/python/lib/sift_client/resources/__init__.py +++ b/python/lib/sift_client/resources/__init__.py @@ -5,6 +5,9 @@ from sift_client.resources.ping import PingAPIAsync from sift_client.resources.rules import RulesAPIAsync from sift_client.resources.runs import RunsAPIAsync +from sift_client.resources.test_results import TestResultsAPIAsync + +# ruff: noqa All imports needs to be imported before sync_stubs to avoid circular import from sift_client.resources.sync_stubs import ( AssetsAPI, CalculatedChannelsAPI, @@ -12,6 +15,7 @@ PingAPI, RulesAPI, RunsAPI, + TestResultsAPI, ) __all__ = [ @@ -28,4 +32,6 @@ "RulesAPIAsync", "RunsAPI", "RunsAPIAsync", + "TestResultsAPI", + "TestResultsAPIAsync", ] diff --git a/python/lib/sift_client/resources/_base.py b/python/lib/sift_client/resources/_base.py index a46ea0fa7..8ab4ee6cf 100644 --- a/python/lib/sift_client/resources/_base.py +++ b/python/lib/sift_client/resources/_base.py @@ -90,8 +90,26 @@ def _build_time_cel_filters( raise NotImplementedError return filter_parts + def _build_metadata_cel_filters( + self, metadata: list[Any] | dict[str, Any] | None = None + ) -> list[str]: + filter_parts = [] + if metadata: + if isinstance(metadata, list): + raise NotImplementedError + if isinstance(metadata, dict): + for key, value in metadata.items(): + cast_value = value + if isinstance(value, str): + cast_value = f"'{value}'" + elif isinstance(value, (int, float)): + cast_value = f"double({value})" + filter_parts.append(cel.equals(f"metadata[{key}]", cast_value)) + return filter_parts + def _build_tags_metadata_cel_filters( self, + *, tags: list[Any] | list[str] | None = None, metadata: list[Any] | None = None, ) -> list[str]: @@ -102,11 +120,12 @@ def _build_tags_metadata_cel_filters( else: raise NotImplementedError if metadata: - raise NotImplementedError + filter_parts.extend(self._build_metadata_cel_filters(metadata)) return filter_parts def _build_common_cel_filters( self, + *, description_contains: str | None = None, include_archived: bool | None = None, filter_query: str | None = None, diff --git a/python/lib/sift_client/resources/sync_stubs/__init__.py b/python/lib/sift_client/resources/sync_stubs/__init__.py index 7246389a4..440a9de21 100644 --- a/python/lib/sift_client/resources/sync_stubs/__init__.py +++ b/python/lib/sift_client/resources/sync_stubs/__init__.py @@ -10,6 +10,7 @@ PingAPIAsync, RulesAPIAsync, RunsAPIAsync, + TestResultsAPIAsync, ) PingAPI = generate_sync_api(PingAPIAsync, "PingAPI") @@ -18,5 +19,6 @@ ChannelsAPI = generate_sync_api(ChannelsAPIAsync, "ChannelsAPI") RulesAPI = generate_sync_api(RulesAPIAsync, "RulesAPI") RunsAPI = generate_sync_api(RunsAPIAsync, "RunsAPI") +TestResultsAPI = generate_sync_api(TestResultsAPIAsync, "TestResultsAPI") -__all__ = ["AssetsAPI", "CalculatedChannelsAPI", "PingAPI", "RunsAPI"] +__all__ = ["AssetsAPI", "CalculatedChannelsAPI", "PingAPI", "RunsAPI", "TestResultsAPI"] diff --git a/python/lib/sift_client/resources/sync_stubs/__init__.pyi b/python/lib/sift_client/resources/sync_stubs/__init__.pyi index 85c49bad2..109517386 100644 --- a/python/lib/sift_client/resources/sync_stubs/__init__.pyi +++ b/python/lib/sift_client/resources/sync_stubs/__init__.pyi @@ -4,6 +4,7 @@ from __future__ import annotations import re from datetime import datetime, timedelta +from pathlib import Path from typing import Any import pandas as pd @@ -19,6 +20,20 @@ from sift_client.sift_types.calculated_channel import ( from sift_client.sift_types.channel import Channel from sift_client.sift_types.rule import Rule, RuleCreate, RuleUpdate from sift_client.sift_types.run import Run, RunCreate, RunUpdate +from sift_client.sift_types.test_report import ( + TestMeasurement, + TestMeasurementCreate, + TestMeasurementType, + TestMeasurementUpdate, + TestReport, + TestReportCreate, + TestReportUpdate, + TestStatus, + TestStep, + TestStepCreate, + TestStepType, + TestStepUpdate, +) class AssetsAPI: """Sync counterpart to `AssetsAPIAsync`. @@ -809,3 +824,317 @@ class RunsAPI: The updated Run. """ ... + +class TestResultsAPI: + """Sync counterpart to `TestResultsAPIAsync`. + + High-level API for interacting with test reports, steps, and measurements. + """ + + def __init__(self, sift_client: SiftClient): + """Initialize the TestResultsAPI. + + Args: + sift_client: The Sift client to use. + """ + ... + + def _run(self, coro): ... + def archive(self, *, test_report: str | TestReport) -> TestReport: + """Archive a test report. + + Args: + test_report: The TestReport or test report ID to archive. + """ + ... + + def create(self, test_report: TestReportCreate | dict) -> TestReport: + """Create a new test report. + + Args: + test_report: The test report to create (can be TestReport or TestReportCreate). + + Returns: + The created TestReport. + """ + ... + + def create_measurement( + self, test_measurement: TestMeasurementCreate | dict, update_step: bool = False + ) -> TestMeasurement: + """Create a new test measurement. + + Args: + test_measurement: The test measurement to create (can be TestMeasurement or TestMeasurementCreate). + update_step: Whether to update the step to failed if the measurement is being created is failed. + + Returns: + The created TestMeasurement. + """ + ... + + def create_measurements( + self, test_measurements: list[TestMeasurementCreate] + ) -> tuple[int, list[str]]: + """Create multiple test measurements in a single request. + + Args: + test_measurements: The test measurements to create. + + Returns: + A tuple of (measurements_created_count, measurement_ids). + """ + ... + + def create_step(self, test_step: TestStepCreate | dict) -> TestStep: + """Create a new test step. + + Args: + test_step: The test step to create (can be TestStep or TestStepCreate). + + Returns: + The created TestStep. + """ + ... + + def delete(self, *, test_report: str | TestReport) -> None: + """Delete a test report. + + Args: + test_report: The TestReport or test report ID to delete. + """ + ... + + def delete_measurement(self, *, test_measurement: str | TestMeasurement) -> None: + """Delete a test measurement. + + Args: + test_measurement: The TestMeasurement or measurement ID to delete. + """ + ... + + def delete_step(self, *, test_step: str | TestStep) -> None: + """Delete a test step. + + Args: + test_step: The TestStep or test step ID to delete. + """ + ... + + def find(self, **kwargs) -> TestReport | None: + """Find a single test report matching the given query. Takes the same arguments as `list_`. If more than one test report is found, + raises an error. + + Args: + **kwargs: Keyword arguments to pass to `list_`. + + Returns: + The TestReport found or None. + """ + ... + + def get(self, *, test_report_id: str) -> TestReport: + """Get a TestReport. + + Args: + test_report_id: The ID of the test report. + + Returns: + The TestReport. + """ + ... + + def get_step(self, test_step: str | TestStep) -> TestStep: + """Get a TestStep. + + Args: + test_step: The TestStep or test step ID to get. + """ + ... + + def import_(self, test_file: str | Path) -> TestReport: + """Import a test report from an already-uploaded file. + + Args: + test_file: The path to the test report file to import. We currently only support XML files exported from NI TestStand. + + Returns: + The imported TestReport. + """ + ... + + def list_( + self, + *, + name: str | None = None, + name_contains: str | None = None, + name_regex: str | re.Pattern | None = None, + test_report_ids: list[str] | None = None, + status: TestStatus | None = None, + test_system_name: str | None = None, + test_case: str | None = None, + serial_number: str | None = None, + part_number: str | None = None, + system_operator: str | None = None, + created_by: str | None = None, + modified_by: str | None = None, + created_after: datetime | None = None, + created_before: datetime | None = None, + modified_after: datetime | None = None, + modified_before: datetime | None = None, + metadata: list[Any] | dict[str, Any] | None = None, + include_archived: bool = False, + filter_query: str | None = None, + order_by: str | None = None, + limit: int | None = None, + ) -> list[TestReport]: + """List test reports with optional filtering. + + Args: + name: Exact name of the test report. + name_contains: Partial name of the test report. + name_regex: Regular expression string to filter test reports by name. + test_report_ids: Test report IDs to filter by. + status: Status to filter by (TestStatus enum). + test_system_name: Test system name to filter by. + test_case: Test case to filter by. + serial_number: Serial number to filter by. + part_number: Part number to filter by. + system_operator: System operator to filter by. + created_by: User ID who created the test report. + modified_by: User ID who last modified the test report. + created_after: Filter test reports created after this datetime. + created_before: Filter test reports created before this datetime. + modified_after: Filter test reports modified after this datetime. + modified_before: Filter test reports modified before this datetime. + metadata: Filter test reports by metadata criteria. + include_archived: Whether to include only archived or non-archived reports. + filter_query: Custom filter to apply to the test reports. + order_by: How to order the retrieved test reports. If used, this will override the other filters. + limit: How many test reports to retrieve. If None, retrieves all matches. + + Returns: + A list of TestReports that matches the filter. + """ + ... + + def list_measurements( + self, + *, + measurements: list[str] | list[TestMeasurement] | None = None, + test_steps: list[str] | list[TestStep] | None = None, + test_reports: list[str] | list[TestReport] | None = None, + name: str | None = None, + name_contains: str | None = None, + name_regex: str | re.Pattern | None = None, + measurement_type: TestMeasurementType | None = None, + passed: bool | None = None, + filter_query: str | None = None, + order_by: str | None = None, + limit: int | None = None, + ) -> list[TestMeasurement]: + """List test measurements with optional filtering. + + Args: + measurements: Measurements to filter by. + test_steps: Test steps to filter by. + test_reports: Test reports to filter by. + test_report_id: Test report ID to filter by. + name: Exact name of the test measurement. + name_contains: Partial name of the test measurement. + name_regex: Regular expression string to filter test measurements by name. + measurement_type: Measurement type to filter by (TestMeasurementType enum). + passed: Whether the measurement passed. + filter_query: Explicit CEL query to filter test measurements. + order_by: How to order the retrieved test measurements. + limit: How many test measurements to retrieve. If None, retrieves all matches. + + Returns: + A list of TestMeasurements that matches the filter. + """ + ... + + def list_steps( + self, + *, + test_steps: list[str] | list[TestStep] | None = None, + test_reports: list[str] | list[TestReport] | None = None, + parent_steps: list[str] | list[TestStep] | None = None, + name: str | None = None, + name_contains: str | None = None, + name_regex: str | re.Pattern | None = None, + status: TestStatus | None = None, + step_type: TestStepType | None = None, + filter_query: str | None = None, + order_by: str | None = None, + limit: int | None = None, + ) -> list[TestStep]: + """List test steps with optional filtering. + + Args: + test_steps: Test steps to filter by. + test_reports: Test reports to filter by. + parent_steps: Parent steps to filter by. + name: Exact name of the test step. + name_contains: Partial name of the test step. + name_regex: Regular expression string to filter test steps by name. + status: Status to filter by (TestStatus enum). + step_type: Step type to filter by (TestStepType enum). + filter_query: Explicit CEL query to filter test steps. + order_by: How to order the retrieved test steps. + limit: How many test steps to retrieve. If None, retrieves all matches. + + Returns: + A list of TestSteps that matches the filter. + """ + ... + + def unarchive(self, *, test_report: str | TestReport) -> TestReport: + """Unarchive a test report. + + Args: + test_report: The TestReport or test report ID to unarchive. + """ + ... + + def update(self, test_report: str | TestReport, update: TestReportUpdate | dict) -> TestReport: + """Update a TestReport. + + Args: + test_report: The TestReport or test report ID to update. + update: Updates to apply to the TestReport. + + Returns: + The updated TestReport. + """ + ... + + def update_measurement( + self, + test_measurement: TestMeasurement, + update: TestMeasurementUpdate | dict, + update_step: bool = False, + ) -> TestMeasurement: + """Update a TestMeasurement. + + Args: + test_measurement: The TestMeasurement or measurement ID to update. + update: Updates to apply to the TestMeasurement. + update_step: Whether to update the step to failed if the measurement is being updated to failed. + + Returns: + The updated TestMeasurement. + """ + ... + + def update_step(self, test_step: str | TestStep, update: TestStepUpdate | dict) -> TestStep: + """Update a TestStep. + + Args: + test_step: The TestStep or test step ID to update. + update: Updates to apply to the TestStep. + + Returns: + The updated TestStep. + """ + ... diff --git a/python/lib/sift_client/resources/test_results.py b/python/lib/sift_client/resources/test_results.py new file mode 100644 index 000000000..9b978bd56 --- /dev/null +++ b/python/lib/sift_client/resources/test_results.py @@ -0,0 +1,570 @@ +from __future__ import annotations + +import uuid +from datetime import datetime +from typing import TYPE_CHECKING, Any + +from sift_client._internal.low_level_wrappers.test_results import TestResultsLowLevelClient +from sift_client._internal.low_level_wrappers.upload import UploadLowLevelClient +from sift_client.resources._base import ResourceBase +from sift_client.sift_types.test_report import ( + TestMeasurement, + TestMeasurementCreate, + TestMeasurementType, + TestMeasurementUpdate, + TestReport, + TestReportCreate, + TestReportUpdate, + TestStatus, + TestStep, + TestStepCreate, + TestStepType, + TestStepUpdate, +) +from sift_client.util.cel_utils import and_, equals, in_ + +if TYPE_CHECKING: + import re + from datetime import datetime + from pathlib import Path + + from sift_client.client import SiftClient + + +class TestResultsAPIAsync(ResourceBase): + """High-level API for interacting with test reports, steps, and measurements.""" + + def __init__(self, sift_client: SiftClient): + """Initialize the TestResultsAPI. + + Args: + sift_client: The Sift client to use. + """ + super().__init__(sift_client) + self._low_level_client = TestResultsLowLevelClient(grpc_client=self.client.grpc_client) + self._upload_client = UploadLowLevelClient(rest_client=self.client.rest_client) + + async def import_(self, test_file: str | Path) -> TestReport: + """Import a test report from an already-uploaded file. + + Args: + test_file: The path to the test report file to import. We currently only support XML files exported from NI TestStand. + + Returns: + The imported TestReport. + """ + # Generate a temporary UUID for the test report. The report service will override this with the created report ID. + temp_uuid = str(uuid.uuid4()) + remote_file_id = await self._upload_client.upload_attachment( + path=test_file, + entity_id=temp_uuid, + entity_type="test_reports", + ) + test_report = await self._low_level_client.import_test_report(remote_file_id=remote_file_id) + return self._apply_client_to_instance(test_report) + + async def create( + self, + test_report: TestReportCreate | dict, + ) -> TestReport: + """Create a new test report. + + Args: + test_report: The test report to create (can be TestReport or TestReportCreate). + + Returns: + The created TestReport. + """ + if isinstance(test_report, dict): + test_report = TestReportCreate.model_validate(test_report) + created_report = await self._low_level_client.create_test_report( + test_report=test_report, + ) + return self._apply_client_to_instance(created_report) + + async def get(self, *, test_report_id: str) -> TestReport: + """Get a TestReport. + + Args: + test_report_id: The ID of the test report. + + Returns: + The TestReport. + """ + test_report = await self._low_level_client.get_test_report(test_report_id=test_report_id) + return self._apply_client_to_instance(test_report) + + async def list_( + self, + *, + name: str | None = None, + name_contains: str | None = None, + name_regex: str | re.Pattern | None = None, + test_report_ids: list[str] | None = None, + status: TestStatus | None = None, + test_system_name: str | None = None, + test_case: str | None = None, + serial_number: str | None = None, + part_number: str | None = None, + system_operator: str | None = None, + created_by: str | None = None, + modified_by: str | None = None, + created_after: datetime | None = None, + created_before: datetime | None = None, + modified_after: datetime | None = None, + modified_before: datetime | None = None, + metadata: list[Any] | dict[str, Any] | None = None, + include_archived: bool = False, + filter_query: str | None = None, + order_by: str | None = None, + limit: int | None = None, + ) -> list[TestReport]: + """List test reports with optional filtering. + + Args: + name: Exact name of the test report. + name_contains: Partial name of the test report. + name_regex: Regular expression string to filter test reports by name. + test_report_ids: Test report IDs to filter by. + status: Status to filter by (TestStatus enum). + test_system_name: Test system name to filter by. + test_case: Test case to filter by. + serial_number: Serial number to filter by. + part_number: Part number to filter by. + system_operator: System operator to filter by. + created_by: User ID who created the test report. + modified_by: User ID who last modified the test report. + created_after: Filter test reports created after this datetime. + created_before: Filter test reports created before this datetime. + modified_after: Filter test reports modified after this datetime. + modified_before: Filter test reports modified before this datetime. + metadata: Filter test reports by metadata criteria. + include_archived: Whether to include only archived or non-archived reports. + filter_query: Custom filter to apply to the test reports. + order_by: How to order the retrieved test reports. If used, this will override the other filters. + limit: How many test reports to retrieve. If None, retrieves all matches. + + Returns: + A list of TestReports that matches the filter. + """ + # Build CEL filter + filter_parts = [ + *self._build_name_cel_filters( + name=name, name_contains=name_contains, name_regex=name_regex + ), + *self._build_time_cel_filters( + created_after=created_after, + created_before=created_before, + modified_after=modified_after, + modified_before=modified_before, + created_by=created_by, + modified_by=modified_by, + ), + *self._build_metadata_cel_filters(metadata=metadata), + *self._build_common_cel_filters( + include_archived=include_archived, + filter_query=filter_query, + ), + ] + + if test_report_ids: + filter_parts.append(in_("test_report_id", test_report_ids)) + + if status is not None: + filter_parts.append(equals("status", status)) + + if test_system_name: + filter_parts.append(equals("test_system_name", test_system_name)) + + if test_case: + filter_parts.append(equals("test_case", test_case)) + + if serial_number: + filter_parts.append(equals("serial_number", serial_number)) + + if part_number: + filter_parts.append(equals("part_number", part_number)) + + if system_operator: + filter_parts.append(equals("system_operator", system_operator)) + + query_filter = and_(*filter_parts) + + test_reports = await self._low_level_client.list_all_test_reports( + query_filter=query_filter, + order_by=order_by, + max_results=limit, + ) + return self._apply_client_to_instances(test_reports) + + async def find(self, **kwargs) -> TestReport | None: + """Find a single test report matching the given query. Takes the same arguments as `list_`. If more than one test report is found, + raises an error. + + Args: + **kwargs: Keyword arguments to pass to `list_`. + + Returns: + The TestReport found or None. + """ + test_reports = await self.list_(**kwargs) + if len(test_reports) > 1: + error_msg = ( + f"Multiple test reports found for query ({', '.join(report.id_ or 'no id' for report in test_reports)})" + if len(test_reports) < 10 + else f"Multiple ({len(test_reports)} test reports found for query)" + ) + raise ValueError(error_msg) + elif len(test_reports) == 1: + return test_reports[0] + return None + + async def update( + self, test_report: str | TestReport, update: TestReportUpdate | dict + ) -> TestReport: + """Update a TestReport. + + Args: + test_report: The TestReport or test report ID to update. + update: Updates to apply to the TestReport. + + Returns: + The updated TestReport. + """ + test_report_id = ( + test_report._id_or_error if isinstance(test_report, TestReport) else test_report + ) + if isinstance(update, dict): + update = TestReportUpdate.model_validate(update) + + update.resource_id = test_report_id + updated_test_report = await self._low_level_client.update_test_report(update) + return self._apply_client_to_instance(updated_test_report) + + async def archive(self, *, test_report: str | TestReport) -> TestReport: + """Archive a test report. + + Args: + test_report: The TestReport or test report ID to archive. + """ + return await self.update(test_report=test_report, update={"is_archived": True}) + + async def unarchive(self, *, test_report: str | TestReport) -> TestReport: + """Unarchive a test report. + + Args: + test_report: The TestReport or test report ID to unarchive. + """ + return await self.update(test_report=test_report, update={"is_archived": False}) + + async def delete(self, *, test_report: str | TestReport) -> None: + """Delete a test report. + + Args: + test_report: The TestReport or test report ID to delete. + """ + test_report_id = test_report.id_ if isinstance(test_report, TestReport) else test_report + if not isinstance(test_report_id, str): + raise TypeError(f"test_report_id must be a string not {type(test_report_id)}") + await self._low_level_client.delete_test_report(test_report_id=test_report_id) + + async def create_step(self, test_step: TestStepCreate | dict) -> TestStep: + """Create a new test step. + + Args: + test_step: The test step to create (can be TestStep or TestStepCreate). + + Returns: + The created TestStep. + """ + if isinstance(test_step, dict): + test_step = TestStepCreate.model_validate(test_step) + test_step_result = await self._low_level_client.create_test_step(test_step) + return self._apply_client_to_instance(test_step_result) + + async def list_steps( + self, + *, + test_steps: list[str] | list[TestStep] | None = None, + test_reports: list[str] | list[TestReport] | None = None, + parent_steps: list[str] | list[TestStep] | None = None, + name: str | None = None, + name_contains: str | None = None, + name_regex: str | re.Pattern | None = None, + status: TestStatus | None = None, + step_type: TestStepType | None = None, + filter_query: str | None = None, + order_by: str | None = None, + limit: int | None = None, + ) -> list[TestStep]: + """List test steps with optional filtering. + + Args: + test_steps: Test steps to filter by. + test_reports: Test reports to filter by. + parent_steps: Parent steps to filter by. + name: Exact name of the test step. + name_contains: Partial name of the test step. + name_regex: Regular expression string to filter test steps by name. + status: Status to filter by (TestStatus enum). + step_type: Step type to filter by (TestStepType enum). + filter_query: Explicit CEL query to filter test steps. + order_by: How to order the retrieved test steps. + limit: How many test steps to retrieve. If None, retrieves all matches. + + Returns: + A list of TestSteps that matches the filter. + """ + # Build CEL filter + filter_parts = [ + *self._build_name_cel_filters( + name=name, name_contains=name_contains, name_regex=name_regex + ), + *self._build_common_cel_filters( + filter_query=filter_query, + ), + ] + + if test_steps: + test_step_ids: list[str] = [ + test_step.id_ or "" if isinstance(test_step, TestStep) else test_step + for test_step in test_steps + ] + filter_parts.append(in_("test_step_id", test_step_ids)) + + if test_reports: + test_report_ids: list[str] = [ + test_report.id_ or "" if isinstance(test_report, TestReport) else test_report + for test_report in test_reports + ] + filter_parts.append(in_("test_report_id", test_report_ids)) + + if parent_steps: + parent_step_ids: list[str] = [ + parent_step.id_ or "" if isinstance(parent_step, TestStep) else parent_step + for parent_step in parent_steps + ] + filter_parts.append(in_("parent_step_id", parent_step_ids)) + + if status is not None: + filter_parts.append(equals("status", status)) + + if step_type is not None: + filter_parts.append(equals("step_type", step_type)) + + query_filter = and_(*filter_parts) + + test_steps = await self._low_level_client.list_all_test_steps( + query_filter=query_filter, + order_by=order_by, + max_results=limit, + ) + return self._apply_client_to_instances(test_steps) + + async def get_step(self, test_step: str | TestStep) -> TestStep: + """Get a TestStep. + + Args: + test_step: The TestStep or test step ID to get. + """ + step_id = test_step._id_or_error if isinstance(test_step, TestStep) else test_step + test_steps = await self.list_steps( + test_steps=[step_id], + limit=1, + ) + if not test_steps: + raise ValueError(f"TestStep with ID {step_id} not found") + test_step = test_steps[0] + return self._apply_client_to_instance(test_step) + + async def update_step( + self, test_step: str | TestStep, update: TestStepUpdate | dict + ) -> TestStep: + """Update a TestStep. + + Args: + test_step: The TestStep or test step ID to update. + update: Updates to apply to the TestStep. + + Returns: + The updated TestStep. + """ + test_step_id = test_step._id_or_error if isinstance(test_step, TestStep) else test_step + + if isinstance(update, dict): + update = TestStepUpdate.model_validate(update) + + update.resource_id = test_step_id + updated_test_step = await self._low_level_client.update_test_step(update) + return self._apply_client_to_instance(updated_test_step) + + async def delete_step(self, *, test_step: str | TestStep) -> None: + """Delete a test step. + + Args: + test_step: The TestStep or test step ID to delete. + """ + test_step_id = test_step._id_or_error if isinstance(test_step, TestStep) else test_step + if not isinstance(test_step_id, str): + raise TypeError(f"test_step_id must be a string not {type(test_step_id)}") + await self._low_level_client.delete_test_step(test_step_id=test_step_id) + + async def create_measurement( + self, test_measurement: TestMeasurementCreate | dict, update_step: bool = False + ) -> TestMeasurement: + """Create a new test measurement. + + Args: + test_measurement: The test measurement to create (can be TestMeasurement or TestMeasurementCreate). + update_step: Whether to update the step to failed if the measurement is being created is failed. + + Returns: + The created TestMeasurement. + """ + if isinstance(test_measurement, dict): + test_measurement = TestMeasurementCreate.model_validate(test_measurement) + test_measurement_result = await self._low_level_client.create_test_measurement( + test_measurement + ) + measurement = self._apply_client_to_instance(test_measurement_result) + if update_step: + step = await self.get_step(test_step=test_measurement_result.test_step_id) + if step.status == TestStatus.PASSED and not measurement.passed: + await self.update_step(test_step=step, update={"status": TestStatus.FAILED}) + return measurement + + async def create_measurements( + self, test_measurements: list[TestMeasurementCreate] + ) -> tuple[int, list[str]]: + """Create multiple test measurements in a single request. + + Args: + test_measurements: The test measurements to create. + + Returns: + A tuple of (measurements_created_count, measurement_ids). + """ + return await self._low_level_client.create_test_measurements(test_measurements) + + async def list_measurements( + self, + *, + measurements: list[str] | list[TestMeasurement] | None = None, + test_steps: list[str] | list[TestStep] | None = None, + test_reports: list[str] | list[TestReport] | None = None, + name: str | None = None, + name_contains: str | None = None, + name_regex: str | re.Pattern | None = None, + measurement_type: TestMeasurementType | None = None, + passed: bool | None = None, + filter_query: str | None = None, + order_by: str | None = None, + limit: int | None = None, + ) -> list[TestMeasurement]: + """List test measurements with optional filtering. + + Args: + measurements: Measurements to filter by. + test_steps: Test steps to filter by. + test_reports: Test reports to filter by. + name: Exact name of the test measurement. + name_contains: Partial name of the test measurement. + name_regex: Regular expression string to filter test measurements by name. + measurement_type: Measurement type to filter by (TestMeasurementType enum). + passed: Whether the measurement passed. + filter_query: Explicit CEL query to filter test measurements. + order_by: How to order the retrieved test measurements. + limit: How many test measurements to retrieve. If None, retrieves all matches. + + Returns: + A list of TestMeasurements that matches the filter. + """ + # Build CEL filter + filter_parts = [ + *self._build_name_cel_filters( + name=name, name_contains=name_contains, name_regex=name_regex + ), + *self._build_common_cel_filters( + filter_query=filter_query, + ), + ] + + if measurements: + measurement_ids = [ + measurement.id_ or "" if isinstance(measurement, TestMeasurement) else measurement + for measurement in measurements + ] + filter_parts.append(in_("measurement_id", measurement_ids)) + + if test_steps: + test_step_ids: list[str] = [ + test_step.id_ or "" if isinstance(test_step, TestStep) else test_step + for test_step in test_steps + ] + filter_parts.append(in_("test_step_id", test_step_ids)) + + if test_reports: + test_report_ids: list[str] = [ + test_report.id_ or "" if isinstance(test_report, TestReport) else test_report + for test_report in test_reports + ] + filter_parts.append(in_("test_report_id", test_report_ids)) + + if measurement_type is not None: + filter_parts.append(equals("measurement_type", measurement_type)) + + if passed is not None: + filter_parts.append(equals("passed", passed)) + + query_filter = and_(*filter_parts) + + test_measurements = await self._low_level_client.list_all_test_measurements( + query_filter=query_filter, + order_by=order_by, + max_results=limit, + ) + return self._apply_client_to_instances(test_measurements) + + async def update_measurement( + self, + test_measurement: TestMeasurement, + update: TestMeasurementUpdate | dict, + update_step: bool = False, + ) -> TestMeasurement: + """Update a TestMeasurement. + + Args: + test_measurement: The TestMeasurement or measurement ID to update. + update: Updates to apply to the TestMeasurement. + update_step: Whether to update the step to failed if the measurement is being updated to failed. + + Returns: + The updated TestMeasurement. + """ + if isinstance(update, dict): + update = TestMeasurementUpdate.model_validate(update) + + update.resource_id = test_measurement.id_ + updated_test_measurement = await self._low_level_client.update_test_measurement(update) + updated_test_measurement = self._apply_client_to_instance(updated_test_measurement) + # If measurement is being updated to failed, see if step is passed and update it to failed if so + if update_step and update.passed is not None and not update.passed: + step = await self.get_step(test_step=updated_test_measurement.test_step_id) + if step.status == TestStatus.PASSED: + await self.update_step(test_step=step, update={"status": TestStatus.FAILED}) + return updated_test_measurement + + async def delete_measurement(self, *, test_measurement: str | TestMeasurement) -> None: + """Delete a test measurement. + + Args: + test_measurement: The TestMeasurement or measurement ID to delete. + """ + measurement_id = ( + test_measurement.id_ or "" + if isinstance(test_measurement, TestMeasurement) + else test_measurement + ) + if not isinstance(measurement_id, str): + raise TypeError(f"measurement_id must be a string not {type(measurement_id)}") + await self._low_level_client.delete_test_measurement(measurement_id=measurement_id) diff --git a/python/lib/sift_client/sift_types/__init__.py b/python/lib/sift_client/sift_types/__init__.py index 1af4eb80d..ed0a18ed2 100644 --- a/python/lib/sift_client/sift_types/__init__.py +++ b/python/lib/sift_client/sift_types/__init__.py @@ -21,6 +21,18 @@ RuleVersion, ) from sift_client.sift_types.run import Run, RunCreate, RunUpdate +from sift_client.sift_types.test_report import ( + TestMeasurement, + TestMeasurementCreate, + TestMeasurementType, + TestReport, + TestReportCreate, + TestReportUpdate, + TestStatus, + TestStep, + TestStepCreate, + TestStepType, +) __all__ = [ "Asset", @@ -45,4 +57,14 @@ "Run", "RunCreate", "RunUpdate", + "TestMeasurement", + "TestMeasurementCreate", + "TestMeasurementType", + "TestReport", + "TestReportCreate", + "TestReportUpdate", + "TestStatus", + "TestStep", + "TestStepCreate", + "TestStepType", ] diff --git a/python/lib/sift_client/sift_types/_base.py b/python/lib/sift_client/sift_types/_base.py index faa3382bb..4cb0dc964 100644 --- a/python/lib/sift_client/sift_types/_base.py +++ b/python/lib/sift_client/sift_types/_base.py @@ -2,6 +2,7 @@ from abc import ABC, abstractmethod from datetime import datetime +from enum import Enum from typing import ( TYPE_CHECKING, Any, @@ -186,6 +187,8 @@ def _build_proto_and_paths( paths.append(path) else: try: + if isinstance(value, Enum): + value = value.value setattr(proto_msg, field_name, value) paths.append(path) except (TypeError, AttributeError) as e: diff --git a/python/lib/sift_client/sift_types/test_report.py b/python/lib/sift_client/sift_types/test_report.py new file mode 100644 index 000000000..7621bdf37 --- /dev/null +++ b/python/lib/sift_client/sift_types/test_report.py @@ -0,0 +1,593 @@ +from __future__ import annotations + +from datetime import datetime, timezone +from enum import Enum +from typing import TYPE_CHECKING, ClassVar + +from sift.test_reports.v1.test_reports_pb2 import ( + ErrorInfo as ErrorInfoProto, +) +from sift.test_reports.v1.test_reports_pb2 import ( + NumericBounds as NumericBoundsProto, +) +from sift.test_reports.v1.test_reports_pb2 import ( + StringBounds as StringBoundsProto, +) +from sift.test_reports.v1.test_reports_pb2 import ( + TestMeasurement as TestMeasurementProto, +) +from sift.test_reports.v1.test_reports_pb2 import ( + TestReport as TestReportProto, +) +from sift.test_reports.v1.test_reports_pb2 import ( + TestStep as TestStepProto, +) + +from sift_client.sift_types._base import ( + BaseType, + MappingHelper, + ModelCreate, + ModelCreateUpdateBase, + ModelUpdate, +) +from sift_client.util.metadata import metadata_dict_to_proto, metadata_proto_to_dict + +if TYPE_CHECKING: + from sift_client.client import SiftClient + + +class TestStatus(Enum): + """TestStatus enum.""" + + UNSPECIFIED = 0 + DRAFT = 1 + PASSED = 2 + FAILED = 3 + ABORTED = 4 + ERROR = 5 + IN_PROGRESS = 6 + SKIPPED = 7 + + +class TestStepType(Enum): + """TestStepType enum.""" + + UNSPECIFIED = 0 + SEQUENCE = 1 + GROUP = 2 + ACTION = 3 + FLOW_CONTROL = 4 + + +class TestMeasurementType(Enum): + """TestMeasurementType enum.""" + + UNSPECIFIED = 0 + DOUBLE = 1 + STRING = 3 + BOOLEAN = 4 + LIMIT = 5 + + +class TestReportBase(ModelCreateUpdateBase): + """Base model for TestReportUpdate and TestReportCreate. Contains shared fields for all test reports. Update and create models differ mostly in what fields are required vs optional.""" + + status: TestStatus | None = None + metadata: dict[str, str | float | bool] | None = None + serial_number: str | None = None + part_number: str | None = None + system_operator: str | None = None + + _to_proto_helpers: ClassVar[dict[str, MappingHelper]] = { + "metadata": MappingHelper( + proto_attr_path="metadata", update_field="metadata", converter=metadata_dict_to_proto + ), + } + + def _get_proto_class(self) -> type[TestReportProto]: + return TestReportProto + + +class TestReportUpdate(TestReportBase, ModelUpdate[TestReportProto]): + """Update model for TestReport.""" + + name: str | None = None + test_system_name: str | None = None + test_case: str | None = None + start_time: datetime | None = None + end_time: datetime | None = None + + is_archived: bool | None = None + + def _add_resource_id_to_proto(self, proto_msg: TestReportProto): + if self._resource_id is None: + raise ValueError("Resource ID must be set before adding to proto") + proto_msg.test_report_id = self._resource_id + + +class TestReportCreate(TestReportBase, ModelCreate[TestReportProto]): + """Create model for TestReport.""" + + name: str + test_system_name: str + test_case: str + start_time: datetime + end_time: datetime + + def to_proto(self) -> TestReportProto: + """Convert to protobuf message with custom logic.""" + proto = TestReportProto( + status=self.status.value, # type: ignore + name=self.name, + test_system_name=self.test_system_name, + test_case=self.test_case, + metadata=metadata_dict_to_proto(self.metadata) if self.metadata else {}, + is_archived=False, + ) + + proto.start_time.FromDatetime(self.start_time) + proto.end_time.FromDatetime(self.end_time) + + if self.serial_number: + proto.serial_number = self.serial_number + + if self.part_number: + proto.part_number = self.part_number + + if self.system_operator: + proto.system_operator = self.system_operator + + return proto + + +class ErrorInfo(BaseType[ErrorInfoProto, "ErrorInfo"]): + """ErrorInfo model representing error information in a test step.""" + + error_code: int + error_message: str + + @classmethod + def _from_proto(cls, proto: ErrorInfoProto, sift_client: SiftClient | None = None) -> ErrorInfo: + return cls( + proto=proto, + id_=None, + error_code=proto.error_code, + error_message=proto.error_message, + _client=sift_client, + ) + + def _to_proto(self) -> ErrorInfoProto: + """Convert to protobuf message.""" + return ErrorInfoProto( + error_code=self.error_code, + error_message=self.error_message, + ) + + +class TestStepBase(ModelCreateUpdateBase): + """Base model for TestStepUpdate and TestStepCreate. Contains shared fields for all test steps. Update and create models differ mostly in what fields are required vs optional.""" + + parent_step_id: str | None = None + description: str | None = None + error_info: ErrorInfo | None = None + + def _get_proto_class(self) -> type[TestStepProto]: + return TestStepProto + + +class TestStepUpdate(TestStepBase, ModelUpdate[TestStepProto]): + """Update model for TestStep.""" + + name: str | None = None + step_type: TestStepType | None = None + step_path: str | None = None + status: TestStatus | None = None + start_time: datetime | None = None + end_time: datetime | None = None + + def _add_resource_id_to_proto(self, proto_msg: TestStepProto): + if self._resource_id is None: + raise ValueError("Resource ID must be set before adding to proto") + proto_msg.test_step_id = self._resource_id + + +class TestStepCreate(TestStepBase, ModelCreate[TestStepProto]): + """Create model for TestStep.""" + + test_report_id: str + name: str + step_type: TestStepType + step_path: str + status: TestStatus + start_time: datetime + end_time: datetime + + def to_proto(self) -> TestStepProto: + """Convert to protobuf message with custom logic.""" + proto = TestStepProto( + test_report_id=self.test_report_id, + name=self.name, + step_type=self.step_type.value, # type: ignore + step_path=self.step_path, + status=self.status.value, # type: ignore + ) + + proto.start_time.FromDatetime(self.start_time) + proto.end_time.FromDatetime(self.end_time) + + if self.parent_step_id: + proto.parent_step_id = self.parent_step_id + + if self.description: + proto.description = self.description + + if self.error_info: + proto.error_info.CopyFrom(self.error_info._to_proto()) + + return proto + + +class TestStep(BaseType[TestStepProto, "TestStep"]): + """TestStep model representing a step in a test.""" + + test_report_id: str + parent_step_id: str | None = None + name: str + description: str | None = None + step_type: TestStepType + step_path: str + status: TestStatus + start_time: datetime + end_time: datetime + error_info: ErrorInfo | None = None + + @classmethod + def _from_proto(cls, proto: TestStepProto, sift_client: SiftClient | None = None) -> TestStep: + return cls( + proto=proto, + id_=proto.test_step_id, + test_report_id=proto.test_report_id, + parent_step_id=proto.parent_step_id if proto.parent_step_id else None, + name=proto.name, + description=proto.description if proto.description else None, + step_type=TestStepType(proto.step_type), + step_path=proto.step_path, + status=TestStatus(proto.status), + start_time=proto.start_time.ToDatetime(tzinfo=timezone.utc), + end_time=proto.end_time.ToDatetime(tzinfo=timezone.utc), + error_info=ErrorInfo._from_proto(proto.error_info, sift_client) + if proto.HasField("error_info") + else None, + _client=sift_client, + ) + + def _to_proto(self) -> TestStepProto: + """Convert to protobuf message.""" + proto = TestStepProto( + test_step_id=self.id_ or "", + test_report_id=self.test_report_id, + name=self.name, + step_type=self.step_type.value, # type: ignore + step_path=self.step_path, + status=self.status.value, # type: ignore + ) + + proto.start_time.FromDatetime(self.start_time) + proto.end_time.FromDatetime(self.end_time) + + if self.parent_step_id: + proto.parent_step_id = self.parent_step_id + + if self.description: + proto.description = self.description + + if self.error_info: + proto.error_info.CopyFrom(self.error_info._to_proto()) + + return proto + + def update(self, update: TestStepUpdate | dict) -> TestStep: + """Update the TestStep.""" + if not self.client: + raise ValueError("Client not set") + updated_test_step = self.client.test_results.update_step(test_step=self, update=update) + self._update(updated_test_step) + return self + + @property + def measurements(self) -> list[TestMeasurement]: # type: ignore + """Get the TestMeasurements for the TestStep.""" + return self.client.test_results.list_measurements(test_steps=[self]) # type: ignore + + +class NumericBounds(BaseType[NumericBoundsProto, "NumericBounds"]): + """NumericBounds model representing numeric bounds for test measurements.""" + + min: float | None = None + max: float | None = None + + @classmethod + def _from_proto( + cls, proto: NumericBoundsProto, sift_client: SiftClient | None = None + ) -> NumericBounds: + return cls( + proto=proto, + min=proto.min if proto.HasField("min") else None, + max=proto.max if proto.HasField("max") else None, + _client=sift_client, + ) + + def _to_proto(self) -> NumericBoundsProto: + """Convert to protobuf message.""" + return NumericBoundsProto(min=self.min, max=self.max) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, NumericBounds): + return False + return self.min == other.min and self.max == other.max + + +class TestMeasurementBase(ModelCreateUpdateBase): + """Base model for TestMeasurementUpdate and TestMeasurementCreate. Contains shared fields for all test measurements. Update and create models differ mostly in what fields are required vs optional.""" + + numeric_value: float | None = None + string_value: str | None = None + boolean_value: bool | None = None + unit: str | None = None + numeric_bounds: NumericBounds | None = None + string_expected_value: str | None = None + + def _get_proto_class(self) -> type[TestMeasurementProto]: + return TestMeasurementProto + + +class TestMeasurementUpdate(TestMeasurementBase, ModelUpdate[TestMeasurementProto]): + """Update model for TestMeasurement.""" + + name: str | None = None + measurement_type: int | None = None + passed: bool | None = None + timestamp: datetime | None = None + + _to_proto_helpers: ClassVar[dict[str, MappingHelper]] = { + "string_expected_value": MappingHelper( + proto_attr_path="string_bounds.expected_value", update_field="string_bounds" + ), + } + + def _add_resource_id_to_proto(self, proto_msg: TestMeasurementProto): + if self._resource_id is None: + raise ValueError("Resource ID must be set before adding to proto") + proto_msg.measurement_id = self._resource_id + + +class TestMeasurementCreate(TestMeasurementBase, ModelCreate[TestMeasurementProto]): + """Create model for TestMeasurement.""" + + measurement_type: TestMeasurementType + name: str + test_step_id: str + passed: bool + timestamp: datetime + + def to_proto(self) -> TestMeasurementProto: + """Convert to protobuf message with custom logic.""" + proto = TestMeasurementProto( + measurement_type=self.measurement_type.value, # type: ignore + name=self.name, + test_step_id=self.test_step_id, + passed=self.passed, + ) + + proto.timestamp.FromDatetime(self.timestamp) + + if self.numeric_value is not None: + proto.numeric_value = self.numeric_value + elif self.string_value is not None: + proto.string_value = self.string_value + elif self.boolean_value is not None: + proto.boolean_value = self.boolean_value + + if self.numeric_bounds: + proto.numeric_bounds.CopyFrom(self.numeric_bounds._to_proto()) + + if self.string_expected_value: + proto.string_bounds.CopyFrom( + StringBoundsProto(expected_value=self.string_expected_value) + ) + + return proto + + +class TestMeasurement(BaseType[TestMeasurementProto, "TestMeasurement"]): + """TestMeasurement model representing a measurement in a test.""" + + measurement_type: TestMeasurementType + name: str + test_step_id: str + test_report_id: str | None = None # Read only + numeric_value: float | None = None + string_value: str | None = None + boolean_value: bool | None = None + unit: str | None = None + numeric_bounds: NumericBounds | None = None + string_expected_value: str | None = None + passed: bool + timestamp: datetime + + @classmethod + def _from_proto( + cls, proto: TestMeasurementProto, sift_client: SiftClient | None = None + ) -> TestMeasurement: + numeric_value = None + string_value = None + boolean_value = None + + if proto.HasField("numeric_value"): + numeric_value = proto.numeric_value + elif proto.HasField("string_value"): + string_value = proto.string_value + elif proto.HasField("boolean_value"): + boolean_value = proto.boolean_value + + return cls( + proto=proto, + id_=proto.measurement_id, + measurement_type=TestMeasurementType(proto.measurement_type), + name=proto.name, + test_step_id=proto.test_step_id, + test_report_id=proto.test_report_id, + numeric_value=numeric_value, + string_value=string_value, + boolean_value=boolean_value, + unit=proto.unit.abbreviated_name if proto.HasField("unit") else None, + numeric_bounds=NumericBounds._from_proto(proto.numeric_bounds, sift_client) + if proto.HasField("numeric_bounds") + else None, + string_expected_value=proto.string_bounds.expected_value + if proto.HasField("string_bounds") + else None, + passed=proto.passed, + timestamp=proto.timestamp.ToDatetime(tzinfo=timezone.utc), + _client=sift_client, + ) + + def _to_proto(self) -> TestMeasurementProto: + """Convert to protobuf message.""" + proto = TestMeasurementProto( + measurement_id=self.id_ or "", + measurement_type=self.measurement_type.value, # type: ignore + name=self.name, + test_step_id=self.test_step_id, + passed=self.passed, + ) + + proto.timestamp.FromDatetime(self.timestamp) + + if self.numeric_value is not None: + proto.numeric_value = self.numeric_value + elif self.string_value is not None: + proto.string_value = self.string_value + elif self.boolean_value is not None: + proto.boolean_value = self.boolean_value + + if self.numeric_bounds: + proto.numeric_bounds.CopyFrom(self.numeric_bounds._to_proto()) + + if self.string_expected_value: + proto.string_bounds.CopyFrom( + StringBoundsProto(expected_value=self.string_expected_value) + ) + + return proto + + def update( + self, update: TestMeasurementUpdate | dict, update_step: bool = False + ) -> TestMeasurement: + """Update the TestMeasurement. + + Args: + update: The update to apply to the TestMeasurement. + update_step: Whether to update the TestStep's status to failed if the TestMeasurement is being updated to failed. + + Returns: + The updated TestMeasurement. + """ + updated_test_measurement = self.client.test_results.update_measurement( + test_measurement=self, update=update, update_step=update_step + ) + self._update(updated_test_measurement) + return self + + +class TestReport(BaseType[TestReportProto, "TestReport"]): + """TestReport model representing a test report.""" + + status: TestStatus + name: str + test_system_name: str + test_case: str + start_time: datetime + end_time: datetime + metadata: dict[str, str | float | bool] + serial_number: str | None = None + part_number: str | None = None + system_operator: str | None = None + archived_date: datetime | None = None + is_archived: bool + + @classmethod + def _from_proto( + cls, proto: TestReportProto, sift_client: SiftClient | None = None + ) -> TestReport: + return cls( + proto=proto, + id_=proto.test_report_id, + status=TestStatus(proto.status), + name=proto.name, + test_system_name=proto.test_system_name, + test_case=proto.test_case, + start_time=proto.start_time.ToDatetime(tzinfo=timezone.utc), + end_time=proto.end_time.ToDatetime(tzinfo=timezone.utc), + metadata=metadata_proto_to_dict(proto.metadata), # type: ignore + serial_number=proto.serial_number if proto.serial_number else None, + part_number=proto.part_number if proto.part_number else None, + system_operator=proto.system_operator if proto.system_operator else None, + archived_date=proto.archived_date.ToDatetime(tzinfo=timezone.utc) + if proto.HasField("archived_date") + else None, + is_archived=proto.is_archived, + _client=sift_client, + ) + + def _to_proto(self) -> TestReportProto: + """Convert to protobuf message.""" + proto = TestReportProto( + test_report_id=self.id_ or "", + status=self.status.value, # type: ignore + name=self.name, + test_system_name=self.test_system_name, + test_case=self.test_case, + metadata=metadata_dict_to_proto(self.metadata), + is_archived=self.is_archived, + ) + + proto.start_time.FromDatetime(self.start_time) + proto.end_time.FromDatetime(self.end_time) + + if self.serial_number: + proto.serial_number = self.serial_number + + if self.part_number: + proto.part_number = self.part_number + + if self.system_operator: + proto.system_operator = self.system_operator + + if self.archived_date: + proto.archived_date.FromDatetime(self.archived_date) + + return proto + + def update(self, update: TestReportUpdate | dict) -> TestReport: + """Update the TestReport.""" + updated_test_report = self.client.test_results.update(test_report=self, update=update) + self._update(updated_test_report) + return self + + def archive(self) -> TestReport: + """Archive the TestReport.""" + updated_test_report = self.client.test_results.archive(test_report=self) + self._update(updated_test_report) + return self + + def unarchive(self) -> TestReport: + """Unarchive the TestReport.""" + updated_test_report = self.client.test_results.unarchive(test_report=self) + self._update(updated_test_report) + return self + + @property + def steps(self) -> list[TestStep]: # type: ignore + """Get the TestSteps for the TestReport.""" + return self.client.test_results.list_steps(test_reports=[self]) # type: ignore diff --git a/python/lib/sift_client/transport/rest_transport.py b/python/lib/sift_client/transport/rest_transport.py index 071515c94..40a83582b 100644 --- a/python/lib/sift_client/transport/rest_transport.py +++ b/python/lib/sift_client/transport/rest_transport.py @@ -40,6 +40,9 @@ def __init__( cert_via_openssl: Whether to use OpenSSL for SSL/TLS. retry: The retry configuration for requests. """ + if not base_url.startswith("http"): + # urljoin (used when executing requests) requires URL starting with http or https + base_url = f"https://{base_url}" if use_ssl else f"http://{base_url}" self.base_url = base_url self.api_key = api_key self.use_ssl = use_ssl diff --git a/python/lib/sift_client/util/util.py b/python/lib/sift_client/util/util.py index 4202ee715..58319e33d 100644 --- a/python/lib/sift_client/util/util.py +++ b/python/lib/sift_client/util/util.py @@ -11,6 +11,7 @@ PingAPIAsync, RulesAPIAsync, RunsAPIAsync, + TestResultsAPIAsync, ) @@ -37,3 +38,6 @@ class AsyncAPIs(NamedTuple): rules: RulesAPIAsync """Instance of the Rules API for making asynchronous requests.""" + + test_results: TestResultsAPIAsync + """Instance of the Test Results API for making asynchronous requests.""" diff --git a/rust/crates/sift_rs/src/gen/mod.rs b/rust/crates/sift_rs/src/gen/mod.rs index 5cc0d9d84..0ddba856a 100644 --- a/rust/crates/sift_rs/src/gen/mod.rs +++ b/rust/crates/sift_rs/src/gen/mod.rs @@ -281,6 +281,13 @@ pub mod sift { // @@protoc_insertion_point(sift.tags.v2) } } + pub mod test_reports { + // @@protoc_insertion_point(attribute:sift.test_reports.v1) + pub mod v1 { + include!("sift.test_reports.v1.rs"); + // @@protoc_insertion_point(sift.test_reports.v1) + } + } pub mod unit { // @@protoc_insertion_point(attribute:sift.unit.v2) pub mod v2 { diff --git a/rust/crates/sift_rs/src/gen/sift.test_reports.v1.rs b/rust/crates/sift_rs/src/gen/sift.test_reports.v1.rs new file mode 100644 index 000000000..bb9d700d7 --- /dev/null +++ b/rust/crates/sift_rs/src/gen/sift.test_reports.v1.rs @@ -0,0 +1,490 @@ +// @generated +// This file is @generated by prost-build. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct TestReport { + #[prost(string, tag="1")] + pub test_report_id: ::prost::alloc::string::String, + #[prost(enumeration="TestStatus", tag="2")] + pub status: i32, + #[prost(string, tag="3")] + pub name: ::prost::alloc::string::String, + #[prost(string, tag="4")] + pub test_system_name: ::prost::alloc::string::String, + #[prost(string, tag="5")] + pub test_case: ::prost::alloc::string::String, + #[prost(message, optional, tag="6")] + pub start_time: ::core::option::Option<::pbjson_types::Timestamp>, + #[prost(message, optional, tag="7")] + pub end_time: ::core::option::Option<::pbjson_types::Timestamp>, + #[prost(message, repeated, tag="8")] + pub metadata: ::prost::alloc::vec::Vec, + #[prost(string, tag="9")] + pub serial_number: ::prost::alloc::string::String, + #[prost(string, tag="10")] + pub part_number: ::prost::alloc::string::String, + #[prost(string, tag="11")] + pub system_operator: ::prost::alloc::string::String, + #[prost(message, optional, tag="12")] + pub archived_date: ::core::option::Option<::pbjson_types::Timestamp>, + #[prost(bool, tag="13")] + pub is_archived: bool, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct TestStep { + #[prost(string, tag="1")] + pub test_step_id: ::prost::alloc::string::String, + #[prost(string, tag="2")] + pub test_report_id: ::prost::alloc::string::String, + #[prost(string, tag="3")] + pub parent_step_id: ::prost::alloc::string::String, + #[prost(string, tag="4")] + pub name: ::prost::alloc::string::String, + #[prost(string, tag="5")] + pub description: ::prost::alloc::string::String, + #[prost(enumeration="TestStepType", tag="6")] + pub step_type: i32, + #[prost(string, tag="7")] + pub step_path: ::prost::alloc::string::String, + #[prost(enumeration="TestStatus", tag="8")] + pub status: i32, + #[prost(message, optional, tag="9")] + pub start_time: ::core::option::Option<::pbjson_types::Timestamp>, + #[prost(message, optional, tag="10")] + pub end_time: ::core::option::Option<::pbjson_types::Timestamp>, + #[prost(message, optional, tag="11")] + pub error_info: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ErrorInfo { + #[prost(int32, tag="1")] + pub error_code: i32, + #[prost(string, tag="2")] + pub error_message: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct TestMeasurement { + #[prost(string, tag="1")] + pub measurement_id: ::prost::alloc::string::String, + #[prost(enumeration="TestMeasurementType", tag="2")] + pub measurement_type: i32, + #[prost(string, tag="3")] + pub name: ::prost::alloc::string::String, + #[prost(string, tag="4")] + pub test_step_id: ::prost::alloc::string::String, + #[prost(string, tag="5")] + pub test_report_id: ::prost::alloc::string::String, + #[prost(message, optional, tag="9")] + pub unit: ::core::option::Option, + #[prost(bool, tag="12")] + pub passed: bool, + #[prost(message, optional, tag="13")] + pub timestamp: ::core::option::Option<::pbjson_types::Timestamp>, + #[prost(oneof="test_measurement::Value", tags="6, 7, 8")] + pub value: ::core::option::Option, + #[prost(oneof="test_measurement::Bounds", tags="10, 11")] + pub bounds: ::core::option::Option, +} +/// Nested message and enum types in `TestMeasurement`. +pub mod test_measurement { + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Oneof)] + pub enum Value { + #[prost(double, tag="6")] + NumericValue(f64), + #[prost(string, tag="7")] + StringValue(::prost::alloc::string::String), + #[prost(bool, tag="8")] + BooleanValue(bool), + } + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Oneof)] + pub enum Bounds { + #[prost(message, tag="10")] + NumericBounds(super::NumericBounds), + #[prost(message, tag="11")] + StringBounds(super::StringBounds), + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] +pub struct NumericBounds { + #[prost(double, optional, tag="1")] + pub min: ::core::option::Option, + #[prost(double, optional, tag="2")] + pub max: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct StringBounds { + #[prost(string, tag="1")] + pub expected_value: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ImportTestReportRequest { + #[prost(string, tag="1")] + pub remote_file_id: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ImportTestReportResponse { + #[prost(message, optional, tag="1")] + pub test_report: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct CreateTestReportRequest { + #[prost(enumeration="TestStatus", tag="1")] + pub status: i32, + #[prost(string, tag="2")] + pub name: ::prost::alloc::string::String, + #[prost(string, tag="3")] + pub test_system_name: ::prost::alloc::string::String, + #[prost(string, tag="4")] + pub test_case: ::prost::alloc::string::String, + #[prost(message, optional, tag="5")] + pub start_time: ::core::option::Option<::pbjson_types::Timestamp>, + #[prost(message, optional, tag="6")] + pub end_time: ::core::option::Option<::pbjson_types::Timestamp>, + #[prost(message, repeated, tag="7")] + pub metadata: ::prost::alloc::vec::Vec, + #[prost(string, tag="8")] + pub serial_number: ::prost::alloc::string::String, + #[prost(string, tag="9")] + pub part_number: ::prost::alloc::string::String, + #[prost(string, tag="10")] + pub system_operator: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct CreateTestReportResponse { + #[prost(message, optional, tag="1")] + pub test_report: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct GetTestReportRequest { + #[prost(string, tag="1")] + pub test_report_id: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct GetTestReportResponse { + #[prost(message, optional, tag="1")] + pub test_report: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ListTestReportsRequest { + #[prost(uint32, tag="1")] + pub page_size: u32, + #[prost(string, tag="2")] + pub page_token: ::prost::alloc::string::String, + #[prost(string, tag="3")] + pub filter: ::prost::alloc::string::String, + #[prost(string, tag="4")] + pub order_by: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ListTestReportsResponse { + #[prost(message, repeated, tag="1")] + pub test_reports: ::prost::alloc::vec::Vec, + #[prost(string, tag="2")] + pub next_page_token: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct UpdateTestReportRequest { + #[prost(message, optional, tag="1")] + pub test_report: ::core::option::Option, + #[prost(message, optional, tag="2")] + pub update_mask: ::core::option::Option<::pbjson_types::FieldMask>, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct UpdateTestReportResponse { + #[prost(message, optional, tag="1")] + pub test_report: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DeleteTestReportRequest { + #[prost(string, tag="1")] + pub test_report_id: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] +pub struct DeleteTestReportResponse { +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct CreateTestStepRequest { + #[prost(message, optional, tag="1")] + pub test_step: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct CreateTestStepResponse { + #[prost(message, optional, tag="1")] + pub test_step: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ListTestStepsRequest { + #[prost(uint32, tag="1")] + pub page_size: u32, + #[prost(string, tag="2")] + pub page_token: ::prost::alloc::string::String, + #[prost(string, tag="3")] + pub filter: ::prost::alloc::string::String, + #[prost(string, tag="4")] + pub order_by: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ListTestStepsResponse { + #[prost(message, repeated, tag="1")] + pub test_steps: ::prost::alloc::vec::Vec, + #[prost(string, tag="2")] + pub next_page_token: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct UpdateTestStepRequest { + #[prost(message, optional, tag="1")] + pub test_step: ::core::option::Option, + #[prost(message, optional, tag="2")] + pub update_mask: ::core::option::Option<::pbjson_types::FieldMask>, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct UpdateTestStepResponse { + #[prost(message, optional, tag="1")] + pub test_step: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DeleteTestStepRequest { + #[prost(string, tag="1")] + pub test_step_id: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] +pub struct DeleteTestStepResponse { +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct CreateTestMeasurementRequest { + #[prost(message, optional, tag="1")] + pub test_measurement: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct CreateTestMeasurementResponse { + #[prost(message, optional, tag="1")] + pub test_measurement: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct CreateTestMeasurementsRequest { + #[prost(message, repeated, tag="1")] + pub test_measurements: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct CreateTestMeasurementsResponse { + #[prost(int32, tag="1")] + pub measurements_created_count: i32, + #[prost(string, repeated, tag="2")] + pub measurement_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ListTestMeasurementsRequest { + #[prost(uint32, tag="1")] + pub page_size: u32, + #[prost(string, tag="2")] + pub page_token: ::prost::alloc::string::String, + #[prost(string, tag="3")] + pub filter: ::prost::alloc::string::String, + #[prost(string, tag="4")] + pub order_by: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ListTestMeasurementsResponse { + #[prost(message, repeated, tag="1")] + pub test_measurements: ::prost::alloc::vec::Vec, + #[prost(string, tag="2")] + pub next_page_token: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct CountTestStepsRequest { + #[prost(string, tag="1")] + pub filter: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] +pub struct CountTestStepsResponse { + #[prost(int64, tag="1")] + pub count: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct CountTestMeasurementsRequest { + #[prost(string, tag="1")] + pub filter: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] +pub struct CountTestMeasurementsResponse { + #[prost(int64, tag="1")] + pub count: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct UpdateTestMeasurementRequest { + #[prost(message, optional, tag="1")] + pub test_measurement: ::core::option::Option, + #[prost(message, optional, tag="2")] + pub update_mask: ::core::option::Option<::pbjson_types::FieldMask>, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct UpdateTestMeasurementResponse { + #[prost(message, optional, tag="1")] + pub test_measurement: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DeleteTestMeasurementRequest { + #[prost(string, tag="1")] + pub measurement_id: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] +pub struct DeleteTestMeasurementResponse { +} +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] +#[repr(i32)] +pub enum TestStatus { + Unspecified = 0, + Draft = 1, + Passed = 2, + Failed = 3, + Aborted = 4, + Error = 5, + InProgress = 6, + Skipped = 7, +} +impl TestStatus { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + TestStatus::Unspecified => "TEST_STATUS_UNSPECIFIED", + TestStatus::Draft => "TEST_STATUS_DRAFT", + TestStatus::Passed => "TEST_STATUS_PASSED", + TestStatus::Failed => "TEST_STATUS_FAILED", + TestStatus::Aborted => "TEST_STATUS_ABORTED", + TestStatus::Error => "TEST_STATUS_ERROR", + TestStatus::InProgress => "TEST_STATUS_IN_PROGRESS", + TestStatus::Skipped => "TEST_STATUS_SKIPPED", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "TEST_STATUS_UNSPECIFIED" => Some(Self::Unspecified), + "TEST_STATUS_DRAFT" => Some(Self::Draft), + "TEST_STATUS_PASSED" => Some(Self::Passed), + "TEST_STATUS_FAILED" => Some(Self::Failed), + "TEST_STATUS_ABORTED" => Some(Self::Aborted), + "TEST_STATUS_ERROR" => Some(Self::Error), + "TEST_STATUS_IN_PROGRESS" => Some(Self::InProgress), + "TEST_STATUS_SKIPPED" => Some(Self::Skipped), + _ => None, + } + } +} +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] +#[repr(i32)] +pub enum TestStepType { + Unspecified = 0, + Sequence = 1, + Group = 2, + Action = 3, + FlowControl = 4, +} +impl TestStepType { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + TestStepType::Unspecified => "TEST_STEP_TYPE_UNSPECIFIED", + TestStepType::Sequence => "TEST_STEP_TYPE_SEQUENCE", + TestStepType::Group => "TEST_STEP_TYPE_GROUP", + TestStepType::Action => "TEST_STEP_TYPE_ACTION", + TestStepType::FlowControl => "TEST_STEP_TYPE_FLOW_CONTROL", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "TEST_STEP_TYPE_UNSPECIFIED" => Some(Self::Unspecified), + "TEST_STEP_TYPE_SEQUENCE" => Some(Self::Sequence), + "TEST_STEP_TYPE_GROUP" => Some(Self::Group), + "TEST_STEP_TYPE_ACTION" => Some(Self::Action), + "TEST_STEP_TYPE_FLOW_CONTROL" => Some(Self::FlowControl), + _ => None, + } + } +} +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] +#[repr(i32)] +pub enum TestMeasurementType { + Unspecified = 0, + Double = 1, + String = 3, + Boolean = 4, + Limit = 5, +} +impl TestMeasurementType { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + TestMeasurementType::Unspecified => "TEST_MEASUREMENT_TYPE_UNSPECIFIED", + TestMeasurementType::Double => "TEST_MEASUREMENT_TYPE_DOUBLE", + TestMeasurementType::String => "TEST_MEASUREMENT_TYPE_STRING", + TestMeasurementType::Boolean => "TEST_MEASUREMENT_TYPE_BOOLEAN", + TestMeasurementType::Limit => "TEST_MEASUREMENT_TYPE_LIMIT", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "TEST_MEASUREMENT_TYPE_UNSPECIFIED" => Some(Self::Unspecified), + "TEST_MEASUREMENT_TYPE_DOUBLE" => Some(Self::Double), + "TEST_MEASUREMENT_TYPE_STRING" => Some(Self::String), + "TEST_MEASUREMENT_TYPE_BOOLEAN" => Some(Self::Boolean), + "TEST_MEASUREMENT_TYPE_LIMIT" => Some(Self::Limit), + _ => None, + } + } +} +include!("sift.test_reports.v1.tonic.rs"); +include!("sift.test_reports.v1.serde.rs"); +// @@protoc_insertion_point(module) \ No newline at end of file diff --git a/rust/crates/sift_rs/src/gen/sift.test_reports.v1.serde.rs b/rust/crates/sift_rs/src/gen/sift.test_reports.v1.serde.rs new file mode 100644 index 000000000..0980d17ff --- /dev/null +++ b/rust/crates/sift_rs/src/gen/sift.test_reports.v1.serde.rs @@ -0,0 +1,4968 @@ +// @generated +impl serde::Serialize for CountTestMeasurementsRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.filter.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("sift.test_reports.v1.CountTestMeasurementsRequest", len)?; + if !self.filter.is_empty() { + struct_ser.serialize_field("filter", &self.filter)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for CountTestMeasurementsRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "filter", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Filter, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "filter" => Ok(GeneratedField::Filter), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = CountTestMeasurementsRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.CountTestMeasurementsRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut filter__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Filter => { + if filter__.is_some() { + return Err(serde::de::Error::duplicate_field("filter")); + } + filter__ = Some(map_.next_value()?); + } + } + } + Ok(CountTestMeasurementsRequest { + filter: filter__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.CountTestMeasurementsRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for CountTestMeasurementsResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.count != 0 { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("sift.test_reports.v1.CountTestMeasurementsResponse", len)?; + if self.count != 0 { + #[allow(clippy::needless_borrow)] + struct_ser.serialize_field("count", ToString::to_string(&self.count).as_str())?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for CountTestMeasurementsResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "count", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Count, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "count" => Ok(GeneratedField::Count), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = CountTestMeasurementsResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.CountTestMeasurementsResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut count__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Count => { + if count__.is_some() { + return Err(serde::de::Error::duplicate_field("count")); + } + count__ = + Some(map_.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) + ; + } + } + } + Ok(CountTestMeasurementsResponse { + count: count__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.CountTestMeasurementsResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for CountTestStepsRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.filter.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("sift.test_reports.v1.CountTestStepsRequest", len)?; + if !self.filter.is_empty() { + struct_ser.serialize_field("filter", &self.filter)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for CountTestStepsRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "filter", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Filter, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "filter" => Ok(GeneratedField::Filter), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = CountTestStepsRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.CountTestStepsRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut filter__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Filter => { + if filter__.is_some() { + return Err(serde::de::Error::duplicate_field("filter")); + } + filter__ = Some(map_.next_value()?); + } + } + } + Ok(CountTestStepsRequest { + filter: filter__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.CountTestStepsRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for CountTestStepsResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.count != 0 { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("sift.test_reports.v1.CountTestStepsResponse", len)?; + if self.count != 0 { + #[allow(clippy::needless_borrow)] + struct_ser.serialize_field("count", ToString::to_string(&self.count).as_str())?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for CountTestStepsResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "count", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Count, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "count" => Ok(GeneratedField::Count), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = CountTestStepsResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.CountTestStepsResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut count__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Count => { + if count__.is_some() { + return Err(serde::de::Error::duplicate_field("count")); + } + count__ = + Some(map_.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) + ; + } + } + } + Ok(CountTestStepsResponse { + count: count__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.CountTestStepsResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for CreateTestMeasurementRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.test_measurement.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("sift.test_reports.v1.CreateTestMeasurementRequest", len)?; + if let Some(v) = self.test_measurement.as_ref() { + struct_ser.serialize_field("testMeasurement", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for CreateTestMeasurementRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "test_measurement", + "testMeasurement", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + TestMeasurement, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "testMeasurement" | "test_measurement" => Ok(GeneratedField::TestMeasurement), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = CreateTestMeasurementRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.CreateTestMeasurementRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut test_measurement__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::TestMeasurement => { + if test_measurement__.is_some() { + return Err(serde::de::Error::duplicate_field("testMeasurement")); + } + test_measurement__ = map_.next_value()?; + } + } + } + Ok(CreateTestMeasurementRequest { + test_measurement: test_measurement__, + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.CreateTestMeasurementRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for CreateTestMeasurementResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.test_measurement.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("sift.test_reports.v1.CreateTestMeasurementResponse", len)?; + if let Some(v) = self.test_measurement.as_ref() { + struct_ser.serialize_field("testMeasurement", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for CreateTestMeasurementResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "test_measurement", + "testMeasurement", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + TestMeasurement, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "testMeasurement" | "test_measurement" => Ok(GeneratedField::TestMeasurement), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = CreateTestMeasurementResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.CreateTestMeasurementResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut test_measurement__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::TestMeasurement => { + if test_measurement__.is_some() { + return Err(serde::de::Error::duplicate_field("testMeasurement")); + } + test_measurement__ = map_.next_value()?; + } + } + } + Ok(CreateTestMeasurementResponse { + test_measurement: test_measurement__, + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.CreateTestMeasurementResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for CreateTestMeasurementsRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.test_measurements.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("sift.test_reports.v1.CreateTestMeasurementsRequest", len)?; + if !self.test_measurements.is_empty() { + struct_ser.serialize_field("testMeasurements", &self.test_measurements)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for CreateTestMeasurementsRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "test_measurements", + "testMeasurements", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + TestMeasurements, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "testMeasurements" | "test_measurements" => Ok(GeneratedField::TestMeasurements), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = CreateTestMeasurementsRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.CreateTestMeasurementsRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut test_measurements__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::TestMeasurements => { + if test_measurements__.is_some() { + return Err(serde::de::Error::duplicate_field("testMeasurements")); + } + test_measurements__ = Some(map_.next_value()?); + } + } + } + Ok(CreateTestMeasurementsRequest { + test_measurements: test_measurements__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.CreateTestMeasurementsRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for CreateTestMeasurementsResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.measurements_created_count != 0 { + len += 1; + } + if !self.measurement_ids.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("sift.test_reports.v1.CreateTestMeasurementsResponse", len)?; + if self.measurements_created_count != 0 { + struct_ser.serialize_field("measurementsCreatedCount", &self.measurements_created_count)?; + } + if !self.measurement_ids.is_empty() { + struct_ser.serialize_field("measurementIds", &self.measurement_ids)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for CreateTestMeasurementsResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "measurements_created_count", + "measurementsCreatedCount", + "measurement_ids", + "measurementIds", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + MeasurementsCreatedCount, + MeasurementIds, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "measurementsCreatedCount" | "measurements_created_count" => Ok(GeneratedField::MeasurementsCreatedCount), + "measurementIds" | "measurement_ids" => Ok(GeneratedField::MeasurementIds), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = CreateTestMeasurementsResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.CreateTestMeasurementsResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut measurements_created_count__ = None; + let mut measurement_ids__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::MeasurementsCreatedCount => { + if measurements_created_count__.is_some() { + return Err(serde::de::Error::duplicate_field("measurementsCreatedCount")); + } + measurements_created_count__ = + Some(map_.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) + ; + } + GeneratedField::MeasurementIds => { + if measurement_ids__.is_some() { + return Err(serde::de::Error::duplicate_field("measurementIds")); + } + measurement_ids__ = Some(map_.next_value()?); + } + } + } + Ok(CreateTestMeasurementsResponse { + measurements_created_count: measurements_created_count__.unwrap_or_default(), + measurement_ids: measurement_ids__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.CreateTestMeasurementsResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for CreateTestReportRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.status != 0 { + len += 1; + } + if !self.name.is_empty() { + len += 1; + } + if !self.test_system_name.is_empty() { + len += 1; + } + if !self.test_case.is_empty() { + len += 1; + } + if self.start_time.is_some() { + len += 1; + } + if self.end_time.is_some() { + len += 1; + } + if !self.metadata.is_empty() { + len += 1; + } + if !self.serial_number.is_empty() { + len += 1; + } + if !self.part_number.is_empty() { + len += 1; + } + if !self.system_operator.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("sift.test_reports.v1.CreateTestReportRequest", len)?; + if self.status != 0 { + let v = TestStatus::try_from(self.status) + .map_err(|_| serde::ser::Error::custom(format!("Invalid variant {}", self.status)))?; + struct_ser.serialize_field("status", &v)?; + } + if !self.name.is_empty() { + struct_ser.serialize_field("name", &self.name)?; + } + if !self.test_system_name.is_empty() { + struct_ser.serialize_field("testSystemName", &self.test_system_name)?; + } + if !self.test_case.is_empty() { + struct_ser.serialize_field("testCase", &self.test_case)?; + } + if let Some(v) = self.start_time.as_ref() { + struct_ser.serialize_field("startTime", v)?; + } + if let Some(v) = self.end_time.as_ref() { + struct_ser.serialize_field("endTime", v)?; + } + if !self.metadata.is_empty() { + struct_ser.serialize_field("metadata", &self.metadata)?; + } + if !self.serial_number.is_empty() { + struct_ser.serialize_field("serialNumber", &self.serial_number)?; + } + if !self.part_number.is_empty() { + struct_ser.serialize_field("partNumber", &self.part_number)?; + } + if !self.system_operator.is_empty() { + struct_ser.serialize_field("systemOperator", &self.system_operator)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for CreateTestReportRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "status", + "name", + "test_system_name", + "testSystemName", + "test_case", + "testCase", + "start_time", + "startTime", + "end_time", + "endTime", + "metadata", + "serial_number", + "serialNumber", + "part_number", + "partNumber", + "system_operator", + "systemOperator", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Status, + Name, + TestSystemName, + TestCase, + StartTime, + EndTime, + Metadata, + SerialNumber, + PartNumber, + SystemOperator, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "status" => Ok(GeneratedField::Status), + "name" => Ok(GeneratedField::Name), + "testSystemName" | "test_system_name" => Ok(GeneratedField::TestSystemName), + "testCase" | "test_case" => Ok(GeneratedField::TestCase), + "startTime" | "start_time" => Ok(GeneratedField::StartTime), + "endTime" | "end_time" => Ok(GeneratedField::EndTime), + "metadata" => Ok(GeneratedField::Metadata), + "serialNumber" | "serial_number" => Ok(GeneratedField::SerialNumber), + "partNumber" | "part_number" => Ok(GeneratedField::PartNumber), + "systemOperator" | "system_operator" => Ok(GeneratedField::SystemOperator), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = CreateTestReportRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.CreateTestReportRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut status__ = None; + let mut name__ = None; + let mut test_system_name__ = None; + let mut test_case__ = None; + let mut start_time__ = None; + let mut end_time__ = None; + let mut metadata__ = None; + let mut serial_number__ = None; + let mut part_number__ = None; + let mut system_operator__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Status => { + if status__.is_some() { + return Err(serde::de::Error::duplicate_field("status")); + } + status__ = Some(map_.next_value::()? as i32); + } + GeneratedField::Name => { + if name__.is_some() { + return Err(serde::de::Error::duplicate_field("name")); + } + name__ = Some(map_.next_value()?); + } + GeneratedField::TestSystemName => { + if test_system_name__.is_some() { + return Err(serde::de::Error::duplicate_field("testSystemName")); + } + test_system_name__ = Some(map_.next_value()?); + } + GeneratedField::TestCase => { + if test_case__.is_some() { + return Err(serde::de::Error::duplicate_field("testCase")); + } + test_case__ = Some(map_.next_value()?); + } + GeneratedField::StartTime => { + if start_time__.is_some() { + return Err(serde::de::Error::duplicate_field("startTime")); + } + start_time__ = map_.next_value()?; + } + GeneratedField::EndTime => { + if end_time__.is_some() { + return Err(serde::de::Error::duplicate_field("endTime")); + } + end_time__ = map_.next_value()?; + } + GeneratedField::Metadata => { + if metadata__.is_some() { + return Err(serde::de::Error::duplicate_field("metadata")); + } + metadata__ = Some(map_.next_value()?); + } + GeneratedField::SerialNumber => { + if serial_number__.is_some() { + return Err(serde::de::Error::duplicate_field("serialNumber")); + } + serial_number__ = Some(map_.next_value()?); + } + GeneratedField::PartNumber => { + if part_number__.is_some() { + return Err(serde::de::Error::duplicate_field("partNumber")); + } + part_number__ = Some(map_.next_value()?); + } + GeneratedField::SystemOperator => { + if system_operator__.is_some() { + return Err(serde::de::Error::duplicate_field("systemOperator")); + } + system_operator__ = Some(map_.next_value()?); + } + } + } + Ok(CreateTestReportRequest { + status: status__.unwrap_or_default(), + name: name__.unwrap_or_default(), + test_system_name: test_system_name__.unwrap_or_default(), + test_case: test_case__.unwrap_or_default(), + start_time: start_time__, + end_time: end_time__, + metadata: metadata__.unwrap_or_default(), + serial_number: serial_number__.unwrap_or_default(), + part_number: part_number__.unwrap_or_default(), + system_operator: system_operator__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.CreateTestReportRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for CreateTestReportResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.test_report.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("sift.test_reports.v1.CreateTestReportResponse", len)?; + if let Some(v) = self.test_report.as_ref() { + struct_ser.serialize_field("testReport", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for CreateTestReportResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "test_report", + "testReport", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + TestReport, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "testReport" | "test_report" => Ok(GeneratedField::TestReport), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = CreateTestReportResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.CreateTestReportResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut test_report__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::TestReport => { + if test_report__.is_some() { + return Err(serde::de::Error::duplicate_field("testReport")); + } + test_report__ = map_.next_value()?; + } + } + } + Ok(CreateTestReportResponse { + test_report: test_report__, + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.CreateTestReportResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for CreateTestStepRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.test_step.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("sift.test_reports.v1.CreateTestStepRequest", len)?; + if let Some(v) = self.test_step.as_ref() { + struct_ser.serialize_field("testStep", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for CreateTestStepRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "test_step", + "testStep", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + TestStep, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "testStep" | "test_step" => Ok(GeneratedField::TestStep), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = CreateTestStepRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.CreateTestStepRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut test_step__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::TestStep => { + if test_step__.is_some() { + return Err(serde::de::Error::duplicate_field("testStep")); + } + test_step__ = map_.next_value()?; + } + } + } + Ok(CreateTestStepRequest { + test_step: test_step__, + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.CreateTestStepRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for CreateTestStepResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.test_step.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("sift.test_reports.v1.CreateTestStepResponse", len)?; + if let Some(v) = self.test_step.as_ref() { + struct_ser.serialize_field("testStep", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for CreateTestStepResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "test_step", + "testStep", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + TestStep, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "testStep" | "test_step" => Ok(GeneratedField::TestStep), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = CreateTestStepResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.CreateTestStepResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut test_step__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::TestStep => { + if test_step__.is_some() { + return Err(serde::de::Error::duplicate_field("testStep")); + } + test_step__ = map_.next_value()?; + } + } + } + Ok(CreateTestStepResponse { + test_step: test_step__, + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.CreateTestStepResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for DeleteTestMeasurementRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.measurement_id.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("sift.test_reports.v1.DeleteTestMeasurementRequest", len)?; + if !self.measurement_id.is_empty() { + struct_ser.serialize_field("measurementId", &self.measurement_id)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for DeleteTestMeasurementRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "measurement_id", + "measurementId", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + MeasurementId, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "measurementId" | "measurement_id" => Ok(GeneratedField::MeasurementId), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = DeleteTestMeasurementRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.DeleteTestMeasurementRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut measurement_id__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::MeasurementId => { + if measurement_id__.is_some() { + return Err(serde::de::Error::duplicate_field("measurementId")); + } + measurement_id__ = Some(map_.next_value()?); + } + } + } + Ok(DeleteTestMeasurementRequest { + measurement_id: measurement_id__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.DeleteTestMeasurementRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for DeleteTestMeasurementResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let len = 0; + let struct_ser = serializer.serialize_struct("sift.test_reports.v1.DeleteTestMeasurementResponse", len)?; + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for DeleteTestMeasurementResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + Err(serde::de::Error::unknown_field(value, FIELDS)) + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = DeleteTestMeasurementResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.DeleteTestMeasurementResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + while map_.next_key::()?.is_some() { + let _ = map_.next_value::()?; + } + Ok(DeleteTestMeasurementResponse { + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.DeleteTestMeasurementResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for DeleteTestReportRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.test_report_id.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("sift.test_reports.v1.DeleteTestReportRequest", len)?; + if !self.test_report_id.is_empty() { + struct_ser.serialize_field("testReportId", &self.test_report_id)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for DeleteTestReportRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "test_report_id", + "testReportId", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + TestReportId, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "testReportId" | "test_report_id" => Ok(GeneratedField::TestReportId), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = DeleteTestReportRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.DeleteTestReportRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut test_report_id__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::TestReportId => { + if test_report_id__.is_some() { + return Err(serde::de::Error::duplicate_field("testReportId")); + } + test_report_id__ = Some(map_.next_value()?); + } + } + } + Ok(DeleteTestReportRequest { + test_report_id: test_report_id__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.DeleteTestReportRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for DeleteTestReportResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let len = 0; + let struct_ser = serializer.serialize_struct("sift.test_reports.v1.DeleteTestReportResponse", len)?; + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for DeleteTestReportResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + Err(serde::de::Error::unknown_field(value, FIELDS)) + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = DeleteTestReportResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.DeleteTestReportResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + while map_.next_key::()?.is_some() { + let _ = map_.next_value::()?; + } + Ok(DeleteTestReportResponse { + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.DeleteTestReportResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for DeleteTestStepRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.test_step_id.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("sift.test_reports.v1.DeleteTestStepRequest", len)?; + if !self.test_step_id.is_empty() { + struct_ser.serialize_field("testStepId", &self.test_step_id)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for DeleteTestStepRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "test_step_id", + "testStepId", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + TestStepId, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "testStepId" | "test_step_id" => Ok(GeneratedField::TestStepId), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = DeleteTestStepRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.DeleteTestStepRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut test_step_id__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::TestStepId => { + if test_step_id__.is_some() { + return Err(serde::de::Error::duplicate_field("testStepId")); + } + test_step_id__ = Some(map_.next_value()?); + } + } + } + Ok(DeleteTestStepRequest { + test_step_id: test_step_id__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.DeleteTestStepRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for DeleteTestStepResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let len = 0; + let struct_ser = serializer.serialize_struct("sift.test_reports.v1.DeleteTestStepResponse", len)?; + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for DeleteTestStepResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + Err(serde::de::Error::unknown_field(value, FIELDS)) + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = DeleteTestStepResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.DeleteTestStepResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + while map_.next_key::()?.is_some() { + let _ = map_.next_value::()?; + } + Ok(DeleteTestStepResponse { + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.DeleteTestStepResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for ErrorInfo { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.error_code != 0 { + len += 1; + } + if !self.error_message.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("sift.test_reports.v1.ErrorInfo", len)?; + if self.error_code != 0 { + struct_ser.serialize_field("errorCode", &self.error_code)?; + } + if !self.error_message.is_empty() { + struct_ser.serialize_field("errorMessage", &self.error_message)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for ErrorInfo { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "error_code", + "errorCode", + "error_message", + "errorMessage", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + ErrorCode, + ErrorMessage, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "errorCode" | "error_code" => Ok(GeneratedField::ErrorCode), + "errorMessage" | "error_message" => Ok(GeneratedField::ErrorMessage), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = ErrorInfo; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.ErrorInfo") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut error_code__ = None; + let mut error_message__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::ErrorCode => { + if error_code__.is_some() { + return Err(serde::de::Error::duplicate_field("errorCode")); + } + error_code__ = + Some(map_.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) + ; + } + GeneratedField::ErrorMessage => { + if error_message__.is_some() { + return Err(serde::de::Error::duplicate_field("errorMessage")); + } + error_message__ = Some(map_.next_value()?); + } + } + } + Ok(ErrorInfo { + error_code: error_code__.unwrap_or_default(), + error_message: error_message__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.ErrorInfo", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for GetTestReportRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.test_report_id.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("sift.test_reports.v1.GetTestReportRequest", len)?; + if !self.test_report_id.is_empty() { + struct_ser.serialize_field("testReportId", &self.test_report_id)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for GetTestReportRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "test_report_id", + "testReportId", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + TestReportId, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "testReportId" | "test_report_id" => Ok(GeneratedField::TestReportId), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GetTestReportRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.GetTestReportRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut test_report_id__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::TestReportId => { + if test_report_id__.is_some() { + return Err(serde::de::Error::duplicate_field("testReportId")); + } + test_report_id__ = Some(map_.next_value()?); + } + } + } + Ok(GetTestReportRequest { + test_report_id: test_report_id__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.GetTestReportRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for GetTestReportResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.test_report.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("sift.test_reports.v1.GetTestReportResponse", len)?; + if let Some(v) = self.test_report.as_ref() { + struct_ser.serialize_field("testReport", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for GetTestReportResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "test_report", + "testReport", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + TestReport, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "testReport" | "test_report" => Ok(GeneratedField::TestReport), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GetTestReportResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.GetTestReportResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut test_report__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::TestReport => { + if test_report__.is_some() { + return Err(serde::de::Error::duplicate_field("testReport")); + } + test_report__ = map_.next_value()?; + } + } + } + Ok(GetTestReportResponse { + test_report: test_report__, + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.GetTestReportResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for ImportTestReportRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.remote_file_id.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("sift.test_reports.v1.ImportTestReportRequest", len)?; + if !self.remote_file_id.is_empty() { + struct_ser.serialize_field("remoteFileId", &self.remote_file_id)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for ImportTestReportRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "remote_file_id", + "remoteFileId", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + RemoteFileId, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "remoteFileId" | "remote_file_id" => Ok(GeneratedField::RemoteFileId), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = ImportTestReportRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.ImportTestReportRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut remote_file_id__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::RemoteFileId => { + if remote_file_id__.is_some() { + return Err(serde::de::Error::duplicate_field("remoteFileId")); + } + remote_file_id__ = Some(map_.next_value()?); + } + } + } + Ok(ImportTestReportRequest { + remote_file_id: remote_file_id__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.ImportTestReportRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for ImportTestReportResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.test_report.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("sift.test_reports.v1.ImportTestReportResponse", len)?; + if let Some(v) = self.test_report.as_ref() { + struct_ser.serialize_field("testReport", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for ImportTestReportResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "test_report", + "testReport", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + TestReport, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "testReport" | "test_report" => Ok(GeneratedField::TestReport), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = ImportTestReportResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.ImportTestReportResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut test_report__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::TestReport => { + if test_report__.is_some() { + return Err(serde::de::Error::duplicate_field("testReport")); + } + test_report__ = map_.next_value()?; + } + } + } + Ok(ImportTestReportResponse { + test_report: test_report__, + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.ImportTestReportResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for ListTestMeasurementsRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.page_size != 0 { + len += 1; + } + if !self.page_token.is_empty() { + len += 1; + } + if !self.filter.is_empty() { + len += 1; + } + if !self.order_by.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("sift.test_reports.v1.ListTestMeasurementsRequest", len)?; + if self.page_size != 0 { + struct_ser.serialize_field("pageSize", &self.page_size)?; + } + if !self.page_token.is_empty() { + struct_ser.serialize_field("pageToken", &self.page_token)?; + } + if !self.filter.is_empty() { + struct_ser.serialize_field("filter", &self.filter)?; + } + if !self.order_by.is_empty() { + struct_ser.serialize_field("orderBy", &self.order_by)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for ListTestMeasurementsRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "page_size", + "pageSize", + "page_token", + "pageToken", + "filter", + "order_by", + "orderBy", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + PageSize, + PageToken, + Filter, + OrderBy, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "pageSize" | "page_size" => Ok(GeneratedField::PageSize), + "pageToken" | "page_token" => Ok(GeneratedField::PageToken), + "filter" => Ok(GeneratedField::Filter), + "orderBy" | "order_by" => Ok(GeneratedField::OrderBy), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = ListTestMeasurementsRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.ListTestMeasurementsRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut page_size__ = None; + let mut page_token__ = None; + let mut filter__ = None; + let mut order_by__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::PageSize => { + if page_size__.is_some() { + return Err(serde::de::Error::duplicate_field("pageSize")); + } + page_size__ = + Some(map_.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) + ; + } + GeneratedField::PageToken => { + if page_token__.is_some() { + return Err(serde::de::Error::duplicate_field("pageToken")); + } + page_token__ = Some(map_.next_value()?); + } + GeneratedField::Filter => { + if filter__.is_some() { + return Err(serde::de::Error::duplicate_field("filter")); + } + filter__ = Some(map_.next_value()?); + } + GeneratedField::OrderBy => { + if order_by__.is_some() { + return Err(serde::de::Error::duplicate_field("orderBy")); + } + order_by__ = Some(map_.next_value()?); + } + } + } + Ok(ListTestMeasurementsRequest { + page_size: page_size__.unwrap_or_default(), + page_token: page_token__.unwrap_or_default(), + filter: filter__.unwrap_or_default(), + order_by: order_by__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.ListTestMeasurementsRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for ListTestMeasurementsResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.test_measurements.is_empty() { + len += 1; + } + if !self.next_page_token.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("sift.test_reports.v1.ListTestMeasurementsResponse", len)?; + if !self.test_measurements.is_empty() { + struct_ser.serialize_field("testMeasurements", &self.test_measurements)?; + } + if !self.next_page_token.is_empty() { + struct_ser.serialize_field("nextPageToken", &self.next_page_token)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for ListTestMeasurementsResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "test_measurements", + "testMeasurements", + "next_page_token", + "nextPageToken", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + TestMeasurements, + NextPageToken, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "testMeasurements" | "test_measurements" => Ok(GeneratedField::TestMeasurements), + "nextPageToken" | "next_page_token" => Ok(GeneratedField::NextPageToken), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = ListTestMeasurementsResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.ListTestMeasurementsResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut test_measurements__ = None; + let mut next_page_token__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::TestMeasurements => { + if test_measurements__.is_some() { + return Err(serde::de::Error::duplicate_field("testMeasurements")); + } + test_measurements__ = Some(map_.next_value()?); + } + GeneratedField::NextPageToken => { + if next_page_token__.is_some() { + return Err(serde::de::Error::duplicate_field("nextPageToken")); + } + next_page_token__ = Some(map_.next_value()?); + } + } + } + Ok(ListTestMeasurementsResponse { + test_measurements: test_measurements__.unwrap_or_default(), + next_page_token: next_page_token__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.ListTestMeasurementsResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for ListTestReportsRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.page_size != 0 { + len += 1; + } + if !self.page_token.is_empty() { + len += 1; + } + if !self.filter.is_empty() { + len += 1; + } + if !self.order_by.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("sift.test_reports.v1.ListTestReportsRequest", len)?; + if self.page_size != 0 { + struct_ser.serialize_field("pageSize", &self.page_size)?; + } + if !self.page_token.is_empty() { + struct_ser.serialize_field("pageToken", &self.page_token)?; + } + if !self.filter.is_empty() { + struct_ser.serialize_field("filter", &self.filter)?; + } + if !self.order_by.is_empty() { + struct_ser.serialize_field("orderBy", &self.order_by)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for ListTestReportsRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "page_size", + "pageSize", + "page_token", + "pageToken", + "filter", + "order_by", + "orderBy", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + PageSize, + PageToken, + Filter, + OrderBy, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "pageSize" | "page_size" => Ok(GeneratedField::PageSize), + "pageToken" | "page_token" => Ok(GeneratedField::PageToken), + "filter" => Ok(GeneratedField::Filter), + "orderBy" | "order_by" => Ok(GeneratedField::OrderBy), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = ListTestReportsRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.ListTestReportsRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut page_size__ = None; + let mut page_token__ = None; + let mut filter__ = None; + let mut order_by__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::PageSize => { + if page_size__.is_some() { + return Err(serde::de::Error::duplicate_field("pageSize")); + } + page_size__ = + Some(map_.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) + ; + } + GeneratedField::PageToken => { + if page_token__.is_some() { + return Err(serde::de::Error::duplicate_field("pageToken")); + } + page_token__ = Some(map_.next_value()?); + } + GeneratedField::Filter => { + if filter__.is_some() { + return Err(serde::de::Error::duplicate_field("filter")); + } + filter__ = Some(map_.next_value()?); + } + GeneratedField::OrderBy => { + if order_by__.is_some() { + return Err(serde::de::Error::duplicate_field("orderBy")); + } + order_by__ = Some(map_.next_value()?); + } + } + } + Ok(ListTestReportsRequest { + page_size: page_size__.unwrap_or_default(), + page_token: page_token__.unwrap_or_default(), + filter: filter__.unwrap_or_default(), + order_by: order_by__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.ListTestReportsRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for ListTestReportsResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.test_reports.is_empty() { + len += 1; + } + if !self.next_page_token.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("sift.test_reports.v1.ListTestReportsResponse", len)?; + if !self.test_reports.is_empty() { + struct_ser.serialize_field("testReports", &self.test_reports)?; + } + if !self.next_page_token.is_empty() { + struct_ser.serialize_field("nextPageToken", &self.next_page_token)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for ListTestReportsResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "test_reports", + "testReports", + "next_page_token", + "nextPageToken", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + TestReports, + NextPageToken, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "testReports" | "test_reports" => Ok(GeneratedField::TestReports), + "nextPageToken" | "next_page_token" => Ok(GeneratedField::NextPageToken), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = ListTestReportsResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.ListTestReportsResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut test_reports__ = None; + let mut next_page_token__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::TestReports => { + if test_reports__.is_some() { + return Err(serde::de::Error::duplicate_field("testReports")); + } + test_reports__ = Some(map_.next_value()?); + } + GeneratedField::NextPageToken => { + if next_page_token__.is_some() { + return Err(serde::de::Error::duplicate_field("nextPageToken")); + } + next_page_token__ = Some(map_.next_value()?); + } + } + } + Ok(ListTestReportsResponse { + test_reports: test_reports__.unwrap_or_default(), + next_page_token: next_page_token__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.ListTestReportsResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for ListTestStepsRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.page_size != 0 { + len += 1; + } + if !self.page_token.is_empty() { + len += 1; + } + if !self.filter.is_empty() { + len += 1; + } + if !self.order_by.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("sift.test_reports.v1.ListTestStepsRequest", len)?; + if self.page_size != 0 { + struct_ser.serialize_field("pageSize", &self.page_size)?; + } + if !self.page_token.is_empty() { + struct_ser.serialize_field("pageToken", &self.page_token)?; + } + if !self.filter.is_empty() { + struct_ser.serialize_field("filter", &self.filter)?; + } + if !self.order_by.is_empty() { + struct_ser.serialize_field("orderBy", &self.order_by)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for ListTestStepsRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "page_size", + "pageSize", + "page_token", + "pageToken", + "filter", + "order_by", + "orderBy", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + PageSize, + PageToken, + Filter, + OrderBy, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "pageSize" | "page_size" => Ok(GeneratedField::PageSize), + "pageToken" | "page_token" => Ok(GeneratedField::PageToken), + "filter" => Ok(GeneratedField::Filter), + "orderBy" | "order_by" => Ok(GeneratedField::OrderBy), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = ListTestStepsRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.ListTestStepsRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut page_size__ = None; + let mut page_token__ = None; + let mut filter__ = None; + let mut order_by__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::PageSize => { + if page_size__.is_some() { + return Err(serde::de::Error::duplicate_field("pageSize")); + } + page_size__ = + Some(map_.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) + ; + } + GeneratedField::PageToken => { + if page_token__.is_some() { + return Err(serde::de::Error::duplicate_field("pageToken")); + } + page_token__ = Some(map_.next_value()?); + } + GeneratedField::Filter => { + if filter__.is_some() { + return Err(serde::de::Error::duplicate_field("filter")); + } + filter__ = Some(map_.next_value()?); + } + GeneratedField::OrderBy => { + if order_by__.is_some() { + return Err(serde::de::Error::duplicate_field("orderBy")); + } + order_by__ = Some(map_.next_value()?); + } + } + } + Ok(ListTestStepsRequest { + page_size: page_size__.unwrap_or_default(), + page_token: page_token__.unwrap_or_default(), + filter: filter__.unwrap_or_default(), + order_by: order_by__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.ListTestStepsRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for ListTestStepsResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.test_steps.is_empty() { + len += 1; + } + if !self.next_page_token.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("sift.test_reports.v1.ListTestStepsResponse", len)?; + if !self.test_steps.is_empty() { + struct_ser.serialize_field("testSteps", &self.test_steps)?; + } + if !self.next_page_token.is_empty() { + struct_ser.serialize_field("nextPageToken", &self.next_page_token)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for ListTestStepsResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "test_steps", + "testSteps", + "next_page_token", + "nextPageToken", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + TestSteps, + NextPageToken, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "testSteps" | "test_steps" => Ok(GeneratedField::TestSteps), + "nextPageToken" | "next_page_token" => Ok(GeneratedField::NextPageToken), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = ListTestStepsResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.ListTestStepsResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut test_steps__ = None; + let mut next_page_token__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::TestSteps => { + if test_steps__.is_some() { + return Err(serde::de::Error::duplicate_field("testSteps")); + } + test_steps__ = Some(map_.next_value()?); + } + GeneratedField::NextPageToken => { + if next_page_token__.is_some() { + return Err(serde::de::Error::duplicate_field("nextPageToken")); + } + next_page_token__ = Some(map_.next_value()?); + } + } + } + Ok(ListTestStepsResponse { + test_steps: test_steps__.unwrap_or_default(), + next_page_token: next_page_token__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.ListTestStepsResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for NumericBounds { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.min.is_some() { + len += 1; + } + if self.max.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("sift.test_reports.v1.NumericBounds", len)?; + if let Some(v) = self.min.as_ref() { + struct_ser.serialize_field("min", v)?; + } + if let Some(v) = self.max.as_ref() { + struct_ser.serialize_field("max", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for NumericBounds { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "min", + "max", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Min, + Max, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "min" => Ok(GeneratedField::Min), + "max" => Ok(GeneratedField::Max), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = NumericBounds; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.NumericBounds") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut min__ = None; + let mut max__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Min => { + if min__.is_some() { + return Err(serde::de::Error::duplicate_field("min")); + } + min__ = + map_.next_value::<::std::option::Option<::pbjson::private::NumberDeserialize<_>>>()?.map(|x| x.0) + ; + } + GeneratedField::Max => { + if max__.is_some() { + return Err(serde::de::Error::duplicate_field("max")); + } + max__ = + map_.next_value::<::std::option::Option<::pbjson::private::NumberDeserialize<_>>>()?.map(|x| x.0) + ; + } + } + } + Ok(NumericBounds { + min: min__, + max: max__, + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.NumericBounds", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for StringBounds { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.expected_value.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("sift.test_reports.v1.StringBounds", len)?; + if !self.expected_value.is_empty() { + struct_ser.serialize_field("expectedValue", &self.expected_value)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for StringBounds { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "expected_value", + "expectedValue", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + ExpectedValue, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "expectedValue" | "expected_value" => Ok(GeneratedField::ExpectedValue), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = StringBounds; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.StringBounds") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut expected_value__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::ExpectedValue => { + if expected_value__.is_some() { + return Err(serde::de::Error::duplicate_field("expectedValue")); + } + expected_value__ = Some(map_.next_value()?); + } + } + } + Ok(StringBounds { + expected_value: expected_value__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.StringBounds", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for TestMeasurement { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.measurement_id.is_empty() { + len += 1; + } + if self.measurement_type != 0 { + len += 1; + } + if !self.name.is_empty() { + len += 1; + } + if !self.test_step_id.is_empty() { + len += 1; + } + if !self.test_report_id.is_empty() { + len += 1; + } + if self.unit.is_some() { + len += 1; + } + if self.passed { + len += 1; + } + if self.timestamp.is_some() { + len += 1; + } + if self.value.is_some() { + len += 1; + } + if self.bounds.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("sift.test_reports.v1.TestMeasurement", len)?; + if !self.measurement_id.is_empty() { + struct_ser.serialize_field("measurementId", &self.measurement_id)?; + } + if self.measurement_type != 0 { + let v = TestMeasurementType::try_from(self.measurement_type) + .map_err(|_| serde::ser::Error::custom(format!("Invalid variant {}", self.measurement_type)))?; + struct_ser.serialize_field("measurementType", &v)?; + } + if !self.name.is_empty() { + struct_ser.serialize_field("name", &self.name)?; + } + if !self.test_step_id.is_empty() { + struct_ser.serialize_field("testStepId", &self.test_step_id)?; + } + if !self.test_report_id.is_empty() { + struct_ser.serialize_field("testReportId", &self.test_report_id)?; + } + if let Some(v) = self.unit.as_ref() { + struct_ser.serialize_field("unit", v)?; + } + if self.passed { + struct_ser.serialize_field("passed", &self.passed)?; + } + if let Some(v) = self.timestamp.as_ref() { + struct_ser.serialize_field("timestamp", v)?; + } + if let Some(v) = self.value.as_ref() { + match v { + test_measurement::Value::NumericValue(v) => { + struct_ser.serialize_field("numericValue", v)?; + } + test_measurement::Value::StringValue(v) => { + struct_ser.serialize_field("stringValue", v)?; + } + test_measurement::Value::BooleanValue(v) => { + struct_ser.serialize_field("booleanValue", v)?; + } + } + } + if let Some(v) = self.bounds.as_ref() { + match v { + test_measurement::Bounds::NumericBounds(v) => { + struct_ser.serialize_field("numericBounds", v)?; + } + test_measurement::Bounds::StringBounds(v) => { + struct_ser.serialize_field("stringBounds", v)?; + } + } + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for TestMeasurement { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "measurement_id", + "measurementId", + "measurement_type", + "measurementType", + "name", + "test_step_id", + "testStepId", + "test_report_id", + "testReportId", + "unit", + "passed", + "timestamp", + "numeric_value", + "numericValue", + "string_value", + "stringValue", + "boolean_value", + "booleanValue", + "numeric_bounds", + "numericBounds", + "string_bounds", + "stringBounds", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + MeasurementId, + MeasurementType, + Name, + TestStepId, + TestReportId, + Unit, + Passed, + Timestamp, + NumericValue, + StringValue, + BooleanValue, + NumericBounds, + StringBounds, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "measurementId" | "measurement_id" => Ok(GeneratedField::MeasurementId), + "measurementType" | "measurement_type" => Ok(GeneratedField::MeasurementType), + "name" => Ok(GeneratedField::Name), + "testStepId" | "test_step_id" => Ok(GeneratedField::TestStepId), + "testReportId" | "test_report_id" => Ok(GeneratedField::TestReportId), + "unit" => Ok(GeneratedField::Unit), + "passed" => Ok(GeneratedField::Passed), + "timestamp" => Ok(GeneratedField::Timestamp), + "numericValue" | "numeric_value" => Ok(GeneratedField::NumericValue), + "stringValue" | "string_value" => Ok(GeneratedField::StringValue), + "booleanValue" | "boolean_value" => Ok(GeneratedField::BooleanValue), + "numericBounds" | "numeric_bounds" => Ok(GeneratedField::NumericBounds), + "stringBounds" | "string_bounds" => Ok(GeneratedField::StringBounds), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = TestMeasurement; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.TestMeasurement") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut measurement_id__ = None; + let mut measurement_type__ = None; + let mut name__ = None; + let mut test_step_id__ = None; + let mut test_report_id__ = None; + let mut unit__ = None; + let mut passed__ = None; + let mut timestamp__ = None; + let mut value__ = None; + let mut bounds__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::MeasurementId => { + if measurement_id__.is_some() { + return Err(serde::de::Error::duplicate_field("measurementId")); + } + measurement_id__ = Some(map_.next_value()?); + } + GeneratedField::MeasurementType => { + if measurement_type__.is_some() { + return Err(serde::de::Error::duplicate_field("measurementType")); + } + measurement_type__ = Some(map_.next_value::()? as i32); + } + GeneratedField::Name => { + if name__.is_some() { + return Err(serde::de::Error::duplicate_field("name")); + } + name__ = Some(map_.next_value()?); + } + GeneratedField::TestStepId => { + if test_step_id__.is_some() { + return Err(serde::de::Error::duplicate_field("testStepId")); + } + test_step_id__ = Some(map_.next_value()?); + } + GeneratedField::TestReportId => { + if test_report_id__.is_some() { + return Err(serde::de::Error::duplicate_field("testReportId")); + } + test_report_id__ = Some(map_.next_value()?); + } + GeneratedField::Unit => { + if unit__.is_some() { + return Err(serde::de::Error::duplicate_field("unit")); + } + unit__ = map_.next_value()?; + } + GeneratedField::Passed => { + if passed__.is_some() { + return Err(serde::de::Error::duplicate_field("passed")); + } + passed__ = Some(map_.next_value()?); + } + GeneratedField::Timestamp => { + if timestamp__.is_some() { + return Err(serde::de::Error::duplicate_field("timestamp")); + } + timestamp__ = map_.next_value()?; + } + GeneratedField::NumericValue => { + if value__.is_some() { + return Err(serde::de::Error::duplicate_field("numericValue")); + } + value__ = map_.next_value::<::std::option::Option<::pbjson::private::NumberDeserialize<_>>>()?.map(|x| test_measurement::Value::NumericValue(x.0)); + } + GeneratedField::StringValue => { + if value__.is_some() { + return Err(serde::de::Error::duplicate_field("stringValue")); + } + value__ = map_.next_value::<::std::option::Option<_>>()?.map(test_measurement::Value::StringValue); + } + GeneratedField::BooleanValue => { + if value__.is_some() { + return Err(serde::de::Error::duplicate_field("booleanValue")); + } + value__ = map_.next_value::<::std::option::Option<_>>()?.map(test_measurement::Value::BooleanValue); + } + GeneratedField::NumericBounds => { + if bounds__.is_some() { + return Err(serde::de::Error::duplicate_field("numericBounds")); + } + bounds__ = map_.next_value::<::std::option::Option<_>>()?.map(test_measurement::Bounds::NumericBounds) +; + } + GeneratedField::StringBounds => { + if bounds__.is_some() { + return Err(serde::de::Error::duplicate_field("stringBounds")); + } + bounds__ = map_.next_value::<::std::option::Option<_>>()?.map(test_measurement::Bounds::StringBounds) +; + } + } + } + Ok(TestMeasurement { + measurement_id: measurement_id__.unwrap_or_default(), + measurement_type: measurement_type__.unwrap_or_default(), + name: name__.unwrap_or_default(), + test_step_id: test_step_id__.unwrap_or_default(), + test_report_id: test_report_id__.unwrap_or_default(), + unit: unit__, + passed: passed__.unwrap_or_default(), + timestamp: timestamp__, + value: value__, + bounds: bounds__, + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.TestMeasurement", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for TestMeasurementType { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + let variant = match self { + Self::Unspecified => "TEST_MEASUREMENT_TYPE_UNSPECIFIED", + Self::Double => "TEST_MEASUREMENT_TYPE_DOUBLE", + Self::String => "TEST_MEASUREMENT_TYPE_STRING", + Self::Boolean => "TEST_MEASUREMENT_TYPE_BOOLEAN", + Self::Limit => "TEST_MEASUREMENT_TYPE_LIMIT", + }; + serializer.serialize_str(variant) + } +} +impl<'de> serde::Deserialize<'de> for TestMeasurementType { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "TEST_MEASUREMENT_TYPE_UNSPECIFIED", + "TEST_MEASUREMENT_TYPE_DOUBLE", + "TEST_MEASUREMENT_TYPE_STRING", + "TEST_MEASUREMENT_TYPE_BOOLEAN", + "TEST_MEASUREMENT_TYPE_LIMIT", + ]; + + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = TestMeasurementType; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + fn visit_i64(self, v: i64) -> std::result::Result + where + E: serde::de::Error, + { + i32::try_from(v) + .ok() + .and_then(|x| x.try_into().ok()) + .ok_or_else(|| { + serde::de::Error::invalid_value(serde::de::Unexpected::Signed(v), &self) + }) + } + + fn visit_u64(self, v: u64) -> std::result::Result + where + E: serde::de::Error, + { + i32::try_from(v) + .ok() + .and_then(|x| x.try_into().ok()) + .ok_or_else(|| { + serde::de::Error::invalid_value(serde::de::Unexpected::Unsigned(v), &self) + }) + } + + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "TEST_MEASUREMENT_TYPE_UNSPECIFIED" => Ok(TestMeasurementType::Unspecified), + "TEST_MEASUREMENT_TYPE_DOUBLE" => Ok(TestMeasurementType::Double), + "TEST_MEASUREMENT_TYPE_STRING" => Ok(TestMeasurementType::String), + "TEST_MEASUREMENT_TYPE_BOOLEAN" => Ok(TestMeasurementType::Boolean), + "TEST_MEASUREMENT_TYPE_LIMIT" => Ok(TestMeasurementType::Limit), + _ => Err(serde::de::Error::unknown_variant(value, FIELDS)), + } + } + } + deserializer.deserialize_any(GeneratedVisitor) + } +} +impl serde::Serialize for TestReport { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.test_report_id.is_empty() { + len += 1; + } + if self.status != 0 { + len += 1; + } + if !self.name.is_empty() { + len += 1; + } + if !self.test_system_name.is_empty() { + len += 1; + } + if !self.test_case.is_empty() { + len += 1; + } + if self.start_time.is_some() { + len += 1; + } + if self.end_time.is_some() { + len += 1; + } + if !self.metadata.is_empty() { + len += 1; + } + if !self.serial_number.is_empty() { + len += 1; + } + if !self.part_number.is_empty() { + len += 1; + } + if !self.system_operator.is_empty() { + len += 1; + } + if self.archived_date.is_some() { + len += 1; + } + if self.is_archived { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("sift.test_reports.v1.TestReport", len)?; + if !self.test_report_id.is_empty() { + struct_ser.serialize_field("testReportId", &self.test_report_id)?; + } + if self.status != 0 { + let v = TestStatus::try_from(self.status) + .map_err(|_| serde::ser::Error::custom(format!("Invalid variant {}", self.status)))?; + struct_ser.serialize_field("status", &v)?; + } + if !self.name.is_empty() { + struct_ser.serialize_field("name", &self.name)?; + } + if !self.test_system_name.is_empty() { + struct_ser.serialize_field("testSystemName", &self.test_system_name)?; + } + if !self.test_case.is_empty() { + struct_ser.serialize_field("testCase", &self.test_case)?; + } + if let Some(v) = self.start_time.as_ref() { + struct_ser.serialize_field("startTime", v)?; + } + if let Some(v) = self.end_time.as_ref() { + struct_ser.serialize_field("endTime", v)?; + } + if !self.metadata.is_empty() { + struct_ser.serialize_field("metadata", &self.metadata)?; + } + if !self.serial_number.is_empty() { + struct_ser.serialize_field("serialNumber", &self.serial_number)?; + } + if !self.part_number.is_empty() { + struct_ser.serialize_field("partNumber", &self.part_number)?; + } + if !self.system_operator.is_empty() { + struct_ser.serialize_field("systemOperator", &self.system_operator)?; + } + if let Some(v) = self.archived_date.as_ref() { + struct_ser.serialize_field("archivedDate", v)?; + } + if self.is_archived { + struct_ser.serialize_field("isArchived", &self.is_archived)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for TestReport { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "test_report_id", + "testReportId", + "status", + "name", + "test_system_name", + "testSystemName", + "test_case", + "testCase", + "start_time", + "startTime", + "end_time", + "endTime", + "metadata", + "serial_number", + "serialNumber", + "part_number", + "partNumber", + "system_operator", + "systemOperator", + "archived_date", + "archivedDate", + "is_archived", + "isArchived", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + TestReportId, + Status, + Name, + TestSystemName, + TestCase, + StartTime, + EndTime, + Metadata, + SerialNumber, + PartNumber, + SystemOperator, + ArchivedDate, + IsArchived, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "testReportId" | "test_report_id" => Ok(GeneratedField::TestReportId), + "status" => Ok(GeneratedField::Status), + "name" => Ok(GeneratedField::Name), + "testSystemName" | "test_system_name" => Ok(GeneratedField::TestSystemName), + "testCase" | "test_case" => Ok(GeneratedField::TestCase), + "startTime" | "start_time" => Ok(GeneratedField::StartTime), + "endTime" | "end_time" => Ok(GeneratedField::EndTime), + "metadata" => Ok(GeneratedField::Metadata), + "serialNumber" | "serial_number" => Ok(GeneratedField::SerialNumber), + "partNumber" | "part_number" => Ok(GeneratedField::PartNumber), + "systemOperator" | "system_operator" => Ok(GeneratedField::SystemOperator), + "archivedDate" | "archived_date" => Ok(GeneratedField::ArchivedDate), + "isArchived" | "is_archived" => Ok(GeneratedField::IsArchived), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = TestReport; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.TestReport") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut test_report_id__ = None; + let mut status__ = None; + let mut name__ = None; + let mut test_system_name__ = None; + let mut test_case__ = None; + let mut start_time__ = None; + let mut end_time__ = None; + let mut metadata__ = None; + let mut serial_number__ = None; + let mut part_number__ = None; + let mut system_operator__ = None; + let mut archived_date__ = None; + let mut is_archived__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::TestReportId => { + if test_report_id__.is_some() { + return Err(serde::de::Error::duplicate_field("testReportId")); + } + test_report_id__ = Some(map_.next_value()?); + } + GeneratedField::Status => { + if status__.is_some() { + return Err(serde::de::Error::duplicate_field("status")); + } + status__ = Some(map_.next_value::()? as i32); + } + GeneratedField::Name => { + if name__.is_some() { + return Err(serde::de::Error::duplicate_field("name")); + } + name__ = Some(map_.next_value()?); + } + GeneratedField::TestSystemName => { + if test_system_name__.is_some() { + return Err(serde::de::Error::duplicate_field("testSystemName")); + } + test_system_name__ = Some(map_.next_value()?); + } + GeneratedField::TestCase => { + if test_case__.is_some() { + return Err(serde::de::Error::duplicate_field("testCase")); + } + test_case__ = Some(map_.next_value()?); + } + GeneratedField::StartTime => { + if start_time__.is_some() { + return Err(serde::de::Error::duplicate_field("startTime")); + } + start_time__ = map_.next_value()?; + } + GeneratedField::EndTime => { + if end_time__.is_some() { + return Err(serde::de::Error::duplicate_field("endTime")); + } + end_time__ = map_.next_value()?; + } + GeneratedField::Metadata => { + if metadata__.is_some() { + return Err(serde::de::Error::duplicate_field("metadata")); + } + metadata__ = Some(map_.next_value()?); + } + GeneratedField::SerialNumber => { + if serial_number__.is_some() { + return Err(serde::de::Error::duplicate_field("serialNumber")); + } + serial_number__ = Some(map_.next_value()?); + } + GeneratedField::PartNumber => { + if part_number__.is_some() { + return Err(serde::de::Error::duplicate_field("partNumber")); + } + part_number__ = Some(map_.next_value()?); + } + GeneratedField::SystemOperator => { + if system_operator__.is_some() { + return Err(serde::de::Error::duplicate_field("systemOperator")); + } + system_operator__ = Some(map_.next_value()?); + } + GeneratedField::ArchivedDate => { + if archived_date__.is_some() { + return Err(serde::de::Error::duplicate_field("archivedDate")); + } + archived_date__ = map_.next_value()?; + } + GeneratedField::IsArchived => { + if is_archived__.is_some() { + return Err(serde::de::Error::duplicate_field("isArchived")); + } + is_archived__ = Some(map_.next_value()?); + } + } + } + Ok(TestReport { + test_report_id: test_report_id__.unwrap_or_default(), + status: status__.unwrap_or_default(), + name: name__.unwrap_or_default(), + test_system_name: test_system_name__.unwrap_or_default(), + test_case: test_case__.unwrap_or_default(), + start_time: start_time__, + end_time: end_time__, + metadata: metadata__.unwrap_or_default(), + serial_number: serial_number__.unwrap_or_default(), + part_number: part_number__.unwrap_or_default(), + system_operator: system_operator__.unwrap_or_default(), + archived_date: archived_date__, + is_archived: is_archived__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.TestReport", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for TestStatus { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + let variant = match self { + Self::Unspecified => "TEST_STATUS_UNSPECIFIED", + Self::Draft => "TEST_STATUS_DRAFT", + Self::Passed => "TEST_STATUS_PASSED", + Self::Failed => "TEST_STATUS_FAILED", + Self::Aborted => "TEST_STATUS_ABORTED", + Self::Error => "TEST_STATUS_ERROR", + Self::InProgress => "TEST_STATUS_IN_PROGRESS", + Self::Skipped => "TEST_STATUS_SKIPPED", + }; + serializer.serialize_str(variant) + } +} +impl<'de> serde::Deserialize<'de> for TestStatus { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "TEST_STATUS_UNSPECIFIED", + "TEST_STATUS_DRAFT", + "TEST_STATUS_PASSED", + "TEST_STATUS_FAILED", + "TEST_STATUS_ABORTED", + "TEST_STATUS_ERROR", + "TEST_STATUS_IN_PROGRESS", + "TEST_STATUS_SKIPPED", + ]; + + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = TestStatus; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + fn visit_i64(self, v: i64) -> std::result::Result + where + E: serde::de::Error, + { + i32::try_from(v) + .ok() + .and_then(|x| x.try_into().ok()) + .ok_or_else(|| { + serde::de::Error::invalid_value(serde::de::Unexpected::Signed(v), &self) + }) + } + + fn visit_u64(self, v: u64) -> std::result::Result + where + E: serde::de::Error, + { + i32::try_from(v) + .ok() + .and_then(|x| x.try_into().ok()) + .ok_or_else(|| { + serde::de::Error::invalid_value(serde::de::Unexpected::Unsigned(v), &self) + }) + } + + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "TEST_STATUS_UNSPECIFIED" => Ok(TestStatus::Unspecified), + "TEST_STATUS_DRAFT" => Ok(TestStatus::Draft), + "TEST_STATUS_PASSED" => Ok(TestStatus::Passed), + "TEST_STATUS_FAILED" => Ok(TestStatus::Failed), + "TEST_STATUS_ABORTED" => Ok(TestStatus::Aborted), + "TEST_STATUS_ERROR" => Ok(TestStatus::Error), + "TEST_STATUS_IN_PROGRESS" => Ok(TestStatus::InProgress), + "TEST_STATUS_SKIPPED" => Ok(TestStatus::Skipped), + _ => Err(serde::de::Error::unknown_variant(value, FIELDS)), + } + } + } + deserializer.deserialize_any(GeneratedVisitor) + } +} +impl serde::Serialize for TestStep { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.test_step_id.is_empty() { + len += 1; + } + if !self.test_report_id.is_empty() { + len += 1; + } + if !self.parent_step_id.is_empty() { + len += 1; + } + if !self.name.is_empty() { + len += 1; + } + if !self.description.is_empty() { + len += 1; + } + if self.step_type != 0 { + len += 1; + } + if !self.step_path.is_empty() { + len += 1; + } + if self.status != 0 { + len += 1; + } + if self.start_time.is_some() { + len += 1; + } + if self.end_time.is_some() { + len += 1; + } + if self.error_info.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("sift.test_reports.v1.TestStep", len)?; + if !self.test_step_id.is_empty() { + struct_ser.serialize_field("testStepId", &self.test_step_id)?; + } + if !self.test_report_id.is_empty() { + struct_ser.serialize_field("testReportId", &self.test_report_id)?; + } + if !self.parent_step_id.is_empty() { + struct_ser.serialize_field("parentStepId", &self.parent_step_id)?; + } + if !self.name.is_empty() { + struct_ser.serialize_field("name", &self.name)?; + } + if !self.description.is_empty() { + struct_ser.serialize_field("description", &self.description)?; + } + if self.step_type != 0 { + let v = TestStepType::try_from(self.step_type) + .map_err(|_| serde::ser::Error::custom(format!("Invalid variant {}", self.step_type)))?; + struct_ser.serialize_field("stepType", &v)?; + } + if !self.step_path.is_empty() { + struct_ser.serialize_field("stepPath", &self.step_path)?; + } + if self.status != 0 { + let v = TestStatus::try_from(self.status) + .map_err(|_| serde::ser::Error::custom(format!("Invalid variant {}", self.status)))?; + struct_ser.serialize_field("status", &v)?; + } + if let Some(v) = self.start_time.as_ref() { + struct_ser.serialize_field("startTime", v)?; + } + if let Some(v) = self.end_time.as_ref() { + struct_ser.serialize_field("endTime", v)?; + } + if let Some(v) = self.error_info.as_ref() { + struct_ser.serialize_field("errorInfo", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for TestStep { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "test_step_id", + "testStepId", + "test_report_id", + "testReportId", + "parent_step_id", + "parentStepId", + "name", + "description", + "step_type", + "stepType", + "step_path", + "stepPath", + "status", + "start_time", + "startTime", + "end_time", + "endTime", + "error_info", + "errorInfo", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + TestStepId, + TestReportId, + ParentStepId, + Name, + Description, + StepType, + StepPath, + Status, + StartTime, + EndTime, + ErrorInfo, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "testStepId" | "test_step_id" => Ok(GeneratedField::TestStepId), + "testReportId" | "test_report_id" => Ok(GeneratedField::TestReportId), + "parentStepId" | "parent_step_id" => Ok(GeneratedField::ParentStepId), + "name" => Ok(GeneratedField::Name), + "description" => Ok(GeneratedField::Description), + "stepType" | "step_type" => Ok(GeneratedField::StepType), + "stepPath" | "step_path" => Ok(GeneratedField::StepPath), + "status" => Ok(GeneratedField::Status), + "startTime" | "start_time" => Ok(GeneratedField::StartTime), + "endTime" | "end_time" => Ok(GeneratedField::EndTime), + "errorInfo" | "error_info" => Ok(GeneratedField::ErrorInfo), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = TestStep; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.TestStep") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut test_step_id__ = None; + let mut test_report_id__ = None; + let mut parent_step_id__ = None; + let mut name__ = None; + let mut description__ = None; + let mut step_type__ = None; + let mut step_path__ = None; + let mut status__ = None; + let mut start_time__ = None; + let mut end_time__ = None; + let mut error_info__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::TestStepId => { + if test_step_id__.is_some() { + return Err(serde::de::Error::duplicate_field("testStepId")); + } + test_step_id__ = Some(map_.next_value()?); + } + GeneratedField::TestReportId => { + if test_report_id__.is_some() { + return Err(serde::de::Error::duplicate_field("testReportId")); + } + test_report_id__ = Some(map_.next_value()?); + } + GeneratedField::ParentStepId => { + if parent_step_id__.is_some() { + return Err(serde::de::Error::duplicate_field("parentStepId")); + } + parent_step_id__ = Some(map_.next_value()?); + } + GeneratedField::Name => { + if name__.is_some() { + return Err(serde::de::Error::duplicate_field("name")); + } + name__ = Some(map_.next_value()?); + } + GeneratedField::Description => { + if description__.is_some() { + return Err(serde::de::Error::duplicate_field("description")); + } + description__ = Some(map_.next_value()?); + } + GeneratedField::StepType => { + if step_type__.is_some() { + return Err(serde::de::Error::duplicate_field("stepType")); + } + step_type__ = Some(map_.next_value::()? as i32); + } + GeneratedField::StepPath => { + if step_path__.is_some() { + return Err(serde::de::Error::duplicate_field("stepPath")); + } + step_path__ = Some(map_.next_value()?); + } + GeneratedField::Status => { + if status__.is_some() { + return Err(serde::de::Error::duplicate_field("status")); + } + status__ = Some(map_.next_value::()? as i32); + } + GeneratedField::StartTime => { + if start_time__.is_some() { + return Err(serde::de::Error::duplicate_field("startTime")); + } + start_time__ = map_.next_value()?; + } + GeneratedField::EndTime => { + if end_time__.is_some() { + return Err(serde::de::Error::duplicate_field("endTime")); + } + end_time__ = map_.next_value()?; + } + GeneratedField::ErrorInfo => { + if error_info__.is_some() { + return Err(serde::de::Error::duplicate_field("errorInfo")); + } + error_info__ = map_.next_value()?; + } + } + } + Ok(TestStep { + test_step_id: test_step_id__.unwrap_or_default(), + test_report_id: test_report_id__.unwrap_or_default(), + parent_step_id: parent_step_id__.unwrap_or_default(), + name: name__.unwrap_or_default(), + description: description__.unwrap_or_default(), + step_type: step_type__.unwrap_or_default(), + step_path: step_path__.unwrap_or_default(), + status: status__.unwrap_or_default(), + start_time: start_time__, + end_time: end_time__, + error_info: error_info__, + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.TestStep", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for TestStepType { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + let variant = match self { + Self::Unspecified => "TEST_STEP_TYPE_UNSPECIFIED", + Self::Sequence => "TEST_STEP_TYPE_SEQUENCE", + Self::Group => "TEST_STEP_TYPE_GROUP", + Self::Action => "TEST_STEP_TYPE_ACTION", + Self::FlowControl => "TEST_STEP_TYPE_FLOW_CONTROL", + }; + serializer.serialize_str(variant) + } +} +impl<'de> serde::Deserialize<'de> for TestStepType { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "TEST_STEP_TYPE_UNSPECIFIED", + "TEST_STEP_TYPE_SEQUENCE", + "TEST_STEP_TYPE_GROUP", + "TEST_STEP_TYPE_ACTION", + "TEST_STEP_TYPE_FLOW_CONTROL", + ]; + + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = TestStepType; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + fn visit_i64(self, v: i64) -> std::result::Result + where + E: serde::de::Error, + { + i32::try_from(v) + .ok() + .and_then(|x| x.try_into().ok()) + .ok_or_else(|| { + serde::de::Error::invalid_value(serde::de::Unexpected::Signed(v), &self) + }) + } + + fn visit_u64(self, v: u64) -> std::result::Result + where + E: serde::de::Error, + { + i32::try_from(v) + .ok() + .and_then(|x| x.try_into().ok()) + .ok_or_else(|| { + serde::de::Error::invalid_value(serde::de::Unexpected::Unsigned(v), &self) + }) + } + + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "TEST_STEP_TYPE_UNSPECIFIED" => Ok(TestStepType::Unspecified), + "TEST_STEP_TYPE_SEQUENCE" => Ok(TestStepType::Sequence), + "TEST_STEP_TYPE_GROUP" => Ok(TestStepType::Group), + "TEST_STEP_TYPE_ACTION" => Ok(TestStepType::Action), + "TEST_STEP_TYPE_FLOW_CONTROL" => Ok(TestStepType::FlowControl), + _ => Err(serde::de::Error::unknown_variant(value, FIELDS)), + } + } + } + deserializer.deserialize_any(GeneratedVisitor) + } +} +impl serde::Serialize for UpdateTestMeasurementRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.test_measurement.is_some() { + len += 1; + } + if self.update_mask.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("sift.test_reports.v1.UpdateTestMeasurementRequest", len)?; + if let Some(v) = self.test_measurement.as_ref() { + struct_ser.serialize_field("testMeasurement", v)?; + } + if let Some(v) = self.update_mask.as_ref() { + struct_ser.serialize_field("updateMask", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for UpdateTestMeasurementRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "test_measurement", + "testMeasurement", + "update_mask", + "updateMask", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + TestMeasurement, + UpdateMask, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "testMeasurement" | "test_measurement" => Ok(GeneratedField::TestMeasurement), + "updateMask" | "update_mask" => Ok(GeneratedField::UpdateMask), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = UpdateTestMeasurementRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.UpdateTestMeasurementRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut test_measurement__ = None; + let mut update_mask__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::TestMeasurement => { + if test_measurement__.is_some() { + return Err(serde::de::Error::duplicate_field("testMeasurement")); + } + test_measurement__ = map_.next_value()?; + } + GeneratedField::UpdateMask => { + if update_mask__.is_some() { + return Err(serde::de::Error::duplicate_field("updateMask")); + } + update_mask__ = map_.next_value()?; + } + } + } + Ok(UpdateTestMeasurementRequest { + test_measurement: test_measurement__, + update_mask: update_mask__, + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.UpdateTestMeasurementRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for UpdateTestMeasurementResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.test_measurement.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("sift.test_reports.v1.UpdateTestMeasurementResponse", len)?; + if let Some(v) = self.test_measurement.as_ref() { + struct_ser.serialize_field("testMeasurement", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for UpdateTestMeasurementResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "test_measurement", + "testMeasurement", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + TestMeasurement, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "testMeasurement" | "test_measurement" => Ok(GeneratedField::TestMeasurement), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = UpdateTestMeasurementResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.UpdateTestMeasurementResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut test_measurement__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::TestMeasurement => { + if test_measurement__.is_some() { + return Err(serde::de::Error::duplicate_field("testMeasurement")); + } + test_measurement__ = map_.next_value()?; + } + } + } + Ok(UpdateTestMeasurementResponse { + test_measurement: test_measurement__, + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.UpdateTestMeasurementResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for UpdateTestReportRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.test_report.is_some() { + len += 1; + } + if self.update_mask.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("sift.test_reports.v1.UpdateTestReportRequest", len)?; + if let Some(v) = self.test_report.as_ref() { + struct_ser.serialize_field("testReport", v)?; + } + if let Some(v) = self.update_mask.as_ref() { + struct_ser.serialize_field("updateMask", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for UpdateTestReportRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "test_report", + "testReport", + "update_mask", + "updateMask", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + TestReport, + UpdateMask, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "testReport" | "test_report" => Ok(GeneratedField::TestReport), + "updateMask" | "update_mask" => Ok(GeneratedField::UpdateMask), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = UpdateTestReportRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.UpdateTestReportRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut test_report__ = None; + let mut update_mask__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::TestReport => { + if test_report__.is_some() { + return Err(serde::de::Error::duplicate_field("testReport")); + } + test_report__ = map_.next_value()?; + } + GeneratedField::UpdateMask => { + if update_mask__.is_some() { + return Err(serde::de::Error::duplicate_field("updateMask")); + } + update_mask__ = map_.next_value()?; + } + } + } + Ok(UpdateTestReportRequest { + test_report: test_report__, + update_mask: update_mask__, + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.UpdateTestReportRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for UpdateTestReportResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.test_report.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("sift.test_reports.v1.UpdateTestReportResponse", len)?; + if let Some(v) = self.test_report.as_ref() { + struct_ser.serialize_field("testReport", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for UpdateTestReportResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "test_report", + "testReport", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + TestReport, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "testReport" | "test_report" => Ok(GeneratedField::TestReport), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = UpdateTestReportResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.UpdateTestReportResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut test_report__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::TestReport => { + if test_report__.is_some() { + return Err(serde::de::Error::duplicate_field("testReport")); + } + test_report__ = map_.next_value()?; + } + } + } + Ok(UpdateTestReportResponse { + test_report: test_report__, + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.UpdateTestReportResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for UpdateTestStepRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.test_step.is_some() { + len += 1; + } + if self.update_mask.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("sift.test_reports.v1.UpdateTestStepRequest", len)?; + if let Some(v) = self.test_step.as_ref() { + struct_ser.serialize_field("testStep", v)?; + } + if let Some(v) = self.update_mask.as_ref() { + struct_ser.serialize_field("updateMask", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for UpdateTestStepRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "test_step", + "testStep", + "update_mask", + "updateMask", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + TestStep, + UpdateMask, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "testStep" | "test_step" => Ok(GeneratedField::TestStep), + "updateMask" | "update_mask" => Ok(GeneratedField::UpdateMask), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = UpdateTestStepRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.UpdateTestStepRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut test_step__ = None; + let mut update_mask__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::TestStep => { + if test_step__.is_some() { + return Err(serde::de::Error::duplicate_field("testStep")); + } + test_step__ = map_.next_value()?; + } + GeneratedField::UpdateMask => { + if update_mask__.is_some() { + return Err(serde::de::Error::duplicate_field("updateMask")); + } + update_mask__ = map_.next_value()?; + } + } + } + Ok(UpdateTestStepRequest { + test_step: test_step__, + update_mask: update_mask__, + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.UpdateTestStepRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for UpdateTestStepResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.test_step.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("sift.test_reports.v1.UpdateTestStepResponse", len)?; + if let Some(v) = self.test_step.as_ref() { + struct_ser.serialize_field("testStep", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for UpdateTestStepResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "test_step", + "testStep", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + TestStep, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "testStep" | "test_step" => Ok(GeneratedField::TestStep), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = UpdateTestStepResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct sift.test_reports.v1.UpdateTestStepResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut test_step__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::TestStep => { + if test_step__.is_some() { + return Err(serde::de::Error::duplicate_field("testStep")); + } + test_step__ = map_.next_value()?; + } + } + } + Ok(UpdateTestStepResponse { + test_step: test_step__, + }) + } + } + deserializer.deserialize_struct("sift.test_reports.v1.UpdateTestStepResponse", FIELDS, GeneratedVisitor) + } +} diff --git a/rust/crates/sift_rs/src/gen/sift.test_reports.v1.tonic.rs b/rust/crates/sift_rs/src/gen/sift.test_reports.v1.tonic.rs new file mode 100644 index 000000000..57f06574b --- /dev/null +++ b/rust/crates/sift_rs/src/gen/sift.test_reports.v1.tonic.rs @@ -0,0 +1,1725 @@ +// @generated +/// Generated client implementations. +pub mod test_report_service_client { + #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)] + use tonic::codegen::*; + use tonic::codegen::http::Uri; + /// + #[derive(Debug, Clone)] + pub struct TestReportServiceClient { + inner: tonic::client::Grpc, + } + impl TestReportServiceClient { + /// Attempt to create a new client by connecting to a given endpoint. + pub async fn connect(dst: D) -> Result + where + D: TryInto, + D::Error: Into, + { + let conn = tonic::transport::Endpoint::new(dst)?.connect().await?; + Ok(Self::new(conn)) + } + } + impl TestReportServiceClient + where + T: tonic::client::GrpcService, + T::Error: Into, + T::ResponseBody: Body + Send + 'static, + ::Error: Into + Send, + { + pub fn new(inner: T) -> Self { + let inner = tonic::client::Grpc::new(inner); + Self { inner } + } + pub fn with_origin(inner: T, origin: Uri) -> Self { + let inner = tonic::client::Grpc::with_origin(inner, origin); + Self { inner } + } + pub fn with_interceptor( + inner: T, + interceptor: F, + ) -> TestReportServiceClient> + where + F: tonic::service::Interceptor, + T::ResponseBody: Default, + T: tonic::codegen::Service< + http::Request, + Response = http::Response< + >::ResponseBody, + >, + >, + , + >>::Error: Into + Send + Sync, + { + TestReportServiceClient::new(InterceptedService::new(inner, interceptor)) + } + /// Compress requests with the given encoding. + /// + /// This requires the server to support it otherwise it might respond with an + /// error. + #[must_use] + pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self { + self.inner = self.inner.send_compressed(encoding); + self + } + /// Enable decompressing responses. + #[must_use] + pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self { + self.inner = self.inner.accept_compressed(encoding); + self + } + /// Limits the maximum size of a decoded message. + /// + /// Default: `4MB` + #[must_use] + pub fn max_decoding_message_size(mut self, limit: usize) -> Self { + self.inner = self.inner.max_decoding_message_size(limit); + self + } + /// Limits the maximum size of an encoded message. + /// + /// Default: `usize::MAX` + #[must_use] + pub fn max_encoding_message_size(mut self, limit: usize) -> Self { + self.inner = self.inner.max_encoding_message_size(limit); + self + } + /** Imports a test report from an already-uploaded file +*/ + pub async fn import_test_report( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic::codec::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/sift.test_reports.v1.TestReportService/ImportTestReport", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new( + "sift.test_reports.v1.TestReportService", + "ImportTestReport", + ), + ); + self.inner.unary(req, path, codec).await + } + /** Creates a test report +*/ + pub async fn create_test_report( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic::codec::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/sift.test_reports.v1.TestReportService/CreateTestReport", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new( + "sift.test_reports.v1.TestReportService", + "CreateTestReport", + ), + ); + self.inner.unary(req, path, codec).await + } + /** Gets a single test report +*/ + pub async fn get_test_report( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic::codec::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/sift.test_reports.v1.TestReportService/GetTestReport", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new( + "sift.test_reports.v1.TestReportService", + "GetTestReport", + ), + ); + self.inner.unary(req, path, codec).await + } + /** Lists test reports with optional filtering +*/ + pub async fn list_test_reports( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic::codec::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/sift.test_reports.v1.TestReportService/ListTestReports", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new( + "sift.test_reports.v1.TestReportService", + "ListTestReports", + ), + ); + self.inner.unary(req, path, codec).await + } + /** Updates a test report +*/ + pub async fn update_test_report( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic::codec::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/sift.test_reports.v1.TestReportService/UpdateTestReport", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new( + "sift.test_reports.v1.TestReportService", + "UpdateTestReport", + ), + ); + self.inner.unary(req, path, codec).await + } + /** Deletes a test report +*/ + pub async fn delete_test_report( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic::codec::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/sift.test_reports.v1.TestReportService/DeleteTestReport", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new( + "sift.test_reports.v1.TestReportService", + "DeleteTestReport", + ), + ); + self.inner.unary(req, path, codec).await + } + /** Creates a test step +*/ + pub async fn create_test_step( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic::codec::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/sift.test_reports.v1.TestReportService/CreateTestStep", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new( + "sift.test_reports.v1.TestReportService", + "CreateTestStep", + ), + ); + self.inner.unary(req, path, codec).await + } + /** Lists test steps with optional filtering +*/ + pub async fn list_test_steps( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic::codec::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/sift.test_reports.v1.TestReportService/ListTestSteps", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new( + "sift.test_reports.v1.TestReportService", + "ListTestSteps", + ), + ); + self.inner.unary(req, path, codec).await + } + /** Updates a test step +*/ + pub async fn update_test_step( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic::codec::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/sift.test_reports.v1.TestReportService/UpdateTestStep", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new( + "sift.test_reports.v1.TestReportService", + "UpdateTestStep", + ), + ); + self.inner.unary(req, path, codec).await + } + /** Deletes a test step +*/ + pub async fn delete_test_step( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic::codec::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/sift.test_reports.v1.TestReportService/DeleteTestStep", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new( + "sift.test_reports.v1.TestReportService", + "DeleteTestStep", + ), + ); + self.inner.unary(req, path, codec).await + } + /** Creates a test measurement +*/ + pub async fn create_test_measurement( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic::codec::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/sift.test_reports.v1.TestReportService/CreateTestMeasurement", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new( + "sift.test_reports.v1.TestReportService", + "CreateTestMeasurement", + ), + ); + self.inner.unary(req, path, codec).await + } + /** Creates multiple test measurements in a single request +*/ + pub async fn create_test_measurements( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic::codec::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/sift.test_reports.v1.TestReportService/CreateTestMeasurements", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new( + "sift.test_reports.v1.TestReportService", + "CreateTestMeasurements", + ), + ); + self.inner.unary(req, path, codec).await + } + pub async fn list_test_measurements( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic::codec::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/sift.test_reports.v1.TestReportService/ListTestMeasurements", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new( + "sift.test_reports.v1.TestReportService", + "ListTestMeasurements", + ), + ); + self.inner.unary(req, path, codec).await + } + pub async fn count_test_steps( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic::codec::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/sift.test_reports.v1.TestReportService/CountTestSteps", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new( + "sift.test_reports.v1.TestReportService", + "CountTestSteps", + ), + ); + self.inner.unary(req, path, codec).await + } + pub async fn count_test_measurements( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic::codec::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/sift.test_reports.v1.TestReportService/CountTestMeasurements", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new( + "sift.test_reports.v1.TestReportService", + "CountTestMeasurements", + ), + ); + self.inner.unary(req, path, codec).await + } + pub async fn update_test_measurement( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic::codec::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/sift.test_reports.v1.TestReportService/UpdateTestMeasurement", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new( + "sift.test_reports.v1.TestReportService", + "UpdateTestMeasurement", + ), + ); + self.inner.unary(req, path, codec).await + } + pub async fn delete_test_measurement( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic::codec::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/sift.test_reports.v1.TestReportService/DeleteTestMeasurement", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new( + "sift.test_reports.v1.TestReportService", + "DeleteTestMeasurement", + ), + ); + self.inner.unary(req, path, codec).await + } + } +} +/// Generated server implementations. +pub mod test_report_service_server { + #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)] + use tonic::codegen::*; + /// Generated trait containing gRPC methods that should be implemented for use with TestReportServiceServer. + #[async_trait] + pub trait TestReportService: Send + Sync + 'static { + /** Imports a test report from an already-uploaded file +*/ + async fn import_test_report( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; + /** Creates a test report +*/ + async fn create_test_report( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; + /** Gets a single test report +*/ + async fn get_test_report( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; + /** Lists test reports with optional filtering +*/ + async fn list_test_reports( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; + /** Updates a test report +*/ + async fn update_test_report( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; + /** Deletes a test report +*/ + async fn delete_test_report( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; + /** Creates a test step +*/ + async fn create_test_step( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; + /** Lists test steps with optional filtering +*/ + async fn list_test_steps( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; + /** Updates a test step +*/ + async fn update_test_step( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; + /** Deletes a test step +*/ + async fn delete_test_step( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; + /** Creates a test measurement +*/ + async fn create_test_measurement( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; + /** Creates multiple test measurements in a single request +*/ + async fn create_test_measurements( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; + async fn list_test_measurements( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; + async fn count_test_steps( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; + async fn count_test_measurements( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; + async fn update_test_measurement( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; + async fn delete_test_measurement( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; + } + /// + #[derive(Debug)] + pub struct TestReportServiceServer { + inner: _Inner, + accept_compression_encodings: EnabledCompressionEncodings, + send_compression_encodings: EnabledCompressionEncodings, + max_decoding_message_size: Option, + max_encoding_message_size: Option, + } + struct _Inner(Arc); + impl TestReportServiceServer { + pub fn new(inner: T) -> Self { + Self::from_arc(Arc::new(inner)) + } + pub fn from_arc(inner: Arc) -> Self { + let inner = _Inner(inner); + Self { + inner, + accept_compression_encodings: Default::default(), + send_compression_encodings: Default::default(), + max_decoding_message_size: None, + max_encoding_message_size: None, + } + } + pub fn with_interceptor( + inner: T, + interceptor: F, + ) -> InterceptedService + where + F: tonic::service::Interceptor, + { + InterceptedService::new(Self::new(inner), interceptor) + } + /// Enable decompressing requests with the given encoding. + #[must_use] + pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self { + self.accept_compression_encodings.enable(encoding); + self + } + /// Compress responses with the given encoding, if the client supports it. + #[must_use] + pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self { + self.send_compression_encodings.enable(encoding); + self + } + /// Limits the maximum size of a decoded message. + /// + /// Default: `4MB` + #[must_use] + pub fn max_decoding_message_size(mut self, limit: usize) -> Self { + self.max_decoding_message_size = Some(limit); + self + } + /// Limits the maximum size of an encoded message. + /// + /// Default: `usize::MAX` + #[must_use] + pub fn max_encoding_message_size(mut self, limit: usize) -> Self { + self.max_encoding_message_size = Some(limit); + self + } + } + impl tonic::codegen::Service> for TestReportServiceServer + where + T: TestReportService, + B: Body + Send + 'static, + B::Error: Into + Send + 'static, + { + type Response = http::Response; + type Error = std::convert::Infallible; + type Future = BoxFuture; + fn poll_ready( + &mut self, + _cx: &mut Context<'_>, + ) -> Poll> { + Poll::Ready(Ok(())) + } + fn call(&mut self, req: http::Request) -> Self::Future { + let inner = self.inner.clone(); + match req.uri().path() { + "/sift.test_reports.v1.TestReportService/ImportTestReport" => { + #[allow(non_camel_case_types)] + struct ImportTestReportSvc(pub Arc); + impl< + T: TestReportService, + > tonic::server::UnaryService + for ImportTestReportSvc { + type Response = super::ImportTestReportResponse; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + ::import_test_report( + &inner, + request, + ) + .await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let max_decoding_message_size = self.max_decoding_message_size; + let max_encoding_message_size = self.max_encoding_message_size; + let inner = self.inner.clone(); + let fut = async move { + let inner = inner.0; + let method = ImportTestReportSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ) + .apply_max_message_size_config( + max_decoding_message_size, + max_encoding_message_size, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + "/sift.test_reports.v1.TestReportService/CreateTestReport" => { + #[allow(non_camel_case_types)] + struct CreateTestReportSvc(pub Arc); + impl< + T: TestReportService, + > tonic::server::UnaryService + for CreateTestReportSvc { + type Response = super::CreateTestReportResponse; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + ::create_test_report( + &inner, + request, + ) + .await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let max_decoding_message_size = self.max_decoding_message_size; + let max_encoding_message_size = self.max_encoding_message_size; + let inner = self.inner.clone(); + let fut = async move { + let inner = inner.0; + let method = CreateTestReportSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ) + .apply_max_message_size_config( + max_decoding_message_size, + max_encoding_message_size, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + "/sift.test_reports.v1.TestReportService/GetTestReport" => { + #[allow(non_camel_case_types)] + struct GetTestReportSvc(pub Arc); + impl< + T: TestReportService, + > tonic::server::UnaryService + for GetTestReportSvc { + type Response = super::GetTestReportResponse; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + ::get_test_report(&inner, request) + .await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let max_decoding_message_size = self.max_decoding_message_size; + let max_encoding_message_size = self.max_encoding_message_size; + let inner = self.inner.clone(); + let fut = async move { + let inner = inner.0; + let method = GetTestReportSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ) + .apply_max_message_size_config( + max_decoding_message_size, + max_encoding_message_size, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + "/sift.test_reports.v1.TestReportService/ListTestReports" => { + #[allow(non_camel_case_types)] + struct ListTestReportsSvc(pub Arc); + impl< + T: TestReportService, + > tonic::server::UnaryService + for ListTestReportsSvc { + type Response = super::ListTestReportsResponse; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + ::list_test_reports(&inner, request) + .await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let max_decoding_message_size = self.max_decoding_message_size; + let max_encoding_message_size = self.max_encoding_message_size; + let inner = self.inner.clone(); + let fut = async move { + let inner = inner.0; + let method = ListTestReportsSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ) + .apply_max_message_size_config( + max_decoding_message_size, + max_encoding_message_size, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + "/sift.test_reports.v1.TestReportService/UpdateTestReport" => { + #[allow(non_camel_case_types)] + struct UpdateTestReportSvc(pub Arc); + impl< + T: TestReportService, + > tonic::server::UnaryService + for UpdateTestReportSvc { + type Response = super::UpdateTestReportResponse; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + ::update_test_report( + &inner, + request, + ) + .await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let max_decoding_message_size = self.max_decoding_message_size; + let max_encoding_message_size = self.max_encoding_message_size; + let inner = self.inner.clone(); + let fut = async move { + let inner = inner.0; + let method = UpdateTestReportSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ) + .apply_max_message_size_config( + max_decoding_message_size, + max_encoding_message_size, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + "/sift.test_reports.v1.TestReportService/DeleteTestReport" => { + #[allow(non_camel_case_types)] + struct DeleteTestReportSvc(pub Arc); + impl< + T: TestReportService, + > tonic::server::UnaryService + for DeleteTestReportSvc { + type Response = super::DeleteTestReportResponse; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + ::delete_test_report( + &inner, + request, + ) + .await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let max_decoding_message_size = self.max_decoding_message_size; + let max_encoding_message_size = self.max_encoding_message_size; + let inner = self.inner.clone(); + let fut = async move { + let inner = inner.0; + let method = DeleteTestReportSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ) + .apply_max_message_size_config( + max_decoding_message_size, + max_encoding_message_size, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + "/sift.test_reports.v1.TestReportService/CreateTestStep" => { + #[allow(non_camel_case_types)] + struct CreateTestStepSvc(pub Arc); + impl< + T: TestReportService, + > tonic::server::UnaryService + for CreateTestStepSvc { + type Response = super::CreateTestStepResponse; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + ::create_test_step(&inner, request) + .await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let max_decoding_message_size = self.max_decoding_message_size; + let max_encoding_message_size = self.max_encoding_message_size; + let inner = self.inner.clone(); + let fut = async move { + let inner = inner.0; + let method = CreateTestStepSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ) + .apply_max_message_size_config( + max_decoding_message_size, + max_encoding_message_size, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + "/sift.test_reports.v1.TestReportService/ListTestSteps" => { + #[allow(non_camel_case_types)] + struct ListTestStepsSvc(pub Arc); + impl< + T: TestReportService, + > tonic::server::UnaryService + for ListTestStepsSvc { + type Response = super::ListTestStepsResponse; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + ::list_test_steps(&inner, request) + .await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let max_decoding_message_size = self.max_decoding_message_size; + let max_encoding_message_size = self.max_encoding_message_size; + let inner = self.inner.clone(); + let fut = async move { + let inner = inner.0; + let method = ListTestStepsSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ) + .apply_max_message_size_config( + max_decoding_message_size, + max_encoding_message_size, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + "/sift.test_reports.v1.TestReportService/UpdateTestStep" => { + #[allow(non_camel_case_types)] + struct UpdateTestStepSvc(pub Arc); + impl< + T: TestReportService, + > tonic::server::UnaryService + for UpdateTestStepSvc { + type Response = super::UpdateTestStepResponse; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + ::update_test_step(&inner, request) + .await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let max_decoding_message_size = self.max_decoding_message_size; + let max_encoding_message_size = self.max_encoding_message_size; + let inner = self.inner.clone(); + let fut = async move { + let inner = inner.0; + let method = UpdateTestStepSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ) + .apply_max_message_size_config( + max_decoding_message_size, + max_encoding_message_size, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + "/sift.test_reports.v1.TestReportService/DeleteTestStep" => { + #[allow(non_camel_case_types)] + struct DeleteTestStepSvc(pub Arc); + impl< + T: TestReportService, + > tonic::server::UnaryService + for DeleteTestStepSvc { + type Response = super::DeleteTestStepResponse; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + ::delete_test_step(&inner, request) + .await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let max_decoding_message_size = self.max_decoding_message_size; + let max_encoding_message_size = self.max_encoding_message_size; + let inner = self.inner.clone(); + let fut = async move { + let inner = inner.0; + let method = DeleteTestStepSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ) + .apply_max_message_size_config( + max_decoding_message_size, + max_encoding_message_size, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + "/sift.test_reports.v1.TestReportService/CreateTestMeasurement" => { + #[allow(non_camel_case_types)] + struct CreateTestMeasurementSvc(pub Arc); + impl< + T: TestReportService, + > tonic::server::UnaryService + for CreateTestMeasurementSvc { + type Response = super::CreateTestMeasurementResponse; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + ::create_test_measurement( + &inner, + request, + ) + .await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let max_decoding_message_size = self.max_decoding_message_size; + let max_encoding_message_size = self.max_encoding_message_size; + let inner = self.inner.clone(); + let fut = async move { + let inner = inner.0; + let method = CreateTestMeasurementSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ) + .apply_max_message_size_config( + max_decoding_message_size, + max_encoding_message_size, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + "/sift.test_reports.v1.TestReportService/CreateTestMeasurements" => { + #[allow(non_camel_case_types)] + struct CreateTestMeasurementsSvc(pub Arc); + impl< + T: TestReportService, + > tonic::server::UnaryService + for CreateTestMeasurementsSvc { + type Response = super::CreateTestMeasurementsResponse; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + ::create_test_measurements( + &inner, + request, + ) + .await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let max_decoding_message_size = self.max_decoding_message_size; + let max_encoding_message_size = self.max_encoding_message_size; + let inner = self.inner.clone(); + let fut = async move { + let inner = inner.0; + let method = CreateTestMeasurementsSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ) + .apply_max_message_size_config( + max_decoding_message_size, + max_encoding_message_size, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + "/sift.test_reports.v1.TestReportService/ListTestMeasurements" => { + #[allow(non_camel_case_types)] + struct ListTestMeasurementsSvc(pub Arc); + impl< + T: TestReportService, + > tonic::server::UnaryService + for ListTestMeasurementsSvc { + type Response = super::ListTestMeasurementsResponse; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + ::list_test_measurements( + &inner, + request, + ) + .await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let max_decoding_message_size = self.max_decoding_message_size; + let max_encoding_message_size = self.max_encoding_message_size; + let inner = self.inner.clone(); + let fut = async move { + let inner = inner.0; + let method = ListTestMeasurementsSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ) + .apply_max_message_size_config( + max_decoding_message_size, + max_encoding_message_size, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + "/sift.test_reports.v1.TestReportService/CountTestSteps" => { + #[allow(non_camel_case_types)] + struct CountTestStepsSvc(pub Arc); + impl< + T: TestReportService, + > tonic::server::UnaryService + for CountTestStepsSvc { + type Response = super::CountTestStepsResponse; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + ::count_test_steps(&inner, request) + .await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let max_decoding_message_size = self.max_decoding_message_size; + let max_encoding_message_size = self.max_encoding_message_size; + let inner = self.inner.clone(); + let fut = async move { + let inner = inner.0; + let method = CountTestStepsSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ) + .apply_max_message_size_config( + max_decoding_message_size, + max_encoding_message_size, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + "/sift.test_reports.v1.TestReportService/CountTestMeasurements" => { + #[allow(non_camel_case_types)] + struct CountTestMeasurementsSvc(pub Arc); + impl< + T: TestReportService, + > tonic::server::UnaryService + for CountTestMeasurementsSvc { + type Response = super::CountTestMeasurementsResponse; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + ::count_test_measurements( + &inner, + request, + ) + .await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let max_decoding_message_size = self.max_decoding_message_size; + let max_encoding_message_size = self.max_encoding_message_size; + let inner = self.inner.clone(); + let fut = async move { + let inner = inner.0; + let method = CountTestMeasurementsSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ) + .apply_max_message_size_config( + max_decoding_message_size, + max_encoding_message_size, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + "/sift.test_reports.v1.TestReportService/UpdateTestMeasurement" => { + #[allow(non_camel_case_types)] + struct UpdateTestMeasurementSvc(pub Arc); + impl< + T: TestReportService, + > tonic::server::UnaryService + for UpdateTestMeasurementSvc { + type Response = super::UpdateTestMeasurementResponse; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + ::update_test_measurement( + &inner, + request, + ) + .await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let max_decoding_message_size = self.max_decoding_message_size; + let max_encoding_message_size = self.max_encoding_message_size; + let inner = self.inner.clone(); + let fut = async move { + let inner = inner.0; + let method = UpdateTestMeasurementSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ) + .apply_max_message_size_config( + max_decoding_message_size, + max_encoding_message_size, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + "/sift.test_reports.v1.TestReportService/DeleteTestMeasurement" => { + #[allow(non_camel_case_types)] + struct DeleteTestMeasurementSvc(pub Arc); + impl< + T: TestReportService, + > tonic::server::UnaryService + for DeleteTestMeasurementSvc { + type Response = super::DeleteTestMeasurementResponse; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + ::delete_test_measurement( + &inner, + request, + ) + .await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let max_decoding_message_size = self.max_decoding_message_size; + let max_encoding_message_size = self.max_encoding_message_size; + let inner = self.inner.clone(); + let fut = async move { + let inner = inner.0; + let method = DeleteTestMeasurementSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ) + .apply_max_message_size_config( + max_decoding_message_size, + max_encoding_message_size, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + _ => { + Box::pin(async move { + Ok( + http::Response::builder() + .status(200) + .header("grpc-status", "12") + .header("content-type", "application/grpc") + .body(empty_body()) + .unwrap(), + ) + }) + } + } + } + } + impl Clone for TestReportServiceServer { + fn clone(&self) -> Self { + let inner = self.inner.clone(); + Self { + inner, + accept_compression_encodings: self.accept_compression_encodings, + send_compression_encodings: self.send_compression_encodings, + max_decoding_message_size: self.max_decoding_message_size, + max_encoding_message_size: self.max_encoding_message_size, + } + } + } + impl Clone for _Inner { + fn clone(&self) -> Self { + Self(Arc::clone(&self.0)) + } + } + impl std::fmt::Debug for _Inner { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{:?}", self.0) + } + } + impl tonic::server::NamedService + for TestReportServiceServer { + const NAME: &'static str = "sift.test_reports.v1.TestReportService"; + } +}