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