diff --git a/Makefile b/Makefile index 0ff1f904..44880573 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ NAME="github.com/odpf/columbus" VERSION=$(shell git describe --always --tags 2>/dev/null) COVERFILE="/tmp/columbus.coverprofile" -PROTON_COMMIT := "c3146a25d9f321bc721d94dbdf3aec8483a3cb03" +PROTON_COMMIT := "4c76e086f7877efc8897ffac74dd45cf75646a78" .PHONY: all build test clean install proto @@ -31,7 +31,6 @@ proto: ## Generate the protobuf files @buf generate https://github.com/odpf/proton/archive/${PROTON_COMMIT}.zip#strip_components=1 --template buf.gen.yaml --path odpf/compass @echo " > protobuf compilation finished" - install: ## install required dependencies @echo "> installing dependencies" go mod tidy diff --git a/api/httpapi/v1beta1.go b/api/httpapi/v1beta1.go index 0aacc45e..28a775e7 100644 --- a/api/httpapi/v1beta1.go +++ b/api/httpapi/v1beta1.go @@ -26,7 +26,7 @@ func setupV1Beta1Router(router *mux.Router, handlers *Handler) { // Deprecated: Use setupV1Beta1AssetRoutes instead setupV1Beta1TypeRoutes("/types", router, handlers.Type, handlers.Record) - setupUserRoutes("/user", router, handlers.User) + setupMeRoutes("/me", router, handlers.User) setupUsersRoutes("/users", router, handlers.User) @@ -108,7 +108,7 @@ func setupV1Beta1TagRoutes(baseURL string, router *mux.Router, th *handlers.TagH router.Methods(http.MethodDelete).Path(templateURL + "/{template_urn}").HandlerFunc(tth.Delete) } -func setupUserRoutes(baseURL string, router *mux.Router, ush *handlers.UserHandler) { +func setupMeRoutes(baseURL string, router *mux.Router, ush *handlers.UserHandler) { router.Path(baseURL + "/starred"). Methods(http.MethodGet). diff --git a/api/proto/odpf/compass/v1beta1/service.pb.go b/api/proto/odpf/compass/v1beta1/service.pb.go index f2e9dcd4..24c54260 100644 --- a/api/proto/odpf/compass/v1beta1/service.pb.go +++ b/api/proto/odpf/compass/v1beta1/service.pb.go @@ -2318,21 +2318,18 @@ func (x *GetAssetByVersionResponse) GetData() *Asset { return nil } -type User struct { +type GetUserStarredAssetsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Uuid string `protobuf:"bytes,2,opt,name=uuid,proto3" json:"uuid,omitempty"` - Email string `protobuf:"bytes,3,opt,name=email,proto3" json:"email,omitempty"` - Provider string `protobuf:"bytes,4,opt,name=provider,proto3" json:"provider,omitempty"` - CreatedAt *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` - UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` + UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Size uint32 `protobuf:"varint,2,opt,name=size,proto3" json:"size,omitempty"` + Offset uint32 `protobuf:"varint,3,opt,name=offset,proto3" json:"offset,omitempty"` } -func (x *User) Reset() { - *x = User{} +func (x *GetUserStarredAssetsRequest) Reset() { + *x = GetUserStarredAssetsRequest{} if protoimpl.UnsafeEnabled { mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2340,13 +2337,13 @@ func (x *User) Reset() { } } -func (x *User) String() string { +func (x *GetUserStarredAssetsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*User) ProtoMessage() {} +func (*GetUserStarredAssetsRequest) ProtoMessage() {} -func (x *User) ProtoReflect() protoreflect.Message { +func (x *GetUserStarredAssetsRequest) ProtoReflect() protoreflect.Message { mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2358,63 +2355,42 @@ func (x *User) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use User.ProtoReflect.Descriptor instead. -func (*User) Descriptor() ([]byte, []int) { +// Deprecated: Use GetUserStarredAssetsRequest.ProtoReflect.Descriptor instead. +func (*GetUserStarredAssetsRequest) Descriptor() ([]byte, []int) { return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{40} } -func (x *User) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *User) GetUuid() string { - if x != nil { - return x.Uuid - } - return "" -} - -func (x *User) GetEmail() string { - if x != nil { - return x.Email - } - return "" -} - -func (x *User) GetProvider() string { +func (x *GetUserStarredAssetsRequest) GetUserId() string { if x != nil { - return x.Provider + return x.UserId } return "" } -func (x *User) GetCreatedAt() *timestamppb.Timestamp { +func (x *GetUserStarredAssetsRequest) GetSize() uint32 { if x != nil { - return x.CreatedAt + return x.Size } - return nil + return 0 } -func (x *User) GetUpdatedAt() *timestamppb.Timestamp { +func (x *GetUserStarredAssetsRequest) GetOffset() uint32 { if x != nil { - return x.UpdatedAt + return x.Offset } - return nil + return 0 } -type Changelog struct { +type GetUserStarredAssetsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Changes []*Change `protobuf:"bytes,1,rep,name=changes,proto3" json:"changes,omitempty"` + Data []*Asset `protobuf:"bytes,1,rep,name=data,proto3" json:"data,omitempty"` } -func (x *Changelog) Reset() { - *x = Changelog{} +func (x *GetUserStarredAssetsResponse) Reset() { + *x = GetUserStarredAssetsResponse{} if protoimpl.UnsafeEnabled { mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2422,13 +2398,13 @@ func (x *Changelog) Reset() { } } -func (x *Changelog) String() string { +func (x *GetUserStarredAssetsResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Changelog) ProtoMessage() {} +func (*GetUserStarredAssetsResponse) ProtoMessage() {} -func (x *Changelog) ProtoReflect() protoreflect.Message { +func (x *GetUserStarredAssetsResponse) ProtoReflect() protoreflect.Message { mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2440,31 +2416,29 @@ func (x *Changelog) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Changelog.ProtoReflect.Descriptor instead. -func (*Changelog) Descriptor() ([]byte, []int) { +// Deprecated: Use GetUserStarredAssetsResponse.ProtoReflect.Descriptor instead. +func (*GetUserStarredAssetsResponse) Descriptor() ([]byte, []int) { return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{41} } -func (x *Changelog) GetChanges() []*Change { +func (x *GetUserStarredAssetsResponse) GetData() []*Asset { if x != nil { - return x.Changes + return x.Data } return nil } -type Change struct { +type GetMyStarredAssetsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` - Path []string `protobuf:"bytes,2,rep,name=path,proto3" json:"path,omitempty"` - From *structpb.Value `protobuf:"bytes,3,opt,name=from,proto3" json:"from,omitempty"` - To *structpb.Value `protobuf:"bytes,4,opt,name=to,proto3" json:"to,omitempty"` + Size uint32 `protobuf:"varint,1,opt,name=size,proto3" json:"size,omitempty"` + Offset uint32 `protobuf:"varint,2,opt,name=offset,proto3" json:"offset,omitempty"` } -func (x *Change) Reset() { - *x = Change{} +func (x *GetMyStarredAssetsRequest) Reset() { + *x = GetMyStarredAssetsRequest{} if protoimpl.UnsafeEnabled { mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2472,13 +2446,13 @@ func (x *Change) Reset() { } } -func (x *Change) String() string { +func (x *GetMyStarredAssetsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Change) ProtoMessage() {} +func (*GetMyStarredAssetsRequest) ProtoMessage() {} -func (x *Change) ProtoReflect() protoreflect.Message { +func (x *GetMyStarredAssetsRequest) ProtoReflect() protoreflect.Message { mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2490,62 +2464,35 @@ func (x *Change) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Change.ProtoReflect.Descriptor instead. -func (*Change) Descriptor() ([]byte, []int) { +// Deprecated: Use GetMyStarredAssetsRequest.ProtoReflect.Descriptor instead. +func (*GetMyStarredAssetsRequest) Descriptor() ([]byte, []int) { return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{42} } -func (x *Change) GetType() string { - if x != nil { - return x.Type - } - return "" -} - -func (x *Change) GetPath() []string { - if x != nil { - return x.Path - } - return nil -} - -func (x *Change) GetFrom() *structpb.Value { +func (x *GetMyStarredAssetsRequest) GetSize() uint32 { if x != nil { - return x.From + return x.Size } - return nil + return 0 } -func (x *Change) GetTo() *structpb.Value { +func (x *GetMyStarredAssetsRequest) GetOffset() uint32 { if x != nil { - return x.To + return x.Offset } - return nil + return 0 } -type Asset struct { +type GetMyStarredAssetsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Urn string `protobuf:"bytes,2,opt,name=urn,proto3" json:"urn,omitempty"` - Type string `protobuf:"bytes,3,opt,name=type,proto3" json:"type,omitempty"` - Service string `protobuf:"bytes,4,opt,name=service,proto3" json:"service,omitempty"` - Name string `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"` - Description string `protobuf:"bytes,6,opt,name=description,proto3" json:"description,omitempty"` - Data *structpb.Struct `protobuf:"bytes,7,opt,name=data,proto3" json:"data,omitempty"` - Labels *structpb.Struct `protobuf:"bytes,8,opt,name=labels,proto3" json:"labels,omitempty"` - Owners []*User `protobuf:"bytes,9,rep,name=owners,proto3" json:"owners,omitempty"` - Version string `protobuf:"bytes,10,opt,name=version,proto3" json:"version,omitempty"` - UpdatedBy *User `protobuf:"bytes,11,opt,name=updated_by,json=updatedBy,proto3" json:"updated_by,omitempty"` - Changelog *Changelog `protobuf:"bytes,12,opt,name=changelog,proto3" json:"changelog,omitempty"` - CreatedAt *timestamppb.Timestamp `protobuf:"bytes,13,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` - UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,14,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` + Data []*Asset `protobuf:"bytes,1,rep,name=data,proto3" json:"data,omitempty"` } -func (x *Asset) Reset() { - *x = Asset{} +func (x *GetMyStarredAssetsResponse) Reset() { + *x = GetMyStarredAssetsResponse{} if protoimpl.UnsafeEnabled { mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2553,13 +2500,13 @@ func (x *Asset) Reset() { } } -func (x *Asset) String() string { +func (x *GetMyStarredAssetsResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Asset) ProtoMessage() {} +func (*GetMyStarredAssetsResponse) ProtoMessage() {} -func (x *Asset) ProtoReflect() protoreflect.Message { +func (x *GetMyStarredAssetsResponse) ProtoReflect() protoreflect.Message { mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2571,144 +2518,137 @@ func (x *Asset) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Asset.ProtoReflect.Descriptor instead. -func (*Asset) Descriptor() ([]byte, []int) { +// Deprecated: Use GetMyStarredAssetsResponse.ProtoReflect.Descriptor instead. +func (*GetMyStarredAssetsResponse) Descriptor() ([]byte, []int) { return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{43} } -func (x *Asset) GetId() string { +func (x *GetMyStarredAssetsResponse) GetData() []*Asset { if x != nil { - return x.Id + return x.Data } - return "" + return nil } -func (x *Asset) GetUrn() string { - if x != nil { - return x.Urn - } - return "" -} +type GetMyStarredAssetRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (x *Asset) GetType() string { - if x != nil { - return x.Type - } - return "" + AssetId string `protobuf:"bytes,1,opt,name=asset_id,json=assetId,proto3" json:"asset_id,omitempty"` } -func (x *Asset) GetService() string { - if x != nil { - return x.Service +func (x *GetMyStarredAssetRequest) Reset() { + *x = GetMyStarredAssetRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[44] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return "" } -func (x *Asset) GetName() string { - if x != nil { - return x.Name - } - return "" +func (x *GetMyStarredAssetRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *Asset) GetDescription() string { - if x != nil { - return x.Description +func (*GetMyStarredAssetRequest) ProtoMessage() {} + +func (x *GetMyStarredAssetRequest) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[44] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return "" + return mi.MessageOf(x) } -func (x *Asset) GetData() *structpb.Struct { - if x != nil { - return x.Data - } - return nil +// Deprecated: Use GetMyStarredAssetRequest.ProtoReflect.Descriptor instead. +func (*GetMyStarredAssetRequest) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{44} } -func (x *Asset) GetLabels() *structpb.Struct { +func (x *GetMyStarredAssetRequest) GetAssetId() string { if x != nil { - return x.Labels + return x.AssetId } - return nil + return "" } -func (x *Asset) GetOwners() []*User { - if x != nil { - return x.Owners - } - return nil +type GetMyStarredAssetResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Data *Asset `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` } -func (x *Asset) GetVersion() string { - if x != nil { - return x.Version +func (x *GetMyStarredAssetResponse) Reset() { + *x = GetMyStarredAssetResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[45] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return "" } -func (x *Asset) GetUpdatedBy() *User { - if x != nil { - return x.UpdatedBy - } - return nil +func (x *GetMyStarredAssetResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *Asset) GetChangelog() *Changelog { - if x != nil { - return x.Changelog +func (*GetMyStarredAssetResponse) ProtoMessage() {} + +func (x *GetMyStarredAssetResponse) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[45] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *Asset) GetCreatedAt() *timestamppb.Timestamp { - if x != nil { - return x.CreatedAt - } - return nil +// Deprecated: Use GetMyStarredAssetResponse.ProtoReflect.Descriptor instead. +func (*GetMyStarredAssetResponse) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{45} } -func (x *Asset) GetUpdatedAt() *timestamppb.Timestamp { +func (x *GetMyStarredAssetResponse) GetData() *Asset { if x != nil { - return x.UpdatedAt + return x.Data } return nil } -type Discussion struct { +type StarAssetRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` - Body string `protobuf:"bytes,3,opt,name=body,proto3" json:"body,omitempty"` - Type string `protobuf:"bytes,4,opt,name=type,proto3" json:"type,omitempty"` - State string `protobuf:"bytes,5,opt,name=state,proto3" json:"state,omitempty"` - Labels []string `protobuf:"bytes,6,rep,name=labels,proto3" json:"labels,omitempty"` - Assets []string `protobuf:"bytes,7,rep,name=assets,proto3" json:"assets,omitempty"` - Assignees []string `protobuf:"bytes,8,rep,name=assignees,proto3" json:"assignees,omitempty"` - Owner *User `protobuf:"bytes,9,opt,name=owner,proto3" json:"owner,omitempty"` - CreatedAt *timestamppb.Timestamp `protobuf:"bytes,10,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` - UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,11,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` + AssetId string `protobuf:"bytes,1,opt,name=asset_id,json=assetId,proto3" json:"asset_id,omitempty"` } -func (x *Discussion) Reset() { - *x = Discussion{} +func (x *StarAssetRequest) Reset() { + *x = StarAssetRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[44] + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *Discussion) String() string { +func (x *StarAssetRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Discussion) ProtoMessage() {} +func (*StarAssetRequest) ProtoMessage() {} -func (x *Discussion) ProtoReflect() protoreflect.Message { - mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[44] +func (x *StarAssetRequest) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2719,119 +2659,183 @@ func (x *Discussion) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Discussion.ProtoReflect.Descriptor instead. -func (*Discussion) Descriptor() ([]byte, []int) { - return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{44} +// Deprecated: Use StarAssetRequest.ProtoReflect.Descriptor instead. +func (*StarAssetRequest) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{46} } -func (x *Discussion) GetId() string { +func (x *StarAssetRequest) GetAssetId() string { if x != nil { - return x.Id + return x.AssetId } return "" } -func (x *Discussion) GetTitle() string { - if x != nil { - return x.Title - } - return "" -} +type StarAssetResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (x *Discussion) GetBody() string { - if x != nil { - return x.Body + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *StarAssetResponse) Reset() { + *x = StarAssetResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[47] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return "" } -func (x *Discussion) GetType() string { - if x != nil { - return x.Type +func (x *StarAssetResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StarAssetResponse) ProtoMessage() {} + +func (x *StarAssetResponse) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[47] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return "" + return mi.MessageOf(x) } -func (x *Discussion) GetState() string { +// Deprecated: Use StarAssetResponse.ProtoReflect.Descriptor instead. +func (*StarAssetResponse) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{47} +} + +func (x *StarAssetResponse) GetId() string { if x != nil { - return x.State + return x.Id } return "" } -func (x *Discussion) GetLabels() []string { - if x != nil { - return x.Labels - } - return nil +type UnstarAssetRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AssetId string `protobuf:"bytes,1,opt,name=asset_id,json=assetId,proto3" json:"asset_id,omitempty"` } -func (x *Discussion) GetAssets() []string { - if x != nil { - return x.Assets +func (x *UnstarAssetRequest) Reset() { + *x = UnstarAssetRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[48] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return nil } -func (x *Discussion) GetAssignees() []string { - if x != nil { - return x.Assignees +func (x *UnstarAssetRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UnstarAssetRequest) ProtoMessage() {} + +func (x *UnstarAssetRequest) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[48] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *Discussion) GetOwner() *User { +// Deprecated: Use UnstarAssetRequest.ProtoReflect.Descriptor instead. +func (*UnstarAssetRequest) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{48} +} + +func (x *UnstarAssetRequest) GetAssetId() string { if x != nil { - return x.Owner + return x.AssetId } - return nil + return "" } -func (x *Discussion) GetCreatedAt() *timestamppb.Timestamp { - if x != nil { - return x.CreatedAt +type UnstarAssetResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *UnstarAssetResponse) Reset() { + *x = UnstarAssetResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[49] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return nil } -func (x *Discussion) GetUpdatedAt() *timestamppb.Timestamp { - if x != nil { - return x.UpdatedAt +func (x *UnstarAssetResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UnstarAssetResponse) ProtoMessage() {} + +func (x *UnstarAssetResponse) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[49] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -type Comment struct { +// Deprecated: Use UnstarAssetResponse.ProtoReflect.Descriptor instead. +func (*UnstarAssetResponse) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{49} +} + +type GetMyDiscussionsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - DiscussionId string `protobuf:"bytes,2,opt,name=discussion_id,json=discussionId,proto3" json:"discussion_id,omitempty"` - Body string `protobuf:"bytes,3,opt,name=body,proto3" json:"body,omitempty"` - Owner *User `protobuf:"bytes,4,opt,name=owner,proto3" json:"owner,omitempty"` - UpdatedBy *User `protobuf:"bytes,5,opt,name=updated_by,json=updatedBy,proto3" json:"updated_by,omitempty"` - CreatedAt *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` - UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` + Filter string `protobuf:"bytes,1,opt,name=filter,proto3" json:"filter,omitempty"` + Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` + State string `protobuf:"bytes,3,opt,name=state,proto3" json:"state,omitempty"` + Asset string `protobuf:"bytes,4,opt,name=asset,proto3" json:"asset,omitempty"` + Labels string `protobuf:"bytes,5,opt,name=labels,proto3" json:"labels,omitempty"` + Sort string `protobuf:"bytes,6,opt,name=sort,proto3" json:"sort,omitempty"` + Direction string `protobuf:"bytes,7,opt,name=direction,proto3" json:"direction,omitempty"` + Size uint32 `protobuf:"varint,8,opt,name=size,proto3" json:"size,omitempty"` + Offset uint32 `protobuf:"varint,9,opt,name=offset,proto3" json:"offset,omitempty"` } -func (x *Comment) Reset() { - *x = Comment{} +func (x *GetMyDiscussionsRequest) Reset() { + *x = GetMyDiscussionsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[45] + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *Comment) String() string { +func (x *GetMyDiscussionsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Comment) ProtoMessage() {} +func (*GetMyDiscussionsRequest) ProtoMessage() {} -func (x *Comment) ProtoReflect() protoreflect.Message { - mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[45] +func (x *GetMyDiscussionsRequest) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2842,87 +2846,99 @@ func (x *Comment) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Comment.ProtoReflect.Descriptor instead. -func (*Comment) Descriptor() ([]byte, []int) { - return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{45} +// Deprecated: Use GetMyDiscussionsRequest.ProtoReflect.Descriptor instead. +func (*GetMyDiscussionsRequest) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{50} } -func (x *Comment) GetId() string { +func (x *GetMyDiscussionsRequest) GetFilter() string { if x != nil { - return x.Id + return x.Filter } return "" } -func (x *Comment) GetDiscussionId() string { +func (x *GetMyDiscussionsRequest) GetType() string { if x != nil { - return x.DiscussionId + return x.Type } return "" } -func (x *Comment) GetBody() string { +func (x *GetMyDiscussionsRequest) GetState() string { if x != nil { - return x.Body + return x.State } return "" } -func (x *Comment) GetOwner() *User { +func (x *GetMyDiscussionsRequest) GetAsset() string { if x != nil { - return x.Owner + return x.Asset } - return nil + return "" } -func (x *Comment) GetUpdatedBy() *User { +func (x *GetMyDiscussionsRequest) GetLabels() string { if x != nil { - return x.UpdatedBy + return x.Labels } - return nil + return "" } -func (x *Comment) GetCreatedAt() *timestamppb.Timestamp { +func (x *GetMyDiscussionsRequest) GetSort() string { if x != nil { - return x.CreatedAt + return x.Sort } - return nil + return "" } -func (x *Comment) GetUpdatedAt() *timestamppb.Timestamp { +func (x *GetMyDiscussionsRequest) GetDirection() string { if x != nil { - return x.UpdatedAt + return x.Direction } - return nil + return "" } -type LineageEdge struct { +func (x *GetMyDiscussionsRequest) GetSize() uint32 { + if x != nil { + return x.Size + } + return 0 +} + +func (x *GetMyDiscussionsRequest) GetOffset() uint32 { + if x != nil { + return x.Offset + } + return 0 +} + +type GetMyDiscussionsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Source string `protobuf:"bytes,1,opt,name=source,proto3" json:"source,omitempty"` - Target string `protobuf:"bytes,2,opt,name=target,proto3" json:"target,omitempty"` - Prop *structpb.Struct `protobuf:"bytes,3,opt,name=prop,proto3" json:"prop,omitempty"` + Data []*Discussion `protobuf:"bytes,1,rep,name=data,proto3" json:"data,omitempty"` } -func (x *LineageEdge) Reset() { - *x = LineageEdge{} +func (x *GetMyDiscussionsResponse) Reset() { + *x = GetMyDiscussionsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[46] + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *LineageEdge) String() string { +func (x *GetMyDiscussionsResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*LineageEdge) ProtoMessage() {} +func (*GetMyDiscussionsResponse) ProtoMessage() {} -func (x *LineageEdge) ProtoReflect() protoreflect.Message { - mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[46] +func (x *GetMyDiscussionsResponse) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2933,59 +2949,48 @@ func (x *LineageEdge) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use LineageEdge.ProtoReflect.Descriptor instead. -func (*LineageEdge) Descriptor() ([]byte, []int) { - return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{46} -} - -func (x *LineageEdge) GetSource() string { - if x != nil { - return x.Source - } - return "" -} - -func (x *LineageEdge) GetTarget() string { - if x != nil { - return x.Target - } - return "" +// Deprecated: Use GetMyDiscussionsResponse.ProtoReflect.Descriptor instead. +func (*GetMyDiscussionsResponse) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{51} } -func (x *LineageEdge) GetProp() *structpb.Struct { +func (x *GetMyDiscussionsResponse) GetData() []*Discussion { if x != nil { - return x.Prop + return x.Data } return nil } -type LineageNode struct { +type CreateTagRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Urn string `protobuf:"bytes,1,opt,name=urn,proto3" json:"urn,omitempty"` - Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` - Service string `protobuf:"bytes,3,opt,name=service,proto3" json:"service,omitempty"` + RecordType string `protobuf:"bytes,1,opt,name=record_type,json=recordType,proto3" json:"record_type,omitempty"` + RecordUrn string `protobuf:"bytes,2,opt,name=record_urn,json=recordUrn,proto3" json:"record_urn,omitempty"` // required + TemplateUrn string `protobuf:"bytes,3,opt,name=template_urn,json=templateUrn,proto3" json:"template_urn,omitempty"` // required + TagValues []*TagValue `protobuf:"bytes,4,rep,name=tag_values,json=tagValues,proto3" json:"tag_values,omitempty"` // required + TemplateDisplayName string `protobuf:"bytes,5,opt,name=template_display_name,json=templateDisplayName,proto3" json:"template_display_name,omitempty"` + TemplateDescription string `protobuf:"bytes,6,opt,name=template_description,json=templateDescription,proto3" json:"template_description,omitempty"` } -func (x *LineageNode) Reset() { - *x = LineageNode{} +func (x *CreateTagRequest) Reset() { + *x = CreateTagRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[47] + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *LineageNode) String() string { +func (x *CreateTagRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*LineageNode) ProtoMessage() {} +func (*CreateTagRequest) ProtoMessage() {} -func (x *LineageNode) ProtoReflect() protoreflect.Message { - mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[47] +func (x *CreateTagRequest) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2996,63 +3001,78 @@ func (x *LineageNode) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use LineageNode.ProtoReflect.Descriptor instead. -func (*LineageNode) Descriptor() ([]byte, []int) { - return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{47} +// Deprecated: Use CreateTagRequest.ProtoReflect.Descriptor instead. +func (*CreateTagRequest) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{52} } -func (x *LineageNode) GetUrn() string { +func (x *CreateTagRequest) GetRecordType() string { if x != nil { - return x.Urn + return x.RecordType } return "" } -func (x *LineageNode) GetType() string { +func (x *CreateTagRequest) GetRecordUrn() string { if x != nil { - return x.Type + return x.RecordUrn } return "" } -func (x *LineageNode) GetService() string { +func (x *CreateTagRequest) GetTemplateUrn() string { if x != nil { - return x.Service + return x.TemplateUrn } return "" } -type UpsertAssetRequest_BaseAsset struct { +func (x *CreateTagRequest) GetTagValues() []*TagValue { + if x != nil { + return x.TagValues + } + return nil +} + +func (x *CreateTagRequest) GetTemplateDisplayName() string { + if x != nil { + return x.TemplateDisplayName + } + return "" +} + +func (x *CreateTagRequest) GetTemplateDescription() string { + if x != nil { + return x.TemplateDescription + } + return "" +} + +type CreateTagResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Urn string `protobuf:"bytes,1,opt,name=urn,proto3" json:"urn,omitempty"` - Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - Service string `protobuf:"bytes,4,opt,name=service,proto3" json:"service,omitempty"` - Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"` - Data *structpb.Struct `protobuf:"bytes,6,opt,name=data,proto3" json:"data,omitempty"` - Labels *structpb.Struct `protobuf:"bytes,7,opt,name=labels,proto3" json:"labels,omitempty"` + Data *Tag `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` } -func (x *UpsertAssetRequest_BaseAsset) Reset() { - *x = UpsertAssetRequest_BaseAsset{} +func (x *CreateTagResponse) Reset() { + *x = CreateTagResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[52] + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *UpsertAssetRequest_BaseAsset) String() string { +func (x *CreateTagResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*UpsertAssetRequest_BaseAsset) ProtoMessage() {} +func (*CreateTagResponse) ProtoMessage() {} -func (x *UpsertAssetRequest_BaseAsset) ProtoReflect() protoreflect.Message { - mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[52] +func (x *CreateTagResponse) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3063,91 +3083,158 @@ func (x *UpsertAssetRequest_BaseAsset) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use UpsertAssetRequest_BaseAsset.ProtoReflect.Descriptor instead. -func (*UpsertAssetRequest_BaseAsset) Descriptor() ([]byte, []int) { - return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{28, 0} +// Deprecated: Use CreateTagResponse.ProtoReflect.Descriptor instead. +func (*CreateTagResponse) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{53} } -func (x *UpsertAssetRequest_BaseAsset) GetUrn() string { +func (x *CreateTagResponse) GetData() *Tag { if x != nil { - return x.Urn + return x.Data } - return "" + return nil } -func (x *UpsertAssetRequest_BaseAsset) GetType() string { +type GetTagsByRecordAndTemplateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + RecordUrn string `protobuf:"bytes,2,opt,name=record_urn,json=recordUrn,proto3" json:"record_urn,omitempty"` + TemplateUrn string `protobuf:"bytes,3,opt,name=template_urn,json=templateUrn,proto3" json:"template_urn,omitempty"` +} + +func (x *GetTagsByRecordAndTemplateRequest) Reset() { + *x = GetTagsByRecordAndTemplateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[54] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetTagsByRecordAndTemplateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetTagsByRecordAndTemplateRequest) ProtoMessage() {} + +func (x *GetTagsByRecordAndTemplateRequest) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[54] + 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 GetTagsByRecordAndTemplateRequest.ProtoReflect.Descriptor instead. +func (*GetTagsByRecordAndTemplateRequest) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{54} +} + +func (x *GetTagsByRecordAndTemplateRequest) GetType() string { if x != nil { return x.Type } return "" } -func (x *UpsertAssetRequest_BaseAsset) GetName() string { +func (x *GetTagsByRecordAndTemplateRequest) GetRecordUrn() string { if x != nil { - return x.Name + return x.RecordUrn } return "" } -func (x *UpsertAssetRequest_BaseAsset) GetService() string { +func (x *GetTagsByRecordAndTemplateRequest) GetTemplateUrn() string { if x != nil { - return x.Service + return x.TemplateUrn } return "" } -func (x *UpsertAssetRequest_BaseAsset) GetDescription() string { - if x != nil { - return x.Description +type GetTagsByRecordAndTemplateResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Data *Tag `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` +} + +func (x *GetTagsByRecordAndTemplateResponse) Reset() { + *x = GetTagsByRecordAndTemplateResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[55] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return "" } -func (x *UpsertAssetRequest_BaseAsset) GetData() *structpb.Struct { - if x != nil { - return x.Data +func (x *GetTagsByRecordAndTemplateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetTagsByRecordAndTemplateResponse) ProtoMessage() {} + +func (x *GetTagsByRecordAndTemplateResponse) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[55] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *UpsertAssetRequest_BaseAsset) GetLabels() *structpb.Struct { +// Deprecated: Use GetTagsByRecordAndTemplateResponse.ProtoReflect.Descriptor instead. +func (*GetTagsByRecordAndTemplateResponse) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{55} +} + +func (x *GetTagsByRecordAndTemplateResponse) GetData() *Tag { if x != nil { - return x.Labels + return x.Data } return nil } -type UpsertPatchAssetRequest_BaseAsset struct { +type UpdateTagRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Urn string `protobuf:"bytes,1,opt,name=urn,proto3" json:"urn,omitempty"` - Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` - Name *wrapperspb.StringValue `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - Service string `protobuf:"bytes,4,opt,name=service,proto3" json:"service,omitempty"` - Description *wrapperspb.StringValue `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"` - Data *structpb.Struct `protobuf:"bytes,6,opt,name=data,proto3" json:"data,omitempty"` - Labels *structpb.Struct `protobuf:"bytes,7,opt,name=labels,proto3" json:"labels,omitempty"` + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + RecordUrn string `protobuf:"bytes,2,opt,name=record_urn,json=recordUrn,proto3" json:"record_urn,omitempty"` + TemplateUrn string `protobuf:"bytes,3,opt,name=template_urn,json=templateUrn,proto3" json:"template_urn,omitempty"` + TagValues []*TagValue `protobuf:"bytes,4,rep,name=tag_values,json=tagValues,proto3" json:"tag_values,omitempty"` // required + TemplateDisplayName string `protobuf:"bytes,5,opt,name=template_display_name,json=templateDisplayName,proto3" json:"template_display_name,omitempty"` + TemplateDescription string `protobuf:"bytes,6,opt,name=template_description,json=templateDescription,proto3" json:"template_description,omitempty"` } -func (x *UpsertPatchAssetRequest_BaseAsset) Reset() { - *x = UpsertPatchAssetRequest_BaseAsset{} +func (x *UpdateTagRequest) Reset() { + *x = UpdateTagRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[53] + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *UpsertPatchAssetRequest_BaseAsset) String() string { +func (x *UpdateTagRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*UpsertPatchAssetRequest_BaseAsset) ProtoMessage() {} +func (*UpdateTagRequest) ProtoMessage() {} -func (x *UpsertPatchAssetRequest_BaseAsset) ProtoReflect() protoreflect.Message { - mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[53] +func (x *UpdateTagRequest) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3158,1135 +3245,4130 @@ func (x *UpsertPatchAssetRequest_BaseAsset) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use UpsertPatchAssetRequest_BaseAsset.ProtoReflect.Descriptor instead. -func (*UpsertPatchAssetRequest_BaseAsset) Descriptor() ([]byte, []int) { - return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{30, 0} +// Deprecated: Use UpdateTagRequest.ProtoReflect.Descriptor instead. +func (*UpdateTagRequest) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{56} } -func (x *UpsertPatchAssetRequest_BaseAsset) GetUrn() string { +func (x *UpdateTagRequest) GetType() string { if x != nil { - return x.Urn + return x.Type } return "" } -func (x *UpsertPatchAssetRequest_BaseAsset) GetType() string { +func (x *UpdateTagRequest) GetRecordUrn() string { if x != nil { - return x.Type + return x.RecordUrn } return "" } -func (x *UpsertPatchAssetRequest_BaseAsset) GetName() *wrapperspb.StringValue { +func (x *UpdateTagRequest) GetTemplateUrn() string { if x != nil { - return x.Name + return x.TemplateUrn + } + return "" +} + +func (x *UpdateTagRequest) GetTagValues() []*TagValue { + if x != nil { + return x.TagValues } return nil } -func (x *UpsertPatchAssetRequest_BaseAsset) GetService() string { +func (x *UpdateTagRequest) GetTemplateDisplayName() string { if x != nil { - return x.Service + return x.TemplateDisplayName } return "" } -func (x *UpsertPatchAssetRequest_BaseAsset) GetDescription() *wrapperspb.StringValue { +func (x *UpdateTagRequest) GetTemplateDescription() string { if x != nil { - return x.Description + return x.TemplateDescription } - return nil + return "" } -func (x *UpsertPatchAssetRequest_BaseAsset) GetData() *structpb.Struct { +type UpdateTagResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Data *Tag `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` +} + +func (x *UpdateTagResponse) Reset() { + *x = UpdateTagResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[57] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateTagResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateTagResponse) ProtoMessage() {} + +func (x *UpdateTagResponse) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[57] + 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 UpdateTagResponse.ProtoReflect.Descriptor instead. +func (*UpdateTagResponse) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{57} +} + +func (x *UpdateTagResponse) GetData() *Tag { if x != nil { return x.Data } return nil } -func (x *UpsertPatchAssetRequest_BaseAsset) GetLabels() *structpb.Struct { +type DeleteTagRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + RecordUrn string `protobuf:"bytes,2,opt,name=record_urn,json=recordUrn,proto3" json:"record_urn,omitempty"` + TemplateUrn string `protobuf:"bytes,3,opt,name=template_urn,json=templateUrn,proto3" json:"template_urn,omitempty"` +} + +func (x *DeleteTagRequest) Reset() { + *x = DeleteTagRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[58] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteTagRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteTagRequest) ProtoMessage() {} + +func (x *DeleteTagRequest) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[58] + 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 DeleteTagRequest.ProtoReflect.Descriptor instead. +func (*DeleteTagRequest) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{58} +} + +func (x *DeleteTagRequest) GetType() string { if x != nil { - return x.Labels + return x.Type } - return nil + return "" } -var File_odpf_compass_v1beta1_service_proto protoreflect.FileDescriptor +func (x *DeleteTagRequest) GetRecordUrn() string { + if x != nil { + return x.RecordUrn + } + return "" +} -var file_odpf_compass_v1beta1_service_proto_rawDesc = []byte{ - 0x0a, 0x22, 0x6f, 0x64, 0x70, 0x66, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2f, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x14, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, - 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 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, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, - 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, - 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, 0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0x84, 0x04, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x44, 0x69, 0x73, 0x63, 0x75, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x27, 0xfa, 0x42, 0x24, - 0x72, 0x22, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x6e, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x52, 0x06, 0x69, - 0x73, 0x73, 0x75, 0x65, 0x73, 0x52, 0x05, 0x71, 0x61, 0x6e, 0x64, 0x61, 0x52, 0x03, 0x61, 0x6c, - 0x6c, 0xd0, 0x01, 0x01, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x31, 0x0a, 0x05, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1b, 0xfa, 0x42, 0x18, 0x72, 0x16, - 0x52, 0x04, 0x6f, 0x70, 0x65, 0x6e, 0x52, 0x06, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x52, 0x03, - 0x61, 0x6c, 0x6c, 0xd0, 0x01, 0x01, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, - 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, - 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x24, 0x0a, - 0x08, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x08, 0x61, 0x73, 0x73, 0x69, 0x67, - 0x6e, 0x65, 0x65, 0x12, 0x1e, 0x0a, 0x05, 0x61, 0x73, 0x73, 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x05, 0x61, 0x73, - 0x73, 0x65, 0x74, 0x12, 0x20, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x06, 0x6c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x34, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x20, 0xfa, 0x42, 0x1d, 0x72, 0x1b, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x61, 0x74, 0xd0, 0x01, 0x01, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, 0x31, 0x0a, 0x09, 0x64, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x42, 0x13, - 0xfa, 0x42, 0x10, 0x72, 0x0e, 0x52, 0x03, 0x61, 0x73, 0x63, 0x52, 0x04, 0x64, 0x65, 0x73, 0x63, - 0xd0, 0x01, 0x01, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, - 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xfa, 0x42, - 0x06, 0x2a, 0x04, 0x28, 0x00, 0x40, 0x01, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x21, 0x0a, - 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xfa, - 0x42, 0x06, 0x2a, 0x04, 0x28, 0x00, 0x40, 0x01, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x3a, 0x45, 0x92, 0x41, 0x42, 0x0a, 0x40, 0x2a, 0x18, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x44, - 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x32, 0x24, 0x53, 0x6f, 0x6d, 0x65, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x65, 0x74, 0x63, 0x68, 0x20, 0x64, 0x69, 0x73, 0x63, - 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x73, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x41, 0x6c, - 0x6c, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, - 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x3a, 0x20, 0x92, 0x41, 0x1d, 0x0a, - 0x1b, 0x2a, 0x19, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x8b, 0x03, 0x0a, - 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, - 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x1b, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, - 0x62, 0x6f, 0x64, 0x79, 0x12, 0x33, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x1f, 0xfa, 0x42, 0x1c, 0x72, 0x1a, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x6e, 0x65, - 0x6e, 0x64, 0x65, 0x64, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x73, 0x52, 0x05, 0x71, 0x61, - 0x6e, 0x64, 0x61, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x2c, 0x0a, 0x05, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x16, 0xfa, 0x42, 0x13, 0x72, 0x11, 0x52, - 0x04, 0x6f, 0x70, 0x65, 0x6e, 0x52, 0x06, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0xd0, 0x01, 0x01, - 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x22, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x92, 0x01, 0x04, 0x18, - 0x01, 0x28, 0x01, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x22, 0x0a, 0x06, 0x61, - 0x73, 0x73, 0x65, 0x74, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, - 0x92, 0x01, 0x04, 0x18, 0x01, 0x28, 0x01, 0x52, 0x06, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, - 0x28, 0x0a, 0x09, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, - 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x92, 0x01, 0x04, 0x18, 0x01, 0x28, 0x01, 0x52, 0x09, - 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x65, 0x73, 0x3a, 0x5f, 0x92, 0x41, 0x5c, 0x0a, 0x5a, - 0x2a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x32, 0x29, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x6f, - 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0xd2, 0x01, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0xd2, 0x01, 0x04, 0x62, - 0x6f, 0x64, 0x79, 0xd2, 0x01, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x4b, 0x0a, 0x18, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x3a, 0x1f, 0x92, 0x41, 0x1c, 0x0a, 0x1a, 0x2a, 0x18, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x43, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x44, 0x69, - 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x3a, - 0x1b, 0x92, 0x41, 0x18, 0x0a, 0x16, 0x2a, 0x14, 0x47, 0x65, 0x74, 0x44, 0x69, 0x73, 0x63, 0x75, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x6b, 0x0a, 0x15, - 0x47, 0x65, 0x74, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, - 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x75, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x3a, 0x1c, 0x92, 0x41, 0x19, - 0x0a, 0x17, 0x2a, 0x15, 0x47, 0x65, 0x74, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xdd, 0x02, 0x0a, 0x16, 0x50, 0x61, - 0x74, 0x63, 0x68, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x05, 0x74, - 0x69, 0x74, 0x6c, 0x65, 0x12, 0x1c, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x04, 0x62, 0x6f, - 0x64, 0x79, 0x12, 0x36, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x22, 0xfa, 0x42, 0x1f, 0x72, 0x1d, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x6e, 0x65, 0x6e, 0x64, - 0x65, 0x64, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x73, 0x52, 0x05, 0x71, 0x61, 0x6e, 0x64, - 0x61, 0xd0, 0x01, 0x01, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x2c, 0x0a, 0x05, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x16, 0xfa, 0x42, 0x13, 0x72, 0x11, - 0x52, 0x04, 0x6f, 0x70, 0x65, 0x6e, 0x52, 0x06, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0xd0, 0x01, - 0x01, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x22, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x92, 0x01, 0x04, - 0x18, 0x01, 0x28, 0x01, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x22, 0x0a, 0x06, - 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, - 0x07, 0x92, 0x01, 0x04, 0x18, 0x01, 0x28, 0x01, 0x52, 0x06, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, - 0x12, 0x28, 0x0a, 0x09, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x65, 0x73, 0x18, 0x08, 0x20, - 0x03, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x92, 0x01, 0x04, 0x18, 0x01, 0x28, 0x01, 0x52, - 0x09, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x65, 0x73, 0x3a, 0x1d, 0x92, 0x41, 0x1a, 0x0a, - 0x18, 0x2a, 0x16, 0x50, 0x61, 0x74, 0x63, 0x68, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xa4, 0x01, 0x0a, 0x14, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x69, 0x73, 0x63, 0x75, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, - 0x62, 0x6f, 0x64, 0x79, 0x3a, 0x4a, 0x92, 0x41, 0x47, 0x0a, 0x45, 0x2a, 0x14, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x32, 0x26, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, - 0x20, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, - 0x61, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0xd2, 0x01, 0x04, 0x62, 0x6f, 0x64, 0x79, - 0x22, 0x19, 0x0a, 0x17, 0x50, 0x61, 0x74, 0x63, 0x68, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x45, 0x0a, 0x15, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x3a, 0x1c, 0x92, 0x41, 0x19, 0x0a, 0x17, 0x2a, 0x15, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x85, 0x02, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, - 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, - 0x64, 0x12, 0x34, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x20, 0xfa, 0x42, 0x1d, 0x72, 0x1b, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x61, 0x74, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0xd0, 0x01, - 0x01, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, 0x31, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x13, 0xfa, 0x42, 0x10, 0x72, - 0x0e, 0x52, 0x03, 0x61, 0x73, 0x63, 0x52, 0x04, 0x64, 0x65, 0x73, 0x63, 0xd0, 0x01, 0x01, 0x52, - 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x04, 0x73, 0x69, - 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x2a, 0x04, 0x28, - 0x00, 0x40, 0x01, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x21, 0x0a, 0x06, 0x6f, 0x66, 0x66, - 0x73, 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x2a, 0x04, - 0x28, 0x00, 0x40, 0x01, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x3a, 0x1c, 0x92, 0x41, - 0x19, 0x0a, 0x17, 0x2a, 0x15, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x6a, 0x0a, 0x16, 0x47, 0x65, - 0x74, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, - 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x3a, 0x1d, 0x92, 0x41, 0x1a, 0x0a, 0x18, 0x2a, 0x16, - 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x62, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x64, - 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0c, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x3a, 0x18, 0x92, 0x41, 0x15, 0x0a, 0x13, 0x2a, 0x11, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, - 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x62, 0x0a, 0x12, 0x47, 0x65, - 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x31, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, - 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x3a, 0x19, 0x92, 0x41, 0x16, 0x0a, 0x14, 0x2a, 0x12, 0x47, 0x65, 0x74, 0x43, - 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x85, - 0x01, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x69, 0x73, 0x63, 0x75, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x04, - 0x62, 0x6f, 0x64, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, - 0x02, 0x10, 0x01, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x3a, 0x1b, 0x92, 0x41, 0x18, 0x0a, 0x16, - 0x2a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x17, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x68, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x69, 0x73, 0x63, 0x75, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x3a, 0x1b, 0x92, 0x41, - 0x18, 0x0a, 0x16, 0x2a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, - 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x17, 0x0a, 0x15, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x91, 0x06, 0x0a, 0x13, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x41, 0x73, 0x73, - 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x04, 0x74, 0x65, - 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x27, 0x92, 0x41, 0x1c, 0x32, 0x1a, 0x74, - 0x65, 0x78, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, 0x66, 0x6f, - 0x72, 0x20, 0x28, 0x66, 0x75, 0x7a, 0x7a, 0x79, 0x29, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, - 0x01, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0xbe, 0x01, 0x0a, 0x06, 0x72, 0x61, 0x6e, 0x6b, - 0x62, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0xa5, 0x01, 0x92, 0x41, 0x99, 0x01, 0x32, - 0x96, 0x01, 0x64, 0x65, 0x73, 0x63, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x6c, 0x79, 0x20, 0x73, - 0x6f, 0x72, 0x74, 0x20, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x6e, - 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x69, 0x6e, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x2e, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x69, 0x73, 0x20, - 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x70, 0x65, 0x72, - 0x69, 0x6f, 0x64, 0x20, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x66, 0x69, - 0x65, 0x6c, 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x20, 0x65, 0x67, 0x2c, 0x20, 0x22, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x75, 0x73, 0x61, 0x67, - 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, - 0x52, 0x06, 0x72, 0x61, 0x6e, 0x6b, 0x62, 0x79, 0x12, 0xac, 0x01, 0x0a, 0x08, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x62, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x8f, 0x01, 0x92, 0x41, - 0x83, 0x01, 0x32, 0x80, 0x01, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, 0x6f, 0x6e, 0x20, 0x61, - 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x73, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x69, 0x73, 0x20, 0x77, 0x72, 0x69, - 0x74, 0x74, 0x65, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, - 0x20, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, - 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x20, 0x65, 0x67, 0x2c, 0x20, 0x22, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x2e, - 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x08, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x62, 0x79, 0x12, 0x3d, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x29, 0x92, 0x41, 0x1d, 0x32, 0x1b, 0x6e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x74, 0x6f, - 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0xfa, 0x42, 0x06, 0x2a, 0x04, 0x28, 0x00, 0x40, 0x01, - 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x4d, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x66, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x4a, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x06, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x1a, 0x39, 0x0a, 0x0b, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x38, 0x0a, 0x0a, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x47, 0x0a, 0x14, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, - 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, - 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, - 0x94, 0x06, 0x0a, 0x14, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x27, 0x92, 0x41, 0x1c, 0x32, 0x1a, 0x74, 0x65, 0x78, - 0x74, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, 0x66, 0x6f, 0x72, 0x20, - 0x28, 0x66, 0x75, 0x7a, 0x7a, 0x79, 0x29, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, - 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0xbe, 0x01, 0x0a, 0x06, 0x72, 0x61, 0x6e, 0x6b, 0x62, 0x79, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0xa5, 0x01, 0x92, 0x41, 0x99, 0x01, 0x32, 0x96, 0x01, - 0x64, 0x65, 0x73, 0x63, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x6c, 0x79, 0x20, 0x73, 0x6f, 0x72, - 0x74, 0x20, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x6e, 0x75, 0x6d, - 0x65, 0x72, 0x69, 0x63, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x2e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x69, 0x73, 0x20, 0x77, 0x72, - 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x70, 0x65, 0x72, 0x69, 0x6f, - 0x64, 0x20, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x66, 0x69, 0x65, 0x6c, - 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x20, 0x65, 0x67, 0x2c, 0x20, 0x22, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x75, 0x73, 0x61, 0x67, 0x65, 0x5f, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x06, - 0x72, 0x61, 0x6e, 0x6b, 0x62, 0x79, 0x12, 0xac, 0x01, 0x0a, 0x08, 0x73, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x62, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x8f, 0x01, 0x92, 0x41, 0x83, 0x01, - 0x32, 0x80, 0x01, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x73, - 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x20, - 0x66, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x69, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, - 0x65, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x20, 0x73, - 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x6e, - 0x61, 0x6d, 0x65, 0x2e, 0x20, 0x65, 0x67, 0x2c, 0x20, 0x22, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x2e, 0x6e, 0x61, - 0x6d, 0x65, 0x22, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x08, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x62, 0x79, 0x12, 0x3d, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0d, 0x42, 0x29, 0x92, 0x41, 0x1d, 0x32, 0x1b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, - 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0xfa, 0x42, 0x06, 0x2a, 0x04, 0x28, 0x00, 0x40, 0x01, 0x52, 0x04, - 0x73, 0x69, 0x7a, 0x65, 0x12, 0x4e, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x05, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x75, 0x67, 0x67, - 0x65, 0x73, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x66, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x12, 0x4b, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x06, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, - 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x75, 0x67, 0x67, 0x65, - 0x73, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x1a, 0x39, 0x0a, 0x0b, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x38, 0x0a, 0x0a, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2b, 0x0a, 0x15, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, - 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x22, 0x23, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6e, 0x22, 0x49, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x47, - 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x04, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x64, 0x70, - 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x65, 0x61, 0x67, 0x65, 0x45, 0x64, 0x67, 0x65, 0x52, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x22, 0xf2, 0x02, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x73, - 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x74, - 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1b, 0x92, 0x41, 0x10, 0x32, 0x0e, - 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x62, 0x79, 0x20, 0x74, 0x65, 0x78, 0x74, 0xfa, 0x42, - 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x2f, 0x0a, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1b, 0x92, 0x41, 0x10, 0x32, - 0x0e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x62, 0x79, 0x20, 0x74, 0x79, 0x70, 0x65, 0xfa, - 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x38, 0x0a, - 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1e, - 0x92, 0x41, 0x13, 0x32, 0x11, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x62, 0x79, 0x20, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x07, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x37, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x23, 0x92, 0x41, 0x17, 0x32, 0x15, 0x6d, 0x61, 0x78, 0x69, - 0x6d, 0x75, 0x6d, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x65, 0x74, 0x63, - 0x68, 0xfa, 0x42, 0x06, 0x2a, 0x04, 0x28, 0x00, 0x40, 0x01, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, - 0x12, 0x3a, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, - 0x42, 0x22, 0x92, 0x41, 0x16, 0x32, 0x14, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x74, 0x6f, - 0x20, 0x66, 0x65, 0x74, 0x63, 0x68, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0xfa, 0x42, 0x06, 0x2a, 0x04, - 0x28, 0x00, 0x40, 0x01, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x4a, 0x0a, 0x0a, - 0x77, 0x69, 0x74, 0x68, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, - 0x42, 0x2b, 0x92, 0x41, 0x28, 0x32, 0x26, 0x69, 0x66, 0x20, 0x73, 0x65, 0x74, 0x20, 0x69, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x20, 0x66, 0x69, 0x65, 0x6c, - 0x64, 0x20, 0x69, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x09, 0x77, - 0x69, 0x74, 0x68, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0x5d, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x41, - 0x6c, 0x6c, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x2f, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, - 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, - 0x61, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0x25, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x41, 0x73, - 0x73, 0x65, 0x74, 0x42, 0x79, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x47, - 0x0a, 0x14, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, 0x79, 0x49, 0x44, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, - 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x85, 0x04, 0x0a, 0x12, 0x55, 0x70, 0x73, 0x65, - 0x72, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x48, - 0x0a, 0x05, 0x61, 0x73, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, - 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x41, 0x73, 0x73, 0x65, - 0x74, 0x52, 0x05, 0x61, 0x73, 0x73, 0x65, 0x74, 0x12, 0x3f, 0x0a, 0x09, 0x75, 0x70, 0x73, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x64, - 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x65, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x09, - 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x12, 0x43, 0x0a, 0x0b, 0x64, 0x6f, 0x77, - 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, - 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x65, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x64, - 0x65, 0x52, 0x0b, 0x64, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x1a, 0x9e, - 0x02, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, - 0x75, 0x72, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6e, 0x12, 0x12, - 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x46, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x24, 0x92, 0x41, 0x19, 0x32, 0x17, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, - 0x73, 0x65, 0x74, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x0b, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, - 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x48, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x42, 0x17, - 0x92, 0x41, 0x14, 0x32, 0x12, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, - 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x22, - 0x25, 0x0a, 0x13, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x89, 0x05, 0x0a, 0x17, 0x55, 0x70, 0x73, 0x65, 0x72, - 0x74, 0x50, 0x61, 0x74, 0x63, 0x68, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x05, 0x61, 0x73, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x37, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x50, - 0x61, 0x74, 0x63, 0x68, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x2e, 0x42, 0x61, 0x73, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x05, 0x61, 0x73, 0x73, 0x65, - 0x74, 0x12, 0x3f, 0x0a, 0x09, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x65, - 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x73, 0x12, 0x43, 0x0a, 0x0b, 0x64, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, - 0x69, 0x6e, 0x65, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x0b, 0x64, 0x6f, 0x77, 0x6e, - 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x1a, 0x98, 0x03, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x65, - 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x4f, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x1d, 0x92, 0x41, 0x12, 0x32, 0x10, 0x6e, 0x61, - 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0xfa, 0x42, - 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x24, 0x92, 0x41, 0x19, 0x32, 0x17, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x61, - 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, - 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4a, 0x0a, 0x04, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x42, 0x1d, 0x92, 0x41, 0x1a, 0x32, 0x18, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, - 0x63, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, - 0x65, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x48, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x42, 0x17, 0x92, 0x41, 0x14, 0x32, 0x12, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x20, 0x6f, - 0x66, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x22, 0x2a, 0x0a, 0x18, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x50, 0x61, 0x74, 0x63, - 0x68, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x24, - 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x22, 0x15, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x73, - 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6d, 0x0a, 0x19, 0x47, - 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x53, 0x74, 0x61, 0x72, 0x67, 0x61, 0x7a, 0x65, 0x72, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x2a, 0x04, 0x28, 0x00, 0x40, - 0x01, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x21, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, - 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x2a, 0x04, 0x28, 0x00, - 0x40, 0x01, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x4c, 0x0a, 0x1a, 0x47, 0x65, - 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x53, 0x74, 0x61, 0x72, 0x67, 0x61, 0x7a, 0x65, 0x72, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x73, - 0x65, 0x72, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x71, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x41, - 0x73, 0x73, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x69, 0x73, 0x74, 0x6f, - 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x04, 0x73, 0x69, 0x7a, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x2a, 0x04, 0x28, 0x00, - 0x40, 0x01, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x21, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, - 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x2a, 0x04, 0x28, - 0x00, 0x40, 0x01, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x51, 0x0a, 0x1e, 0x47, - 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x69, - 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, - 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x64, - 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x44, - 0x0a, 0x18, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, 0x79, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x4c, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, - 0x42, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x2f, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1b, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x04, 0x64, 0x61, - 0x74, 0x61, 0x22, 0xdf, 0x01, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x75, - 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, - 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 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, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 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, 0x52, 0x09, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x3a, 0x0b, 0x92, 0x41, 0x08, 0x0a, 0x06, 0x2a, 0x04, - 0x55, 0x73, 0x65, 0x72, 0x22, 0x55, 0x0a, 0x09, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x6c, 0x6f, - 0x67, 0x12, 0x36, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, - 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x3a, 0x10, 0x92, 0x41, 0x0d, 0x0a, 0x0b, - 0x2a, 0x09, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x6c, 0x6f, 0x67, 0x22, 0x93, 0x01, 0x0a, 0x06, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, - 0x74, 0x68, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x2a, - 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x26, 0x0a, 0x02, 0x74, 0x6f, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x02, - 0x74, 0x6f, 0x3a, 0x0d, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x2a, 0x06, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x22, 0xb7, 0x04, 0x0a, 0x05, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, - 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6e, 0x12, 0x12, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x2b, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2f, - 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, - 0x32, 0x0a, 0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x06, 0x6f, 0x77, 0x6e, - 0x65, 0x72, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, - 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x09, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x12, 0x3d, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x6c, 0x6f, 0x67, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x64, - 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x6c, 0x6f, 0x67, 0x52, 0x09, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x6c, 0x6f, 0x67, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x61, 0x74, 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, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, - 0x18, 0x0e, 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, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x3a, 0x0c, 0x92, - 0x41, 0x09, 0x0a, 0x07, 0x2a, 0x05, 0x41, 0x73, 0x73, 0x65, 0x74, 0x22, 0xf9, 0x02, 0x0a, 0x0a, - 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, - 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x62, 0x6f, 0x64, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, - 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, - 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, - 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x1c, - 0x0a, 0x09, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x09, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x05, - 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x64, - 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x39, - 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 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, 0x52, 0x09, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0b, 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, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x3a, 0x11, 0x92, 0x41, 0x0e, 0x0a, 0x0c, 0x2a, 0x0a, 0x44, 0x69, 0x73, - 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xc5, 0x02, 0x0a, 0x07, 0x43, 0x6f, 0x6d, 0x6d, - 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x69, 0x73, 0x63, - 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x30, 0x0a, 0x05, - 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x64, - 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x39, - 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, - 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x09, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 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, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x61, 0x74, 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, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x3a, - 0x0e, 0x92, 0x41, 0x0b, 0x0a, 0x09, 0x2a, 0x07, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x22, - 0x6a, 0x0a, 0x0b, 0x4c, 0x69, 0x6e, 0x65, 0x61, 0x67, 0x65, 0x45, 0x64, 0x67, 0x65, 0x12, 0x16, - 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x2b, - 0x0a, 0x04, 0x70, 0x72, 0x6f, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x04, 0x70, 0x72, 0x6f, 0x70, 0x22, 0x4d, 0x0a, 0x0b, 0x4c, - 0x69, 0x6e, 0x65, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6e, 0x12, 0x12, 0x0a, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x32, 0xfd, 0x24, 0x0a, 0x0e, 0x43, - 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xb6, 0x01, - 0x0a, 0x11, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x2e, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, - 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, - 0x6c, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, - 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, - 0x6c, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x40, 0x92, 0x41, 0x21, 0x0a, 0x0a, 0x44, 0x69, 0x73, 0x63, 0x75, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x13, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x64, - 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, - 0x12, 0x14, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x64, 0x69, 0x73, 0x63, 0x75, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xb6, 0x01, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x2e, 0x6f, 0x64, - 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6f, 0x64, 0x70, - 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x43, 0x92, 0x41, 0x21, 0x0a, - 0x0a, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x13, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x14, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2f, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x01, 0x2a, 0x12, - 0xac, 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x2a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x69, 0x73, 0x63, - 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, - 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x42, 0x92, 0x41, 0x1e, 0x0a, - 0x0a, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x47, 0x65, 0x74, - 0x20, 0x61, 0x20, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x64, 0x69, - 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xb7, - 0x01, 0x0a, 0x0f, 0x50, 0x61, 0x74, 0x63, 0x68, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x2c, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, - 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x44, - 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2d, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x44, 0x69, 0x73, - 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x47, 0x92, 0x41, 0x20, 0x0a, 0x0a, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x12, 0x12, 0x50, 0x61, 0x74, 0x63, 0x68, 0x20, 0x61, 0x20, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x32, 0x19, 0x2f, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2f, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xdc, 0x01, 0x0a, 0x0d, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2a, 0x2e, 0x6f, 0x64, 0x70, - 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x72, 0x92, 0x41, 0x37, 0x0a, 0x0a, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x0a, 0x07, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x20, - 0x6f, 0x66, 0x20, 0x61, 0x20, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x22, 0x2d, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, - 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x73, - 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xdc, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x41, - 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2b, 0x2e, 0x6f, 0x64, 0x70, - 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6f, 0x92, 0x41, 0x37, 0x0a, 0x0a, 0x44, 0x69, 0x73, 0x63, - 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x0a, 0x07, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, - 0x20, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x12, 0x2d, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2f, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x64, - 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, - 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0xd2, 0x01, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x43, 0x6f, - 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x27, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, - 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x71, 0x92, 0x41, 0x34, 0x0a, 0x0a, 0x44, - 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x0a, 0x07, 0x43, 0x6f, 0x6d, 0x6d, 0x65, - 0x6e, 0x74, 0x12, 0x1d, 0x47, 0x65, 0x74, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, - 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x12, 0x32, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2f, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x64, - 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, - 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xe1, 0x01, 0x0a, 0x0d, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2a, 0x2e, - 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, - 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x6f, 0x64, 0x70, 0x66, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x77, 0x92, 0x41, 0x37, 0x0a, 0x0a, 0x44, 0x69, 0x73, - 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x0a, 0x07, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, - 0x12, 0x20, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, - 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x1a, 0x32, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2f, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, - 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, - 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, - 0xde, 0x01, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, - 0x74, 0x12, 0x2a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, - 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, - 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, - 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x74, 0x92, 0x41, 0x37, 0x0a, - 0x0a, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x0a, 0x07, 0x43, 0x6f, 0x6d, - 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, 0x20, 0x63, - 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x64, 0x69, 0x73, 0x63, - 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x2a, 0x32, 0x2f, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, - 0x12, 0xf0, 0x04, 0x0a, 0x0c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x41, 0x73, 0x73, 0x65, 0x74, - 0x73, 0x12, 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x41, - 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x6f, - 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x88, 0x04, 0x92, 0x41, 0xed, 0x03, 0x0a, - 0x06, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x0a, 0x05, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x13, - 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, - 0x73, 0x65, 0x74, 0x1a, 0xc6, 0x03, 0x41, 0x50, 0x49, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x2e, 0x20, 0x27, 0x74, 0x65, 0x78, 0x74, 0x27, 0x20, 0x69, 0x73, 0x20, 0x66, 0x75, 0x7a, 0x7a, - 0x79, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x20, 0x61, 0x67, 0x61, 0x69, 0x6e, 0x73, - 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, - 0x62, 0x6c, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x73, 0x2c, 0x20, 0x61, 0x6e, - 0x64, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x2e, 0x20, - 0x59, 0x6f, 0x75, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x20, - 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, - 0x20, 0x63, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, - 0x27, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x2a, 0x27, 0x20, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x20, 0x59, 0x6f, 0x75, - 0x20, 0x63, 0x61, 0x6e, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x20, 0x65, 0x61, 0x63, - 0x68, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, - 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, - 0x66, 0x79, 0x20, 0x61, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x6f, 0x73, 0x65, 0x20, 0x66, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x73, 0x2e, 0x20, 0x46, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x2c, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x20, 0x74, - 0x77, 0x6f, 0x20, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x63, 0x61, 0x70, 0x65, 0x20, 0x27, 0x76, 0x6e, - 0x27, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x27, 0x74, 0x68, 0x27, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x20, 0x63, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x60, - 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x2f, 0x3f, 0x74, 0x65, 0x78, 0x74, 0x3d, 0x3c, 0x74, - 0x65, 0x78, 0x74, 0x3e, 0x26, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x65, 0x6e, 0x76, 0x69, - 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x3d, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x26, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x6c, 0x61, 0x6e, 0x64, 0x73, - 0x63, 0x61, 0x70, 0x65, 0x3d, 0x76, 0x6e, 0x26, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x6c, - 0x61, 0x6e, 0x64, 0x73, 0x63, 0x61, 0x70, 0x65, 0x3d, 0x74, 0x68, 0x60, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x12, 0xad, 0x01, 0x0a, 0x0d, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x41, - 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x2a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x75, 0x67, - 0x67, 0x65, 0x73, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2b, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, - 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x43, - 0x92, 0x41, 0x21, 0x0a, 0x06, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x0a, 0x05, 0x41, 0x73, 0x73, - 0x65, 0x74, 0x12, 0x10, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x20, 0x61, 0x6e, 0x20, 0x61, - 0x73, 0x73, 0x65, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x2f, 0x73, 0x75, 0x67, 0x67, - 0x65, 0x73, 0x74, 0x12, 0xbe, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, - 0x12, 0x25, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x63, 0x92, 0x41, 0x42, 0x0a, 0x07, 0x4c, 0x69, 0x6e, 0x65, 0x61, 0x67, 0x65, 0x0a, 0x05, 0x41, - 0x73, 0x73, 0x65, 0x74, 0x12, 0x11, 0x47, 0x65, 0x74, 0x20, 0x4c, 0x69, 0x6e, 0x65, 0x61, 0x67, - 0x65, 0x20, 0x47, 0x72, 0x61, 0x70, 0x68, 0x1a, 0x1d, 0x47, 0x65, 0x74, 0x20, 0x6c, 0x69, 0x6e, - 0x65, 0x61, 0x67, 0x65, 0x20, 0x67, 0x72, 0x61, 0x70, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, - 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x67, 0x65, 0x2f, 0x7b, - 0x75, 0x72, 0x6e, 0x7d, 0x12, 0xdd, 0x01, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x41, - 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x41, 0x6c, 0x6c, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x73, - 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x76, 0x92, 0x41, - 0x5c, 0x0a, 0x05, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x12, 0x47, 0x65, 0x74, 0x20, 0x6c, 0x69, - 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x1a, 0x3f, 0x52, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x73, - 0x73, 0x65, 0x74, 0x73, 0x2c, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, - 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x79, 0x70, - 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x73, - 0x73, 0x65, 0x74, 0x73, 0x12, 0xc2, 0x01, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, - 0x74, 0x42, 0x79, 0x49, 0x44, 0x12, 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, 0x79, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, - 0x42, 0x79, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5b, 0x92, 0x41, - 0x3c, 0x0a, 0x05, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x0d, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x61, - 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x1a, 0x24, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, - 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x20, - 0x77, 0x69, 0x74, 0x68, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x73, - 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x81, 0x02, 0x0a, 0x0b, 0x55, 0x70, - 0x73, 0x65, 0x72, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x28, 0x2e, 0x6f, 0x64, 0x70, 0x66, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, - 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, - 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9c, - 0x01, 0x92, 0x41, 0x7f, 0x0a, 0x05, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x0f, 0x55, 0x70, 0x73, - 0x65, 0x72, 0x74, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x1a, 0x65, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, - 0x20, 0x69, 0x66, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x75, 0x72, 0x6e, 0x2c, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x61, - 0x6e, 0x64, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, - 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x20, 0x49, 0x66, 0x20, 0x65, 0x78, - 0x69, 0x73, 0x74, 0x73, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x69, 0x6e, 0x73, 0x74, - 0x65, 0x61, 0x64, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x1a, 0x0f, 0x2f, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xf4, 0x01, - 0x0a, 0x10, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x50, 0x61, 0x74, 0x63, 0x68, 0x41, 0x73, 0x73, - 0x65, 0x74, 0x12, 0x2d, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, - 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, - 0x50, 0x61, 0x74, 0x63, 0x68, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2e, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x50, - 0x61, 0x74, 0x63, 0x68, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x80, 0x01, 0x92, 0x41, 0x63, 0x0a, 0x05, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x15, - 0x50, 0x61, 0x74, 0x63, 0x68, 0x2f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, 0x6e, 0x20, - 0x61, 0x73, 0x73, 0x65, 0x74, 0x1a, 0x43, 0x53, 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x20, 0x74, - 0x6f, 0x20, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x20, 0x62, 0x75, 0x74, 0x20, 0x77, 0x69, 0x74, - 0x68, 0x20, 0x70, 0x61, 0x74, 0x63, 0x68, 0x20, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x62, - 0x6f, 0x64, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, - 0x32, 0x0f, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, - 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xc0, 0x01, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, - 0x73, 0x73, 0x65, 0x74, 0x12, 0x28, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, - 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x73, 0x73, 0x65, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5c, 0x92, 0x41, 0x3d, 0x0a, 0x05, - 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, 0x6e, - 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x1a, 0x23, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, - 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x20, 0x77, 0x69, - 0x74, 0x68, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x16, 0x2a, 0x14, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x73, 0x73, 0x65, - 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xf7, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x41, - 0x73, 0x73, 0x65, 0x74, 0x53, 0x74, 0x61, 0x72, 0x67, 0x61, 0x7a, 0x65, 0x72, 0x73, 0x12, 0x2f, - 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x53, 0x74, - 0x61, 0x72, 0x67, 0x61, 0x7a, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x30, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x53, - 0x74, 0x61, 0x72, 0x67, 0x61, 0x7a, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x7e, 0x92, 0x41, 0x54, 0x0a, 0x05, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x1e, 0x46, - 0x69, 0x6e, 0x64, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x73, - 0x74, 0x61, 0x72, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x1a, 0x2b, 0x52, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, - 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, - 0x73, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, - 0x12, 0x1f, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, - 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x67, 0x61, 0x7a, 0x65, 0x72, - 0x73, 0x12, 0xfe, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x33, 0x2e, 0x6f, - 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x34, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, - 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x79, 0x92, 0x41, 0x51, 0x0a, 0x05, 0x41, 0x73, - 0x73, 0x65, 0x74, 0x12, 0x1f, 0x47, 0x65, 0x74, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x20, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x61, - 0x73, 0x73, 0x65, 0x74, 0x1a, 0x27, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x20, - 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x20, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x73, - 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0xf5, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, - 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7f, 0x92, 0x41, 0x4d, 0x0a, 0x05, - 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x1c, 0x47, 0x65, 0x74, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, - 0x27, 0x73, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x20, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x1a, 0x26, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x73, - 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, - 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x29, 0x12, 0x27, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x73, 0x73, 0x65, - 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x2f, 0x7b, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x7d, 0x42, 0xe3, 0x02, 0x0a, 0x16, 0x69, - 0x6f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x73, 0x73, 0x42, 0x13, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x35, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x64, 0x70, 0x66, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2f, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x92, 0x41, 0xf9, 0x01, 0x12, 0x97, 0x01, 0x0a, 0x07, 0x43, 0x6f, 0x6d, 0x70, - 0x61, 0x73, 0x73, 0x12, 0x3c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x6f, 0x75, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x73, - 0x73, 0x20, 0x41, 0x50, 0x49, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x67, 0x52, 0x50, 0x43, 0x20, - 0x61, 0x6e, 0x64, 0x20, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x2a, 0x47, 0x0a, 0x12, 0x41, 0x70, 0x61, 0x63, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, - 0x6e, 0x73, 0x65, 0x20, 0x32, 0x2e, 0x30, 0x12, 0x31, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, - 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x64, 0x70, 0x66, - 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, - 0x69, 0x6e, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x32, 0x05, 0x30, 0x2e, 0x31, 0x2e, - 0x39, 0x2a, 0x01, 0x01, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x72, 0x36, 0x0a, 0x12, 0x4d, 0x6f, 0x72, 0x65, - 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x12, 0x20, - 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x67, 0x69, 0x74, - 0x62, 0x6f, 0x6f, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2f, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +func (x *DeleteTagRequest) GetTemplateUrn() string { + if x != nil { + return x.TemplateUrn + } + return "" } -var ( - file_odpf_compass_v1beta1_service_proto_rawDescOnce sync.Once - file_odpf_compass_v1beta1_service_proto_rawDescData = file_odpf_compass_v1beta1_service_proto_rawDesc -) +type DeleteTagResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} -func file_odpf_compass_v1beta1_service_proto_rawDescGZIP() []byte { - file_odpf_compass_v1beta1_service_proto_rawDescOnce.Do(func() { - file_odpf_compass_v1beta1_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_odpf_compass_v1beta1_service_proto_rawDescData) - }) - return file_odpf_compass_v1beta1_service_proto_rawDescData +func (x *DeleteTagResponse) Reset() { + *x = DeleteTagResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[59] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -var file_odpf_compass_v1beta1_service_proto_msgTypes = make([]protoimpl.MessageInfo, 54) -var file_odpf_compass_v1beta1_service_proto_goTypes = []interface{}{ - (*GetAllDiscussionsRequest)(nil), // 0: odpf.compass.v1beta1.GetAllDiscussionsRequest - (*GetAllDiscussionsResponse)(nil), // 1: odpf.compass.v1beta1.GetAllDiscussionsResponse - (*CreateDiscussionRequest)(nil), // 2: odpf.compass.v1beta1.CreateDiscussionRequest - (*CreateDiscussionResponse)(nil), // 3: odpf.compass.v1beta1.CreateDiscussionResponse - (*GetDiscussionRequest)(nil), // 4: odpf.compass.v1beta1.GetDiscussionRequest - (*GetDiscussionResponse)(nil), // 5: odpf.compass.v1beta1.GetDiscussionResponse - (*PatchDiscussionRequest)(nil), // 6: odpf.compass.v1beta1.PatchDiscussionRequest - (*CreateCommentRequest)(nil), // 7: odpf.compass.v1beta1.CreateCommentRequest - (*PatchDiscussionResponse)(nil), // 8: odpf.compass.v1beta1.PatchDiscussionResponse - (*CreateCommentResponse)(nil), // 9: odpf.compass.v1beta1.CreateCommentResponse - (*GetAllCommentsRequest)(nil), // 10: odpf.compass.v1beta1.GetAllCommentsRequest - (*GetAllCommentsResponse)(nil), // 11: odpf.compass.v1beta1.GetAllCommentsResponse - (*GetCommentRequest)(nil), // 12: odpf.compass.v1beta1.GetCommentRequest - (*GetCommentResponse)(nil), // 13: odpf.compass.v1beta1.GetCommentResponse - (*UpdateCommentRequest)(nil), // 14: odpf.compass.v1beta1.UpdateCommentRequest - (*UpdateCommentResponse)(nil), // 15: odpf.compass.v1beta1.UpdateCommentResponse - (*DeleteCommentRequest)(nil), // 16: odpf.compass.v1beta1.DeleteCommentRequest - (*DeleteCommentResponse)(nil), // 17: odpf.compass.v1beta1.DeleteCommentResponse - (*SearchAssetsRequest)(nil), // 18: odpf.compass.v1beta1.SearchAssetsRequest - (*SearchAssetsResponse)(nil), // 19: odpf.compass.v1beta1.SearchAssetsResponse - (*SuggestAssetsRequest)(nil), // 20: odpf.compass.v1beta1.SuggestAssetsRequest - (*SuggestAssetsResponse)(nil), // 21: odpf.compass.v1beta1.SuggestAssetsResponse - (*GetGraphRequest)(nil), // 22: odpf.compass.v1beta1.GetGraphRequest - (*GetGraphResponse)(nil), // 23: odpf.compass.v1beta1.GetGraphResponse - (*GetAllAssetsRequest)(nil), // 24: odpf.compass.v1beta1.GetAllAssetsRequest - (*GetAllAssetsResponse)(nil), // 25: odpf.compass.v1beta1.GetAllAssetsResponse - (*GetAssetByIDRequest)(nil), // 26: odpf.compass.v1beta1.GetAssetByIDRequest - (*GetAssetByIDResponse)(nil), // 27: odpf.compass.v1beta1.GetAssetByIDResponse - (*UpsertAssetRequest)(nil), // 28: odpf.compass.v1beta1.UpsertAssetRequest - (*UpsertAssetResponse)(nil), // 29: odpf.compass.v1beta1.UpsertAssetResponse - (*UpsertPatchAssetRequest)(nil), // 30: odpf.compass.v1beta1.UpsertPatchAssetRequest - (*UpsertPatchAssetResponse)(nil), // 31: odpf.compass.v1beta1.UpsertPatchAssetResponse - (*DeleteAssetRequest)(nil), // 32: odpf.compass.v1beta1.DeleteAssetRequest - (*DeleteAssetResponse)(nil), // 33: odpf.compass.v1beta1.DeleteAssetResponse - (*GetAssetStargazersRequest)(nil), // 34: odpf.compass.v1beta1.GetAssetStargazersRequest - (*GetAssetStargazersResponse)(nil), // 35: odpf.compass.v1beta1.GetAssetStargazersResponse - (*GetAssetVersionHistoryRequest)(nil), // 36: odpf.compass.v1beta1.GetAssetVersionHistoryRequest - (*GetAssetVersionHistoryResponse)(nil), // 37: odpf.compass.v1beta1.GetAssetVersionHistoryResponse - (*GetAssetByVersionRequest)(nil), // 38: odpf.compass.v1beta1.GetAssetByVersionRequest - (*GetAssetByVersionResponse)(nil), // 39: odpf.compass.v1beta1.GetAssetByVersionResponse - (*User)(nil), // 40: odpf.compass.v1beta1.User - (*Changelog)(nil), // 41: odpf.compass.v1beta1.Changelog - (*Change)(nil), // 42: odpf.compass.v1beta1.Change - (*Asset)(nil), // 43: odpf.compass.v1beta1.Asset - (*Discussion)(nil), // 44: odpf.compass.v1beta1.Discussion - (*Comment)(nil), // 45: odpf.compass.v1beta1.Comment - (*LineageEdge)(nil), // 46: odpf.compass.v1beta1.LineageEdge - (*LineageNode)(nil), // 47: odpf.compass.v1beta1.LineageNode - nil, // 48: odpf.compass.v1beta1.SearchAssetsRequest.FilterEntry - nil, // 49: odpf.compass.v1beta1.SearchAssetsRequest.QueryEntry - nil, // 50: odpf.compass.v1beta1.SuggestAssetsRequest.FilterEntry - nil, // 51: odpf.compass.v1beta1.SuggestAssetsRequest.QueryEntry - (*UpsertAssetRequest_BaseAsset)(nil), // 52: odpf.compass.v1beta1.UpsertAssetRequest.BaseAsset - (*UpsertPatchAssetRequest_BaseAsset)(nil), // 53: odpf.compass.v1beta1.UpsertPatchAssetRequest.BaseAsset - (*timestamppb.Timestamp)(nil), // 54: google.protobuf.Timestamp - (*structpb.Value)(nil), // 55: google.protobuf.Value - (*structpb.Struct)(nil), // 56: google.protobuf.Struct - (*wrapperspb.StringValue)(nil), // 57: google.protobuf.StringValue +func (x *DeleteTagResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -var file_odpf_compass_v1beta1_service_proto_depIdxs = []int32{ - 44, // 0: odpf.compass.v1beta1.GetAllDiscussionsResponse.data:type_name -> odpf.compass.v1beta1.Discussion - 44, // 1: odpf.compass.v1beta1.GetDiscussionResponse.data:type_name -> odpf.compass.v1beta1.Discussion - 45, // 2: odpf.compass.v1beta1.GetAllCommentsResponse.data:type_name -> odpf.compass.v1beta1.Comment - 45, // 3: odpf.compass.v1beta1.GetCommentResponse.data:type_name -> odpf.compass.v1beta1.Comment - 48, // 4: odpf.compass.v1beta1.SearchAssetsRequest.filter:type_name -> odpf.compass.v1beta1.SearchAssetsRequest.FilterEntry - 49, // 5: odpf.compass.v1beta1.SearchAssetsRequest.query:type_name -> odpf.compass.v1beta1.SearchAssetsRequest.QueryEntry - 43, // 6: odpf.compass.v1beta1.SearchAssetsResponse.data:type_name -> odpf.compass.v1beta1.Asset - 50, // 7: odpf.compass.v1beta1.SuggestAssetsRequest.filter:type_name -> odpf.compass.v1beta1.SuggestAssetsRequest.FilterEntry - 51, // 8: odpf.compass.v1beta1.SuggestAssetsRequest.query:type_name -> odpf.compass.v1beta1.SuggestAssetsRequest.QueryEntry - 46, // 9: odpf.compass.v1beta1.GetGraphResponse.data:type_name -> odpf.compass.v1beta1.LineageEdge - 43, // 10: odpf.compass.v1beta1.GetAllAssetsResponse.data:type_name -> odpf.compass.v1beta1.Asset - 43, // 11: odpf.compass.v1beta1.GetAssetByIDResponse.data:type_name -> odpf.compass.v1beta1.Asset - 52, // 12: odpf.compass.v1beta1.UpsertAssetRequest.asset:type_name -> odpf.compass.v1beta1.UpsertAssetRequest.BaseAsset - 47, // 13: odpf.compass.v1beta1.UpsertAssetRequest.upstreams:type_name -> odpf.compass.v1beta1.LineageNode - 47, // 14: odpf.compass.v1beta1.UpsertAssetRequest.downstreams:type_name -> odpf.compass.v1beta1.LineageNode - 53, // 15: odpf.compass.v1beta1.UpsertPatchAssetRequest.asset:type_name -> odpf.compass.v1beta1.UpsertPatchAssetRequest.BaseAsset - 47, // 16: odpf.compass.v1beta1.UpsertPatchAssetRequest.upstreams:type_name -> odpf.compass.v1beta1.LineageNode - 47, // 17: odpf.compass.v1beta1.UpsertPatchAssetRequest.downstreams:type_name -> odpf.compass.v1beta1.LineageNode - 40, // 18: odpf.compass.v1beta1.GetAssetStargazersResponse.data:type_name -> odpf.compass.v1beta1.User - 43, // 19: odpf.compass.v1beta1.GetAssetVersionHistoryResponse.data:type_name -> odpf.compass.v1beta1.Asset - 43, // 20: odpf.compass.v1beta1.GetAssetByVersionResponse.data:type_name -> odpf.compass.v1beta1.Asset - 54, // 21: odpf.compass.v1beta1.User.created_at:type_name -> google.protobuf.Timestamp - 54, // 22: odpf.compass.v1beta1.User.updated_at:type_name -> google.protobuf.Timestamp - 42, // 23: odpf.compass.v1beta1.Changelog.changes:type_name -> odpf.compass.v1beta1.Change - 55, // 24: odpf.compass.v1beta1.Change.from:type_name -> google.protobuf.Value - 55, // 25: odpf.compass.v1beta1.Change.to:type_name -> google.protobuf.Value - 56, // 26: odpf.compass.v1beta1.Asset.data:type_name -> google.protobuf.Struct - 56, // 27: odpf.compass.v1beta1.Asset.labels:type_name -> google.protobuf.Struct - 40, // 28: odpf.compass.v1beta1.Asset.owners:type_name -> odpf.compass.v1beta1.User - 40, // 29: odpf.compass.v1beta1.Asset.updated_by:type_name -> odpf.compass.v1beta1.User - 41, // 30: odpf.compass.v1beta1.Asset.changelog:type_name -> odpf.compass.v1beta1.Changelog - 54, // 31: odpf.compass.v1beta1.Asset.created_at:type_name -> google.protobuf.Timestamp - 54, // 32: odpf.compass.v1beta1.Asset.updated_at:type_name -> google.protobuf.Timestamp - 40, // 33: odpf.compass.v1beta1.Discussion.owner:type_name -> odpf.compass.v1beta1.User - 54, // 34: odpf.compass.v1beta1.Discussion.created_at:type_name -> google.protobuf.Timestamp - 54, // 35: odpf.compass.v1beta1.Discussion.updated_at:type_name -> google.protobuf.Timestamp - 40, // 36: odpf.compass.v1beta1.Comment.owner:type_name -> odpf.compass.v1beta1.User - 40, // 37: odpf.compass.v1beta1.Comment.updated_by:type_name -> odpf.compass.v1beta1.User - 54, // 38: odpf.compass.v1beta1.Comment.created_at:type_name -> google.protobuf.Timestamp - 54, // 39: odpf.compass.v1beta1.Comment.updated_at:type_name -> google.protobuf.Timestamp - 56, // 40: odpf.compass.v1beta1.LineageEdge.prop:type_name -> google.protobuf.Struct - 56, // 41: odpf.compass.v1beta1.UpsertAssetRequest.BaseAsset.data:type_name -> google.protobuf.Struct - 56, // 42: odpf.compass.v1beta1.UpsertAssetRequest.BaseAsset.labels:type_name -> google.protobuf.Struct - 57, // 43: odpf.compass.v1beta1.UpsertPatchAssetRequest.BaseAsset.name:type_name -> google.protobuf.StringValue - 57, // 44: odpf.compass.v1beta1.UpsertPatchAssetRequest.BaseAsset.description:type_name -> google.protobuf.StringValue - 56, // 45: odpf.compass.v1beta1.UpsertPatchAssetRequest.BaseAsset.data:type_name -> google.protobuf.Struct - 56, // 46: odpf.compass.v1beta1.UpsertPatchAssetRequest.BaseAsset.labels:type_name -> google.protobuf.Struct - 0, // 47: odpf.compass.v1beta1.CompassService.GetAllDiscussions:input_type -> odpf.compass.v1beta1.GetAllDiscussionsRequest - 2, // 48: odpf.compass.v1beta1.CompassService.CreateDiscussion:input_type -> odpf.compass.v1beta1.CreateDiscussionRequest - 4, // 49: odpf.compass.v1beta1.CompassService.GetDiscussion:input_type -> odpf.compass.v1beta1.GetDiscussionRequest - 6, // 50: odpf.compass.v1beta1.CompassService.PatchDiscussion:input_type -> odpf.compass.v1beta1.PatchDiscussionRequest - 7, // 51: odpf.compass.v1beta1.CompassService.CreateComment:input_type -> odpf.compass.v1beta1.CreateCommentRequest - 10, // 52: odpf.compass.v1beta1.CompassService.GetAllComments:input_type -> odpf.compass.v1beta1.GetAllCommentsRequest - 12, // 53: odpf.compass.v1beta1.CompassService.GetComment:input_type -> odpf.compass.v1beta1.GetCommentRequest - 14, // 54: odpf.compass.v1beta1.CompassService.UpdateComment:input_type -> odpf.compass.v1beta1.UpdateCommentRequest - 16, // 55: odpf.compass.v1beta1.CompassService.DeleteComment:input_type -> odpf.compass.v1beta1.DeleteCommentRequest - 18, // 56: odpf.compass.v1beta1.CompassService.SearchAssets:input_type -> odpf.compass.v1beta1.SearchAssetsRequest - 20, // 57: odpf.compass.v1beta1.CompassService.SuggestAssets:input_type -> odpf.compass.v1beta1.SuggestAssetsRequest - 22, // 58: odpf.compass.v1beta1.CompassService.GetGraph:input_type -> odpf.compass.v1beta1.GetGraphRequest - 24, // 59: odpf.compass.v1beta1.CompassService.GetAllAssets:input_type -> odpf.compass.v1beta1.GetAllAssetsRequest - 26, // 60: odpf.compass.v1beta1.CompassService.GetAssetByID:input_type -> odpf.compass.v1beta1.GetAssetByIDRequest - 28, // 61: odpf.compass.v1beta1.CompassService.UpsertAsset:input_type -> odpf.compass.v1beta1.UpsertAssetRequest - 30, // 62: odpf.compass.v1beta1.CompassService.UpsertPatchAsset:input_type -> odpf.compass.v1beta1.UpsertPatchAssetRequest - 32, // 63: odpf.compass.v1beta1.CompassService.DeleteAsset:input_type -> odpf.compass.v1beta1.DeleteAssetRequest - 34, // 64: odpf.compass.v1beta1.CompassService.GetAssetStargazers:input_type -> odpf.compass.v1beta1.GetAssetStargazersRequest - 36, // 65: odpf.compass.v1beta1.CompassService.GetAssetVersionHistory:input_type -> odpf.compass.v1beta1.GetAssetVersionHistoryRequest - 38, // 66: odpf.compass.v1beta1.CompassService.GetAssetByVersion:input_type -> odpf.compass.v1beta1.GetAssetByVersionRequest - 1, // 67: odpf.compass.v1beta1.CompassService.GetAllDiscussions:output_type -> odpf.compass.v1beta1.GetAllDiscussionsResponse - 3, // 68: odpf.compass.v1beta1.CompassService.CreateDiscussion:output_type -> odpf.compass.v1beta1.CreateDiscussionResponse - 5, // 69: odpf.compass.v1beta1.CompassService.GetDiscussion:output_type -> odpf.compass.v1beta1.GetDiscussionResponse - 8, // 70: odpf.compass.v1beta1.CompassService.PatchDiscussion:output_type -> odpf.compass.v1beta1.PatchDiscussionResponse - 9, // 71: odpf.compass.v1beta1.CompassService.CreateComment:output_type -> odpf.compass.v1beta1.CreateCommentResponse - 11, // 72: odpf.compass.v1beta1.CompassService.GetAllComments:output_type -> odpf.compass.v1beta1.GetAllCommentsResponse - 13, // 73: odpf.compass.v1beta1.CompassService.GetComment:output_type -> odpf.compass.v1beta1.GetCommentResponse - 15, // 74: odpf.compass.v1beta1.CompassService.UpdateComment:output_type -> odpf.compass.v1beta1.UpdateCommentResponse - 17, // 75: odpf.compass.v1beta1.CompassService.DeleteComment:output_type -> odpf.compass.v1beta1.DeleteCommentResponse - 19, // 76: odpf.compass.v1beta1.CompassService.SearchAssets:output_type -> odpf.compass.v1beta1.SearchAssetsResponse - 21, // 77: odpf.compass.v1beta1.CompassService.SuggestAssets:output_type -> odpf.compass.v1beta1.SuggestAssetsResponse - 23, // 78: odpf.compass.v1beta1.CompassService.GetGraph:output_type -> odpf.compass.v1beta1.GetGraphResponse - 25, // 79: odpf.compass.v1beta1.CompassService.GetAllAssets:output_type -> odpf.compass.v1beta1.GetAllAssetsResponse - 27, // 80: odpf.compass.v1beta1.CompassService.GetAssetByID:output_type -> odpf.compass.v1beta1.GetAssetByIDResponse - 29, // 81: odpf.compass.v1beta1.CompassService.UpsertAsset:output_type -> odpf.compass.v1beta1.UpsertAssetResponse - 31, // 82: odpf.compass.v1beta1.CompassService.UpsertPatchAsset:output_type -> odpf.compass.v1beta1.UpsertPatchAssetResponse - 33, // 83: odpf.compass.v1beta1.CompassService.DeleteAsset:output_type -> odpf.compass.v1beta1.DeleteAssetResponse - 35, // 84: odpf.compass.v1beta1.CompassService.GetAssetStargazers:output_type -> odpf.compass.v1beta1.GetAssetStargazersResponse - 37, // 85: odpf.compass.v1beta1.CompassService.GetAssetVersionHistory:output_type -> odpf.compass.v1beta1.GetAssetVersionHistoryResponse - 39, // 86: odpf.compass.v1beta1.CompassService.GetAssetByVersion:output_type -> odpf.compass.v1beta1.GetAssetByVersionResponse - 67, // [67:87] is the sub-list for method output_type - 47, // [47:67] is the sub-list for method input_type - 47, // [47:47] is the sub-list for extension type_name - 47, // [47:47] is the sub-list for extension extendee - 0, // [0:47] is the sub-list for field type_name + +func (*DeleteTagResponse) ProtoMessage() {} + +func (x *DeleteTagResponse) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[59] + 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) } -func init() { file_odpf_compass_v1beta1_service_proto_init() } -func file_odpf_compass_v1beta1_service_proto_init() { - if File_odpf_compass_v1beta1_service_proto != nil { - return +// Deprecated: Use DeleteTagResponse.ProtoReflect.Descriptor instead. +func (*DeleteTagResponse) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{59} +} + +type GetTagsByRecordRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + RecordUrn string `protobuf:"bytes,2,opt,name=record_urn,json=recordUrn,proto3" json:"record_urn,omitempty"` +} + +func (x *GetTagsByRecordRequest) Reset() { + *x = GetTagsByRecordRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[60] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - if !protoimpl.UnsafeEnabled { - file_odpf_compass_v1beta1_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAllDiscussionsRequest); i { +} + +func (x *GetTagsByRecordRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetTagsByRecordRequest) ProtoMessage() {} + +func (x *GetTagsByRecordRequest) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[60] + 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 GetTagsByRecordRequest.ProtoReflect.Descriptor instead. +func (*GetTagsByRecordRequest) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{60} +} + +func (x *GetTagsByRecordRequest) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *GetTagsByRecordRequest) GetRecordUrn() string { + if x != nil { + return x.RecordUrn + } + return "" +} + +type GetTagsByRecordResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Data []*Tag `protobuf:"bytes,1,rep,name=data,proto3" json:"data,omitempty"` +} + +func (x *GetTagsByRecordResponse) Reset() { + *x = GetTagsByRecordResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[61] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetTagsByRecordResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetTagsByRecordResponse) ProtoMessage() {} + +func (x *GetTagsByRecordResponse) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[61] + 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 GetTagsByRecordResponse.ProtoReflect.Descriptor instead. +func (*GetTagsByRecordResponse) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{61} +} + +func (x *GetTagsByRecordResponse) GetData() []*Tag { + if x != nil { + return x.Data + } + return nil +} + +type GetAllTagTemplatesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Urn string `protobuf:"bytes,1,opt,name=urn,proto3" json:"urn,omitempty"` +} + +func (x *GetAllTagTemplatesRequest) Reset() { + *x = GetAllTagTemplatesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[62] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetAllTagTemplatesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetAllTagTemplatesRequest) ProtoMessage() {} + +func (x *GetAllTagTemplatesRequest) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[62] + 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 GetAllTagTemplatesRequest.ProtoReflect.Descriptor instead. +func (*GetAllTagTemplatesRequest) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{62} +} + +func (x *GetAllTagTemplatesRequest) GetUrn() string { + if x != nil { + return x.Urn + } + return "" +} + +type GetAllTagTemplatesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Data []*TagTemplate `protobuf:"bytes,1,rep,name=data,proto3" json:"data,omitempty"` +} + +func (x *GetAllTagTemplatesResponse) Reset() { + *x = GetAllTagTemplatesResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[63] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetAllTagTemplatesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetAllTagTemplatesResponse) ProtoMessage() {} + +func (x *GetAllTagTemplatesResponse) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[63] + 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 GetAllTagTemplatesResponse.ProtoReflect.Descriptor instead. +func (*GetAllTagTemplatesResponse) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{63} +} + +func (x *GetAllTagTemplatesResponse) GetData() []*TagTemplate { + if x != nil { + return x.Data + } + return nil +} + +type CreateTagTemplateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Urn string `protobuf:"bytes,1,opt,name=urn,proto3" json:"urn,omitempty"` // required + DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` // required + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` // required + Fields []*TagTemplateField `protobuf:"bytes,4,rep,name=fields,proto3" json:"fields,omitempty"` // required +} + +func (x *CreateTagTemplateRequest) Reset() { + *x = CreateTagTemplateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[64] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateTagTemplateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateTagTemplateRequest) ProtoMessage() {} + +func (x *CreateTagTemplateRequest) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[64] + 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 CreateTagTemplateRequest.ProtoReflect.Descriptor instead. +func (*CreateTagTemplateRequest) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{64} +} + +func (x *CreateTagTemplateRequest) GetUrn() string { + if x != nil { + return x.Urn + } + return "" +} + +func (x *CreateTagTemplateRequest) GetDisplayName() string { + if x != nil { + return x.DisplayName + } + return "" +} + +func (x *CreateTagTemplateRequest) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *CreateTagTemplateRequest) GetFields() []*TagTemplateField { + if x != nil { + return x.Fields + } + return nil +} + +type CreateTagTemplateResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Data *TagTemplate `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` +} + +func (x *CreateTagTemplateResponse) Reset() { + *x = CreateTagTemplateResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[65] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateTagTemplateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateTagTemplateResponse) ProtoMessage() {} + +func (x *CreateTagTemplateResponse) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[65] + 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 CreateTagTemplateResponse.ProtoReflect.Descriptor instead. +func (*CreateTagTemplateResponse) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{65} +} + +func (x *CreateTagTemplateResponse) GetData() *TagTemplate { + if x != nil { + return x.Data + } + return nil +} + +type GetTagTemplateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TemplateUrn string `protobuf:"bytes,1,opt,name=template_urn,json=templateUrn,proto3" json:"template_urn,omitempty"` +} + +func (x *GetTagTemplateRequest) Reset() { + *x = GetTagTemplateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[66] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetTagTemplateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetTagTemplateRequest) ProtoMessage() {} + +func (x *GetTagTemplateRequest) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[66] + 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 GetTagTemplateRequest.ProtoReflect.Descriptor instead. +func (*GetTagTemplateRequest) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{66} +} + +func (x *GetTagTemplateRequest) GetTemplateUrn() string { + if x != nil { + return x.TemplateUrn + } + return "" +} + +type GetTagTemplateResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Data *TagTemplate `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` +} + +func (x *GetTagTemplateResponse) Reset() { + *x = GetTagTemplateResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[67] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetTagTemplateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetTagTemplateResponse) ProtoMessage() {} + +func (x *GetTagTemplateResponse) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[67] + 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 GetTagTemplateResponse.ProtoReflect.Descriptor instead. +func (*GetTagTemplateResponse) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{67} +} + +func (x *GetTagTemplateResponse) GetData() *TagTemplate { + if x != nil { + return x.Data + } + return nil +} + +type UpdateTagTemplateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TemplateUrn string `protobuf:"bytes,1,opt,name=template_urn,json=templateUrn,proto3" json:"template_urn,omitempty"` + DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` // required + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` // required + Fields []*TagTemplateField `protobuf:"bytes,4,rep,name=fields,proto3" json:"fields,omitempty"` // required +} + +func (x *UpdateTagTemplateRequest) Reset() { + *x = UpdateTagTemplateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[68] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateTagTemplateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateTagTemplateRequest) ProtoMessage() {} + +func (x *UpdateTagTemplateRequest) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[68] + 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 UpdateTagTemplateRequest.ProtoReflect.Descriptor instead. +func (*UpdateTagTemplateRequest) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{68} +} + +func (x *UpdateTagTemplateRequest) GetTemplateUrn() string { + if x != nil { + return x.TemplateUrn + } + return "" +} + +func (x *UpdateTagTemplateRequest) GetDisplayName() string { + if x != nil { + return x.DisplayName + } + return "" +} + +func (x *UpdateTagTemplateRequest) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *UpdateTagTemplateRequest) GetFields() []*TagTemplateField { + if x != nil { + return x.Fields + } + return nil +} + +type UpdateTagTemplateResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Data *TagTemplate `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` +} + +func (x *UpdateTagTemplateResponse) Reset() { + *x = UpdateTagTemplateResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[69] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateTagTemplateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateTagTemplateResponse) ProtoMessage() {} + +func (x *UpdateTagTemplateResponse) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[69] + 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 UpdateTagTemplateResponse.ProtoReflect.Descriptor instead. +func (*UpdateTagTemplateResponse) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{69} +} + +func (x *UpdateTagTemplateResponse) GetData() *TagTemplate { + if x != nil { + return x.Data + } + return nil +} + +type DeleteTagTemplateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TemplateUrn string `protobuf:"bytes,1,opt,name=template_urn,json=templateUrn,proto3" json:"template_urn,omitempty"` +} + +func (x *DeleteTagTemplateRequest) Reset() { + *x = DeleteTagTemplateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[70] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteTagTemplateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteTagTemplateRequest) ProtoMessage() {} + +func (x *DeleteTagTemplateRequest) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[70] + 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 DeleteTagTemplateRequest.ProtoReflect.Descriptor instead. +func (*DeleteTagTemplateRequest) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{70} +} + +func (x *DeleteTagTemplateRequest) GetTemplateUrn() string { + if x != nil { + return x.TemplateUrn + } + return "" +} + +type DeleteTagTemplateResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *DeleteTagTemplateResponse) Reset() { + *x = DeleteTagTemplateResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[71] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteTagTemplateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteTagTemplateResponse) ProtoMessage() {} + +func (x *DeleteTagTemplateResponse) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[71] + 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 DeleteTagTemplateResponse.ProtoReflect.Descriptor instead. +func (*DeleteTagTemplateResponse) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{71} +} + +type User struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Uuid string `protobuf:"bytes,2,opt,name=uuid,proto3" json:"uuid,omitempty"` + Email string `protobuf:"bytes,3,opt,name=email,proto3" json:"email,omitempty"` + Provider string `protobuf:"bytes,4,opt,name=provider,proto3" json:"provider,omitempty"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` +} + +func (x *User) Reset() { + *x = User{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[72] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *User) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*User) ProtoMessage() {} + +func (x *User) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[72] + 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 User.ProtoReflect.Descriptor instead. +func (*User) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{72} +} + +func (x *User) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *User) GetUuid() string { + if x != nil { + return x.Uuid + } + return "" +} + +func (x *User) GetEmail() string { + if x != nil { + return x.Email + } + return "" +} + +func (x *User) GetProvider() string { + if x != nil { + return x.Provider + } + return "" +} + +func (x *User) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt + } + return nil +} + +func (x *User) GetUpdatedAt() *timestamppb.Timestamp { + if x != nil { + return x.UpdatedAt + } + return nil +} + +type Changelog struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Changes []*Change `protobuf:"bytes,1,rep,name=changes,proto3" json:"changes,omitempty"` +} + +func (x *Changelog) Reset() { + *x = Changelog{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[73] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Changelog) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Changelog) ProtoMessage() {} + +func (x *Changelog) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[73] + 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 Changelog.ProtoReflect.Descriptor instead. +func (*Changelog) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{73} +} + +func (x *Changelog) GetChanges() []*Change { + if x != nil { + return x.Changes + } + return nil +} + +type Change struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + Path []string `protobuf:"bytes,2,rep,name=path,proto3" json:"path,omitempty"` + From *structpb.Value `protobuf:"bytes,3,opt,name=from,proto3" json:"from,omitempty"` + To *structpb.Value `protobuf:"bytes,4,opt,name=to,proto3" json:"to,omitempty"` +} + +func (x *Change) Reset() { + *x = Change{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[74] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Change) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Change) ProtoMessage() {} + +func (x *Change) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[74] + 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 Change.ProtoReflect.Descriptor instead. +func (*Change) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{74} +} + +func (x *Change) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *Change) GetPath() []string { + if x != nil { + return x.Path + } + return nil +} + +func (x *Change) GetFrom() *structpb.Value { + if x != nil { + return x.From + } + return nil +} + +func (x *Change) GetTo() *structpb.Value { + if x != nil { + return x.To + } + return nil +} + +type Asset struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Urn string `protobuf:"bytes,2,opt,name=urn,proto3" json:"urn,omitempty"` + Type string `protobuf:"bytes,3,opt,name=type,proto3" json:"type,omitempty"` + Service string `protobuf:"bytes,4,opt,name=service,proto3" json:"service,omitempty"` + Name string `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,6,opt,name=description,proto3" json:"description,omitempty"` + Data *structpb.Struct `protobuf:"bytes,7,opt,name=data,proto3" json:"data,omitempty"` + Labels *structpb.Struct `protobuf:"bytes,8,opt,name=labels,proto3" json:"labels,omitempty"` + Owners []*User `protobuf:"bytes,9,rep,name=owners,proto3" json:"owners,omitempty"` + Version string `protobuf:"bytes,10,opt,name=version,proto3" json:"version,omitempty"` + UpdatedBy *User `protobuf:"bytes,11,opt,name=updated_by,json=updatedBy,proto3" json:"updated_by,omitempty"` + Changelog *Changelog `protobuf:"bytes,12,opt,name=changelog,proto3" json:"changelog,omitempty"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,13,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,14,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` +} + +func (x *Asset) Reset() { + *x = Asset{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[75] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Asset) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Asset) ProtoMessage() {} + +func (x *Asset) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[75] + 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 Asset.ProtoReflect.Descriptor instead. +func (*Asset) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{75} +} + +func (x *Asset) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Asset) GetUrn() string { + if x != nil { + return x.Urn + } + return "" +} + +func (x *Asset) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *Asset) GetService() string { + if x != nil { + return x.Service + } + return "" +} + +func (x *Asset) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Asset) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Asset) GetData() *structpb.Struct { + if x != nil { + return x.Data + } + return nil +} + +func (x *Asset) GetLabels() *structpb.Struct { + if x != nil { + return x.Labels + } + return nil +} + +func (x *Asset) GetOwners() []*User { + if x != nil { + return x.Owners + } + return nil +} + +func (x *Asset) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +func (x *Asset) GetUpdatedBy() *User { + if x != nil { + return x.UpdatedBy + } + return nil +} + +func (x *Asset) GetChangelog() *Changelog { + if x != nil { + return x.Changelog + } + return nil +} + +func (x *Asset) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt + } + return nil +} + +func (x *Asset) GetUpdatedAt() *timestamppb.Timestamp { + if x != nil { + return x.UpdatedAt + } + return nil +} + +type Discussion struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` + Body string `protobuf:"bytes,3,opt,name=body,proto3" json:"body,omitempty"` + Type string `protobuf:"bytes,4,opt,name=type,proto3" json:"type,omitempty"` + State string `protobuf:"bytes,5,opt,name=state,proto3" json:"state,omitempty"` + Labels []string `protobuf:"bytes,6,rep,name=labels,proto3" json:"labels,omitempty"` + Assets []string `protobuf:"bytes,7,rep,name=assets,proto3" json:"assets,omitempty"` + Assignees []string `protobuf:"bytes,8,rep,name=assignees,proto3" json:"assignees,omitempty"` + Owner *User `protobuf:"bytes,9,opt,name=owner,proto3" json:"owner,omitempty"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,10,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,11,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` +} + +func (x *Discussion) Reset() { + *x = Discussion{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[76] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Discussion) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Discussion) ProtoMessage() {} + +func (x *Discussion) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[76] + 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 Discussion.ProtoReflect.Descriptor instead. +func (*Discussion) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{76} +} + +func (x *Discussion) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Discussion) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *Discussion) GetBody() string { + if x != nil { + return x.Body + } + return "" +} + +func (x *Discussion) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *Discussion) GetState() string { + if x != nil { + return x.State + } + return "" +} + +func (x *Discussion) GetLabels() []string { + if x != nil { + return x.Labels + } + return nil +} + +func (x *Discussion) GetAssets() []string { + if x != nil { + return x.Assets + } + return nil +} + +func (x *Discussion) GetAssignees() []string { + if x != nil { + return x.Assignees + } + return nil +} + +func (x *Discussion) GetOwner() *User { + if x != nil { + return x.Owner + } + return nil +} + +func (x *Discussion) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt + } + return nil +} + +func (x *Discussion) GetUpdatedAt() *timestamppb.Timestamp { + if x != nil { + return x.UpdatedAt + } + return nil +} + +type Comment struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + DiscussionId string `protobuf:"bytes,2,opt,name=discussion_id,json=discussionId,proto3" json:"discussion_id,omitempty"` + Body string `protobuf:"bytes,3,opt,name=body,proto3" json:"body,omitempty"` + Owner *User `protobuf:"bytes,4,opt,name=owner,proto3" json:"owner,omitempty"` + UpdatedBy *User `protobuf:"bytes,5,opt,name=updated_by,json=updatedBy,proto3" json:"updated_by,omitempty"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` +} + +func (x *Comment) Reset() { + *x = Comment{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[77] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Comment) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Comment) ProtoMessage() {} + +func (x *Comment) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[77] + 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 Comment.ProtoReflect.Descriptor instead. +func (*Comment) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{77} +} + +func (x *Comment) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Comment) GetDiscussionId() string { + if x != nil { + return x.DiscussionId + } + return "" +} + +func (x *Comment) GetBody() string { + if x != nil { + return x.Body + } + return "" +} + +func (x *Comment) GetOwner() *User { + if x != nil { + return x.Owner + } + return nil +} + +func (x *Comment) GetUpdatedBy() *User { + if x != nil { + return x.UpdatedBy + } + return nil +} + +func (x *Comment) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt + } + return nil +} + +func (x *Comment) GetUpdatedAt() *timestamppb.Timestamp { + if x != nil { + return x.UpdatedAt + } + return nil +} + +type LineageEdge struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Source string `protobuf:"bytes,1,opt,name=source,proto3" json:"source,omitempty"` + Target string `protobuf:"bytes,2,opt,name=target,proto3" json:"target,omitempty"` + Prop *structpb.Struct `protobuf:"bytes,3,opt,name=prop,proto3" json:"prop,omitempty"` +} + +func (x *LineageEdge) Reset() { + *x = LineageEdge{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[78] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LineageEdge) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LineageEdge) ProtoMessage() {} + +func (x *LineageEdge) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[78] + 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 LineageEdge.ProtoReflect.Descriptor instead. +func (*LineageEdge) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{78} +} + +func (x *LineageEdge) GetSource() string { + if x != nil { + return x.Source + } + return "" +} + +func (x *LineageEdge) GetTarget() string { + if x != nil { + return x.Target + } + return "" +} + +func (x *LineageEdge) GetProp() *structpb.Struct { + if x != nil { + return x.Prop + } + return nil +} + +type LineageNode struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Urn string `protobuf:"bytes,1,opt,name=urn,proto3" json:"urn,omitempty"` + Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` + Service string `protobuf:"bytes,3,opt,name=service,proto3" json:"service,omitempty"` +} + +func (x *LineageNode) Reset() { + *x = LineageNode{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[79] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LineageNode) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LineageNode) ProtoMessage() {} + +func (x *LineageNode) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[79] + 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 LineageNode.ProtoReflect.Descriptor instead. +func (*LineageNode) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{79} +} + +func (x *LineageNode) GetUrn() string { + if x != nil { + return x.Urn + } + return "" +} + +func (x *LineageNode) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *LineageNode) GetService() string { + if x != nil { + return x.Service + } + return "" +} + +type Tag struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RecordType string `protobuf:"bytes,1,opt,name=record_type,json=recordType,proto3" json:"record_type,omitempty"` + RecordUrn string `protobuf:"bytes,2,opt,name=record_urn,json=recordUrn,proto3" json:"record_urn,omitempty"` + TemplateUrn string `protobuf:"bytes,3,opt,name=template_urn,json=templateUrn,proto3" json:"template_urn,omitempty"` + TagValues []*TagValue `protobuf:"bytes,4,rep,name=tag_values,json=tagValues,proto3" json:"tag_values,omitempty"` + TemplateDisplayName string `protobuf:"bytes,5,opt,name=template_display_name,json=templateDisplayName,proto3" json:"template_display_name,omitempty"` + TemplateDescription string `protobuf:"bytes,6,opt,name=template_description,json=templateDescription,proto3" json:"template_description,omitempty"` +} + +func (x *Tag) Reset() { + *x = Tag{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[80] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Tag) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Tag) ProtoMessage() {} + +func (x *Tag) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[80] + 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 Tag.ProtoReflect.Descriptor instead. +func (*Tag) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{80} +} + +func (x *Tag) GetRecordType() string { + if x != nil { + return x.RecordType + } + return "" +} + +func (x *Tag) GetRecordUrn() string { + if x != nil { + return x.RecordUrn + } + return "" +} + +func (x *Tag) GetTemplateUrn() string { + if x != nil { + return x.TemplateUrn + } + return "" +} + +func (x *Tag) GetTagValues() []*TagValue { + if x != nil { + return x.TagValues + } + return nil +} + +func (x *Tag) GetTemplateDisplayName() string { + if x != nil { + return x.TemplateDisplayName + } + return "" +} + +func (x *Tag) GetTemplateDescription() string { + if x != nil { + return x.TemplateDescription + } + return "" +} + +type TagValue struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + FieldId uint32 `protobuf:"varint,1,opt,name=field_id,json=fieldId,proto3" json:"field_id,omitempty"` + FieldValue *structpb.Value `protobuf:"bytes,2,opt,name=field_value,json=fieldValue,proto3" json:"field_value,omitempty"` + FieldUrn string `protobuf:"bytes,3,opt,name=field_urn,json=fieldUrn,proto3" json:"field_urn,omitempty"` + FieldDisplayName string `protobuf:"bytes,4,opt,name=field_display_name,json=fieldDisplayName,proto3" json:"field_display_name,omitempty"` + FieldDescription string `protobuf:"bytes,5,opt,name=field_description,json=fieldDescription,proto3" json:"field_description,omitempty"` + FieldDataType string `protobuf:"bytes,6,opt,name=field_data_type,json=fieldDataType,proto3" json:"field_data_type,omitempty"` + FieldOptions []string `protobuf:"bytes,7,rep,name=field_options,json=fieldOptions,proto3" json:"field_options,omitempty"` + FieldRequired bool `protobuf:"varint,8,opt,name=field_required,json=fieldRequired,proto3" json:"field_required,omitempty"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,10,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` +} + +func (x *TagValue) Reset() { + *x = TagValue{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[81] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TagValue) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TagValue) ProtoMessage() {} + +func (x *TagValue) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[81] + 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 TagValue.ProtoReflect.Descriptor instead. +func (*TagValue) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{81} +} + +func (x *TagValue) GetFieldId() uint32 { + if x != nil { + return x.FieldId + } + return 0 +} + +func (x *TagValue) GetFieldValue() *structpb.Value { + if x != nil { + return x.FieldValue + } + return nil +} + +func (x *TagValue) GetFieldUrn() string { + if x != nil { + return x.FieldUrn + } + return "" +} + +func (x *TagValue) GetFieldDisplayName() string { + if x != nil { + return x.FieldDisplayName + } + return "" +} + +func (x *TagValue) GetFieldDescription() string { + if x != nil { + return x.FieldDescription + } + return "" +} + +func (x *TagValue) GetFieldDataType() string { + if x != nil { + return x.FieldDataType + } + return "" +} + +func (x *TagValue) GetFieldOptions() []string { + if x != nil { + return x.FieldOptions + } + return nil +} + +func (x *TagValue) GetFieldRequired() bool { + if x != nil { + return x.FieldRequired + } + return false +} + +func (x *TagValue) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt + } + return nil +} + +func (x *TagValue) GetUpdatedAt() *timestamppb.Timestamp { + if x != nil { + return x.UpdatedAt + } + return nil +} + +type TagTemplate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Urn string `protobuf:"bytes,1,opt,name=urn,proto3" json:"urn,omitempty"` + DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + Fields []*TagTemplateField `protobuf:"bytes,4,rep,name=fields,proto3" json:"fields,omitempty"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` +} + +func (x *TagTemplate) Reset() { + *x = TagTemplate{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[82] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TagTemplate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TagTemplate) ProtoMessage() {} + +func (x *TagTemplate) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[82] + 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 TagTemplate.ProtoReflect.Descriptor instead. +func (*TagTemplate) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{82} +} + +func (x *TagTemplate) GetUrn() string { + if x != nil { + return x.Urn + } + return "" +} + +func (x *TagTemplate) GetDisplayName() string { + if x != nil { + return x.DisplayName + } + return "" +} + +func (x *TagTemplate) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *TagTemplate) GetFields() []*TagTemplateField { + if x != nil { + return x.Fields + } + return nil +} + +func (x *TagTemplate) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt + } + return nil +} + +func (x *TagTemplate) GetUpdatedAt() *timestamppb.Timestamp { + if x != nil { + return x.UpdatedAt + } + return nil +} + +type TagTemplateField struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Urn string `protobuf:"bytes,2,opt,name=urn,proto3" json:"urn,omitempty"` + DisplayName string `protobuf:"bytes,3,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` + Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"` + DataType string `protobuf:"bytes,5,opt,name=data_type,json=dataType,proto3" json:"data_type,omitempty"` + Options []string `protobuf:"bytes,6,rep,name=options,proto3" json:"options,omitempty"` + Required bool `protobuf:"varint,7,opt,name=required,proto3" json:"required,omitempty"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` +} + +func (x *TagTemplateField) Reset() { + *x = TagTemplateField{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[83] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TagTemplateField) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TagTemplateField) ProtoMessage() {} + +func (x *TagTemplateField) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[83] + 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 TagTemplateField.ProtoReflect.Descriptor instead. +func (*TagTemplateField) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{83} +} + +func (x *TagTemplateField) GetId() uint32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *TagTemplateField) GetUrn() string { + if x != nil { + return x.Urn + } + return "" +} + +func (x *TagTemplateField) GetDisplayName() string { + if x != nil { + return x.DisplayName + } + return "" +} + +func (x *TagTemplateField) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *TagTemplateField) GetDataType() string { + if x != nil { + return x.DataType + } + return "" +} + +func (x *TagTemplateField) GetOptions() []string { + if x != nil { + return x.Options + } + return nil +} + +func (x *TagTemplateField) GetRequired() bool { + if x != nil { + return x.Required + } + return false +} + +func (x *TagTemplateField) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt + } + return nil +} + +func (x *TagTemplateField) GetUpdatedAt() *timestamppb.Timestamp { + if x != nil { + return x.UpdatedAt + } + return nil +} + +type UpsertAssetRequest_BaseAsset struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Urn string `protobuf:"bytes,1,opt,name=urn,proto3" json:"urn,omitempty"` + Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Service string `protobuf:"bytes,4,opt,name=service,proto3" json:"service,omitempty"` + Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"` + Data *structpb.Struct `protobuf:"bytes,6,opt,name=data,proto3" json:"data,omitempty"` + Labels *structpb.Struct `protobuf:"bytes,7,opt,name=labels,proto3" json:"labels,omitempty"` +} + +func (x *UpsertAssetRequest_BaseAsset) Reset() { + *x = UpsertAssetRequest_BaseAsset{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[88] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpsertAssetRequest_BaseAsset) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpsertAssetRequest_BaseAsset) ProtoMessage() {} + +func (x *UpsertAssetRequest_BaseAsset) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[88] + 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 UpsertAssetRequest_BaseAsset.ProtoReflect.Descriptor instead. +func (*UpsertAssetRequest_BaseAsset) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{28, 0} +} + +func (x *UpsertAssetRequest_BaseAsset) GetUrn() string { + if x != nil { + return x.Urn + } + return "" +} + +func (x *UpsertAssetRequest_BaseAsset) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *UpsertAssetRequest_BaseAsset) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *UpsertAssetRequest_BaseAsset) GetService() string { + if x != nil { + return x.Service + } + return "" +} + +func (x *UpsertAssetRequest_BaseAsset) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *UpsertAssetRequest_BaseAsset) GetData() *structpb.Struct { + if x != nil { + return x.Data + } + return nil +} + +func (x *UpsertAssetRequest_BaseAsset) GetLabels() *structpb.Struct { + if x != nil { + return x.Labels + } + return nil +} + +type UpsertPatchAssetRequest_BaseAsset struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Urn string `protobuf:"bytes,1,opt,name=urn,proto3" json:"urn,omitempty"` + Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` + Name *wrapperspb.StringValue `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Service string `protobuf:"bytes,4,opt,name=service,proto3" json:"service,omitempty"` + Description *wrapperspb.StringValue `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"` + Data *structpb.Struct `protobuf:"bytes,6,opt,name=data,proto3" json:"data,omitempty"` + Labels *structpb.Struct `protobuf:"bytes,7,opt,name=labels,proto3" json:"labels,omitempty"` +} + +func (x *UpsertPatchAssetRequest_BaseAsset) Reset() { + *x = UpsertPatchAssetRequest_BaseAsset{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[89] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpsertPatchAssetRequest_BaseAsset) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpsertPatchAssetRequest_BaseAsset) ProtoMessage() {} + +func (x *UpsertPatchAssetRequest_BaseAsset) ProtoReflect() protoreflect.Message { + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[89] + 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 UpsertPatchAssetRequest_BaseAsset.ProtoReflect.Descriptor instead. +func (*UpsertPatchAssetRequest_BaseAsset) Descriptor() ([]byte, []int) { + return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{30, 0} +} + +func (x *UpsertPatchAssetRequest_BaseAsset) GetUrn() string { + if x != nil { + return x.Urn + } + return "" +} + +func (x *UpsertPatchAssetRequest_BaseAsset) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *UpsertPatchAssetRequest_BaseAsset) GetName() *wrapperspb.StringValue { + if x != nil { + return x.Name + } + return nil +} + +func (x *UpsertPatchAssetRequest_BaseAsset) GetService() string { + if x != nil { + return x.Service + } + return "" +} + +func (x *UpsertPatchAssetRequest_BaseAsset) GetDescription() *wrapperspb.StringValue { + if x != nil { + return x.Description + } + return nil +} + +func (x *UpsertPatchAssetRequest_BaseAsset) GetData() *structpb.Struct { + if x != nil { + return x.Data + } + return nil +} + +func (x *UpsertPatchAssetRequest_BaseAsset) GetLabels() *structpb.Struct { + if x != nil { + return x.Labels + } + return nil +} + +var File_odpf_compass_v1beta1_service_proto protoreflect.FileDescriptor + +var file_odpf_compass_v1beta1_service_proto_rawDesc = []byte{ + 0x0a, 0x22, 0x6f, 0x64, 0x70, 0x66, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2f, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x14, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 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, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, + 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, + 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, 0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x22, 0x95, 0x03, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x44, 0x69, 0x73, 0x63, 0x75, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, + 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x05, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, + 0x03, 0xd0, 0x01, 0x01, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x05, 0x6f, + 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, + 0x03, 0xd0, 0x01, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x08, 0x61, + 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, + 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x08, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, + 0x65, 0x12, 0x1e, 0x0a, 0x05, 0x61, 0x73, 0x73, 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x05, 0x61, 0x73, 0x73, 0x65, + 0x74, 0x12, 0x20, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x06, 0x6c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x12, 0x1c, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x04, 0x73, 0x6f, 0x72, + 0x74, 0x12, 0x26, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x09, + 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x04, 0x73, 0x69, 0x7a, + 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x2a, 0x04, 0x28, 0x00, + 0x40, 0x01, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x21, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, + 0x65, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x2a, 0x04, 0x28, + 0x00, 0x40, 0x01, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x3a, 0x2b, 0x92, 0x41, 0x28, + 0x0a, 0x26, 0x32, 0x24, 0x53, 0x6f, 0x6d, 0x65, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x65, 0x74, 0x63, 0x68, 0x20, 0x64, 0x69, 0x73, + 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x51, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x41, + 0x6c, 0x6c, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x75, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xbc, 0x02, 0x0a, 0x17, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, + 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x1b, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x62, + 0x6f, 0x64, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, + 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x22, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x92, 0x01, 0x04, 0x18, + 0x01, 0x28, 0x01, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x22, 0x0a, 0x06, 0x61, + 0x73, 0x73, 0x65, 0x74, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, + 0x92, 0x01, 0x04, 0x18, 0x01, 0x28, 0x01, 0x52, 0x06, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, + 0x28, 0x0a, 0x09, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, + 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x92, 0x01, 0x04, 0x18, 0x01, 0x28, 0x01, 0x52, 0x09, + 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x65, 0x73, 0x3a, 0x3f, 0x92, 0x41, 0x3c, 0x0a, 0x3a, + 0x32, 0x29, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, + 0x73, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, + 0x20, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0xd2, 0x01, 0x05, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0xd2, 0x01, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x2a, 0x0a, 0x18, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x26, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x44, 0x69, 0x73, + 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x4d, + 0x0a, 0x15, 0x47, 0x65, 0x74, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x69, 0x73, + 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x96, 0x02, + 0x0a, 0x16, 0x50, 0x61, 0x74, 0x63, 0x68, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, + 0x01, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x1c, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, + 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x1c, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x05, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x22, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x06, + 0x20, 0x03, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x92, 0x01, 0x04, 0x18, 0x01, 0x28, 0x01, + 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x22, 0x0a, 0x06, 0x61, 0x73, 0x73, 0x65, + 0x74, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x92, 0x01, 0x04, + 0x18, 0x01, 0x28, 0x01, 0x52, 0x06, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x28, 0x0a, 0x09, + 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x42, + 0x0a, 0xfa, 0x42, 0x07, 0x92, 0x01, 0x04, 0x18, 0x01, 0x28, 0x01, 0x52, 0x09, 0x61, 0x73, 0x73, + 0x69, 0x67, 0x6e, 0x65, 0x65, 0x73, 0x22, 0x58, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, + 0x0a, 0x0d, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, + 0x22, 0x19, 0x0a, 0x17, 0x50, 0x61, 0x74, 0x63, 0x68, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x0a, 0x15, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x43, + 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, + 0x0a, 0x0d, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x04, 0x73, 0x6f, 0x72, + 0x74, 0x12, 0x26, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x09, + 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x04, 0x73, 0x69, 0x7a, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x2a, 0x04, 0x28, 0x00, + 0x40, 0x01, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x21, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, + 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x2a, 0x04, 0x28, + 0x00, 0x40, 0x01, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x4b, 0x0a, 0x16, 0x47, + 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x48, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x43, + 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, + 0x0d, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x22, 0x47, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, + 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x68, 0x0a, 0x14, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x69, 0x73, 0x63, + 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, + 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x17, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, + 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, + 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, + 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x17, 0x0a, 0x15, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xd3, 0x08, 0x0a, 0x13, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x41, + 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x04, + 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x27, 0x92, 0x41, 0x1c, 0x32, + 0x1a, 0x74, 0x65, 0x78, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, + 0x66, 0x6f, 0x72, 0x20, 0x28, 0x66, 0x75, 0x7a, 0x7a, 0x79, 0x29, 0xfa, 0x42, 0x05, 0x72, 0x03, + 0xd0, 0x01, 0x01, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0xc6, 0x01, 0x0a, 0x06, 0x72, 0x61, + 0x6e, 0x6b, 0x62, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0xad, 0x01, 0x92, 0x41, 0xa1, + 0x01, 0x32, 0x9e, 0x01, 0x64, 0x65, 0x73, 0x63, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x6c, 0x79, + 0x20, 0x73, 0x6f, 0x72, 0x74, 0x20, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x61, + 0x20, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x69, + 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x2e, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x69, + 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x70, + 0x65, 0x72, 0x69, 0x6f, 0x64, 0x20, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, + 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x20, 0x65, 0x67, 0x2c, 0x20, + 0x22, 0x72, 0x61, 0x6e, 0x6b, 0x62, 0x79, 0x5b, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x75, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x5d, 0x22, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x06, 0x72, 0x61, 0x6e, 0x6b, + 0x62, 0x79, 0x12, 0xb6, 0x01, 0x0a, 0x08, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x62, 0x79, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x99, 0x01, 0x92, 0x41, 0x8d, 0x01, 0x32, 0x8a, 0x01, 0x73, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, + 0x66, 0x69, 0x63, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x20, 0x66, 0x69, 0x65, 0x6c, + 0x64, 0x2e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x66, 0x69, + 0x65, 0x6c, 0x64, 0x20, 0x69, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x77, + 0x69, 0x74, 0x68, 0x20, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x20, 0x73, 0x65, 0x70, 0x61, 0x72, + 0x61, 0x74, 0x65, 0x64, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2e, + 0x20, 0x65, 0x67, 0x2c, 0x20, 0x22, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x62, 0x79, 0x5b, 0x64, + 0x61, 0x74, 0x61, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x63, 0x6f, 0x6c, 0x75, 0x6d, + 0x6e, 0x73, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x5d, 0x22, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, + 0x01, 0x52, 0x08, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x62, 0x79, 0x12, 0x3d, 0x0a, 0x04, 0x73, + 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x29, 0x92, 0x41, 0x1d, 0x32, 0x1b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x73, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0xfa, 0x42, 0x06, 0x2a, 0x04, + 0x28, 0x00, 0x40, 0x01, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0xe7, 0x01, 0x0a, 0x06, 0x66, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x6f, 0x64, + 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x42, 0x97, 0x01, 0x92, 0x41, 0x93, 0x01, 0x32, 0x90, 0x01, 0x66, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, + 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x28, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x29, 0x20, 0x66, 0x69, + 0x65, 0x6c, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, + 0x2e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x66, 0x69, 0x65, + 0x6c, 0x64, 0x20, 0x69, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x77, 0x69, + 0x74, 0x68, 0x20, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x20, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x20, + 0x65, 0x67, 0x2c, 0x20, 0x22, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5b, 0x64, 0x61, 0x74, 0x61, + 0x2e, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x63, 0x61, 0x70, 0x65, 0x5d, 0x22, 0x52, 0x06, 0x66, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x12, 0xde, 0x01, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x06, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x91, 0x01, 0x92, 0x41, 0x8d, + 0x01, 0x32, 0x8a, 0x01, 0x71, 0x75, 0x65, 0x72, 0x79, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x20, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x28, 0x6e, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x29, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x69, 0x73, 0x20, 0x77, 0x72, 0x69, + 0x74, 0x74, 0x65, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, + 0x20, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, + 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x20, 0x65, 0x67, 0x2c, 0x20, 0x22, 0x71, 0x75, 0x65, 0x72, + 0x79, 0x5b, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5d, 0x22, 0x52, 0x05, + 0x71, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x39, 0x0a, 0x0b, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x1a, 0x38, 0x0a, 0x0a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x47, 0x0a, 0x14, 0x53, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x22, 0xd6, 0x08, 0x0a, 0x14, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x41, + 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x04, + 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x27, 0x92, 0x41, 0x1c, 0x32, + 0x1a, 0x74, 0x65, 0x78, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, + 0x66, 0x6f, 0x72, 0x20, 0x28, 0x66, 0x75, 0x7a, 0x7a, 0x79, 0x29, 0xfa, 0x42, 0x05, 0x72, 0x03, + 0xd0, 0x01, 0x01, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0xc6, 0x01, 0x0a, 0x06, 0x72, 0x61, + 0x6e, 0x6b, 0x62, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0xad, 0x01, 0x92, 0x41, 0xa1, + 0x01, 0x32, 0x9e, 0x01, 0x64, 0x65, 0x73, 0x63, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x6c, 0x79, + 0x20, 0x73, 0x6f, 0x72, 0x74, 0x20, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x61, + 0x20, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x69, + 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x2e, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x69, + 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x70, + 0x65, 0x72, 0x69, 0x6f, 0x64, 0x20, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, + 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x20, 0x65, 0x67, 0x2c, 0x20, + 0x22, 0x72, 0x61, 0x6e, 0x6b, 0x62, 0x79, 0x5b, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x75, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x5d, 0x22, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x06, 0x72, 0x61, 0x6e, 0x6b, + 0x62, 0x79, 0x12, 0xb6, 0x01, 0x0a, 0x08, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x62, 0x79, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x99, 0x01, 0x92, 0x41, 0x8d, 0x01, 0x32, 0x8a, 0x01, 0x73, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, + 0x66, 0x69, 0x63, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x20, 0x66, 0x69, 0x65, 0x6c, + 0x64, 0x2e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x66, 0x69, + 0x65, 0x6c, 0x64, 0x20, 0x69, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x77, + 0x69, 0x74, 0x68, 0x20, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x20, 0x73, 0x65, 0x70, 0x61, 0x72, + 0x61, 0x74, 0x65, 0x64, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2e, + 0x20, 0x65, 0x67, 0x2c, 0x20, 0x22, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x62, 0x79, 0x5b, 0x64, + 0x61, 0x74, 0x61, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x63, 0x6f, 0x6c, 0x75, 0x6d, + 0x6e, 0x73, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x5d, 0x22, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, + 0x01, 0x52, 0x08, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x62, 0x79, 0x12, 0x3d, 0x0a, 0x04, 0x73, + 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x29, 0x92, 0x41, 0x1d, 0x32, 0x1b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x73, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0xfa, 0x42, 0x06, 0x2a, 0x04, + 0x28, 0x00, 0x40, 0x01, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0xe8, 0x01, 0x0a, 0x06, 0x66, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x6f, 0x64, + 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x42, 0x97, 0x01, 0x92, 0x41, 0x93, 0x01, 0x32, 0x90, 0x01, 0x66, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x62, 0x61, 0x73, 0x65, 0x64, + 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x28, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x29, 0x20, 0x66, + 0x69, 0x65, 0x6c, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x73, 0x73, 0x65, + 0x74, 0x2e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x66, 0x69, + 0x65, 0x6c, 0x64, 0x20, 0x69, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x77, + 0x69, 0x74, 0x68, 0x20, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x20, 0x73, 0x65, 0x70, 0x61, 0x72, + 0x61, 0x74, 0x65, 0x64, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2e, + 0x20, 0x65, 0x67, 0x2c, 0x20, 0x22, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5b, 0x64, 0x61, 0x74, + 0x61, 0x2e, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x63, 0x61, 0x70, 0x65, 0x5d, 0x22, 0x52, 0x06, 0x66, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0xdf, 0x01, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, + 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x75, 0x67, + 0x67, 0x65, 0x73, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x91, 0x01, 0x92, + 0x41, 0x8d, 0x01, 0x32, 0x8a, 0x01, 0x71, 0x75, 0x65, 0x72, 0x79, 0x20, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x20, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x28, 0x6e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x29, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x6f, 0x66, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x69, 0x73, 0x20, 0x77, + 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x70, 0x65, 0x72, 0x69, + 0x6f, 0x64, 0x20, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x66, 0x69, 0x65, + 0x6c, 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x20, 0x65, 0x67, 0x2c, 0x20, 0x22, 0x71, 0x75, + 0x65, 0x72, 0x79, 0x5b, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5d, 0x22, + 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x39, 0x0a, 0x0b, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x1a, 0x38, 0x0a, 0x0a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2b, 0x0a, 0x15, + 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x23, 0x0a, 0x0f, 0x47, 0x65, 0x74, + 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, + 0x75, 0x72, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6e, 0x22, 0x49, + 0x0a, 0x10, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x35, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x21, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x65, 0x61, 0x67, 0x65, 0x45, + 0x64, 0x67, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xf2, 0x02, 0x0a, 0x13, 0x47, 0x65, + 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x1b, 0x92, 0x41, 0x10, 0x32, 0x0e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x62, 0x79, 0x20, + 0x74, 0x65, 0x78, 0x74, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x04, 0x74, 0x65, + 0x78, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x1b, 0x92, 0x41, 0x10, 0x32, 0x0e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x62, 0x79, + 0x20, 0x74, 0x79, 0x70, 0x65, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x12, 0x38, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x1e, 0x92, 0x41, 0x13, 0x32, 0x11, 0x66, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x20, 0x62, 0x79, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0xfa, 0x42, 0x05, 0x72, + 0x03, 0xd0, 0x01, 0x01, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x37, 0x0a, + 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x23, 0x92, 0x41, 0x17, + 0x32, 0x15, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x74, + 0x6f, 0x20, 0x66, 0x65, 0x74, 0x63, 0x68, 0xfa, 0x42, 0x06, 0x2a, 0x04, 0x28, 0x00, 0x40, 0x01, + 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x3a, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x22, 0x92, 0x41, 0x16, 0x32, 0x14, 0x6f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x65, 0x74, 0x63, 0x68, 0x20, 0x66, 0x72, 0x6f, + 0x6d, 0xfa, 0x42, 0x06, 0x2a, 0x04, 0x28, 0x00, 0x40, 0x01, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, + 0x65, 0x74, 0x12, 0x4a, 0x0a, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x42, 0x2b, 0x92, 0x41, 0x28, 0x32, 0x26, 0x69, 0x66, 0x20, + 0x73, 0x65, 0x74, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x52, 0x09, 0x77, 0x69, 0x74, 0x68, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0x5d, + 0x0a, 0x14, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, + 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0x25, 0x0a, + 0x13, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, 0x79, 0x49, 0x44, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x22, 0x47, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, + 0x42, 0x79, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x04, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x64, 0x70, + 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x85, 0x04, + 0x0a, 0x12, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x48, 0x0a, 0x05, 0x61, 0x73, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, + 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x42, 0x61, + 0x73, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x05, 0x61, 0x73, 0x73, 0x65, 0x74, 0x12, 0x3f, + 0x0a, 0x09, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x65, 0x61, 0x67, 0x65, + 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x12, + 0x43, 0x0a, 0x0b, 0x64, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x65, + 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x0b, 0x64, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x73, 0x1a, 0x9e, 0x02, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x65, 0x41, 0x73, 0x73, + 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x75, 0x72, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x24, 0x92, 0x41, 0x19, + 0x32, 0x17, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, + 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, + 0x01, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, + 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x48, 0x0a, 0x06, 0x6c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, + 0x72, 0x75, 0x63, 0x74, 0x42, 0x17, 0x92, 0x41, 0x14, 0x32, 0x12, 0x6c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x52, 0x06, 0x6c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x22, 0x25, 0x0a, 0x13, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, + 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x89, 0x05, 0x0a, + 0x17, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x50, 0x61, 0x74, 0x63, 0x68, 0x41, 0x73, 0x73, 0x65, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x05, 0x61, 0x73, 0x73, 0x65, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, + 0x70, 0x73, 0x65, 0x72, 0x74, 0x50, 0x61, 0x74, 0x63, 0x68, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, + 0x52, 0x05, 0x61, 0x73, 0x73, 0x65, 0x74, 0x12, 0x3f, 0x0a, 0x09, 0x75, 0x70, 0x73, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x64, 0x70, + 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x65, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x75, + 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x12, 0x43, 0x0a, 0x0b, 0x64, 0x6f, 0x77, 0x6e, + 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, + 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x65, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x64, 0x65, + 0x52, 0x0b, 0x64, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x1a, 0x98, 0x03, + 0x0a, 0x09, 0x42, 0x61, 0x73, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, + 0x72, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6e, 0x12, 0x12, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x12, 0x4f, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x1d, 0x92, + 0x41, 0x12, 0x32, 0x10, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x61, + 0x73, 0x73, 0x65, 0x74, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, + 0x24, 0x92, 0x41, 0x19, 0x32, 0x17, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0xfa, 0x42, 0x05, + 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x4a, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x42, 0x1d, 0x92, 0x41, 0x1a, 0x32, 0x18, + 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x6f, 0x66, 0x20, + 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x48, + 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x42, 0x17, 0x92, 0x41, 0x14, 0x32, 0x12, 0x6c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, + 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x22, 0x2a, 0x0a, 0x18, 0x55, 0x70, 0x73, 0x65, + 0x72, 0x74, 0x50, 0x61, 0x74, 0x63, 0x68, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x22, 0x24, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x73, + 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x15, 0x0a, 0x13, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x6d, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x53, 0x74, 0x61, + 0x72, 0x67, 0x61, 0x7a, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, + 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xfa, 0x42, + 0x06, 0x2a, 0x04, 0x28, 0x00, 0x40, 0x01, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x21, 0x0a, + 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xfa, + 0x42, 0x06, 0x2a, 0x04, 0x28, 0x00, 0x40, 0x01, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, + 0x22, 0x4c, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x53, 0x74, 0x61, 0x72, + 0x67, 0x61, 0x7a, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, + 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, + 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x71, + 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x1d, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xfa, + 0x42, 0x06, 0x2a, 0x04, 0x28, 0x00, 0x40, 0x01, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x21, + 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, + 0xfa, 0x42, 0x06, 0x2a, 0x04, 0x28, 0x00, 0x40, 0x01, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, + 0x74, 0x22, 0x51, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x04, + 0x64, 0x61, 0x74, 0x61, 0x22, 0x44, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, + 0x42, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x4c, 0x0a, 0x19, 0x47, 0x65, + 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, + 0x65, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x78, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x55, + 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, + 0x12, 0x1d, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, + 0xfa, 0x42, 0x06, 0x2a, 0x04, 0x28, 0x00, 0x40, 0x01, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, + 0x21, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x42, + 0x09, 0xfa, 0x42, 0x06, 0x2a, 0x04, 0x28, 0x00, 0x40, 0x01, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, + 0x65, 0x74, 0x22, 0x4f, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, + 0x72, 0x72, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x22, 0x5d, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x53, 0x74, 0x61, 0x72, + 0x72, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1d, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, + 0xfa, 0x42, 0x06, 0x2a, 0x04, 0x28, 0x00, 0x40, 0x01, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, + 0x21, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x42, + 0x09, 0xfa, 0x42, 0x06, 0x2a, 0x04, 0x28, 0x00, 0x40, 0x01, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, + 0x65, 0x74, 0x22, 0x4d, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x53, 0x74, 0x61, 0x72, 0x72, + 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x2f, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, + 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x22, 0x35, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x53, 0x74, 0x61, 0x72, 0x72, 0x65, + 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, + 0x08, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x61, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x22, 0x4c, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x4d, + 0x79, 0x53, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, + 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x2d, 0x0a, 0x10, 0x53, 0x74, 0x61, 0x72, 0x41, 0x73, + 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x73, + 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x73, + 0x73, 0x65, 0x74, 0x49, 0x64, 0x22, 0x23, 0x0a, 0x11, 0x53, 0x74, 0x61, 0x72, 0x41, 0x73, 0x73, + 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x2f, 0x0a, 0x12, 0x55, 0x6e, + 0x73, 0x74, 0x61, 0x72, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x19, 0x0a, 0x08, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x61, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x22, 0x15, 0x0a, 0x13, 0x55, + 0x6e, 0x73, 0x74, 0x61, 0x72, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0xc3, 0x02, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x44, 0x69, 0x73, 0x63, + 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, + 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, + 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x12, 0x1c, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, + 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1e, + 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, + 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, + 0x0a, 0x05, 0x61, 0x73, 0x73, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, + 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x05, 0x61, 0x73, 0x73, 0x65, 0x74, 0x12, 0x20, + 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, + 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x12, 0x1c, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, + 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, 0x26, + 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x09, 0x64, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x2a, 0x04, 0x28, 0x00, 0x40, 0x01, 0x52, + 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x21, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x2a, 0x04, 0x28, 0x00, 0x40, 0x01, + 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x50, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x4d, + 0x79, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, + 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x81, 0x03, 0x0a, 0x10, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x75, 0x72, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x55, 0x72, 0x6e, 0x12, + 0x21, 0x0a, 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x75, 0x72, 0x6e, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x55, + 0x72, 0x6e, 0x12, 0x3d, 0x0a, 0x0a, 0x74, 0x61, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x61, + 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x74, 0x61, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x73, 0x12, 0x32, 0x0a, 0x15, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x69, + 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x13, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, + 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x31, 0x0a, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x13, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x44, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x64, 0x92, 0x41, 0x61, 0x0a, 0x5f, 0x2a, + 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x32, 0x22, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, + 0x20, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, + 0x61, 0x20, 0x74, 0x61, 0x67, 0xd2, 0x01, 0x0a, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x75, + 0x72, 0x6e, 0xd2, 0x01, 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x75, 0x72, + 0x6e, 0xd2, 0x01, 0x0a, 0x74, 0x61, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x42, + 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x61, 0x67, 0x52, 0x04, 0x64, 0x61, + 0x74, 0x61, 0x22, 0x79, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 0x73, 0x42, 0x79, 0x52, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x6e, 0x64, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x72, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x75, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x55, 0x72, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x75, 0x72, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x55, 0x72, 0x6e, 0x22, 0x53, 0x0a, + 0x22, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 0x73, 0x42, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x41, 0x6e, 0x64, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x61, 0x67, 0x52, 0x04, 0x64, 0x61, + 0x74, 0x61, 0x22, 0xd8, 0x02, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x72, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x75, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x55, 0x72, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x75, 0x72, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x55, 0x72, 0x6e, 0x12, 0x3d, 0x0a, + 0x0a, 0x74, 0x61, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x61, 0x67, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x52, 0x09, 0x74, 0x61, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x15, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x31, 0x0a, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x3a, 0x48, 0x92, 0x41, 0x45, 0x0a, 0x43, 0x2a, 0x10, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x32, 0x22, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x73, 0x65, 0x6e, 0x74, + 0x20, 0x74, 0x6f, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x74, 0x61, 0x67, + 0xd2, 0x01, 0x0a, 0x74, 0x61, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x42, 0x0a, + 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x61, 0x67, 0x52, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x22, 0x68, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x5f, 0x75, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x55, 0x72, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x75, 0x72, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x55, 0x72, 0x6e, 0x22, 0x13, 0x0a, 0x11, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x4b, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 0x73, 0x42, 0x79, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1d, + 0x0a, 0x0a, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x75, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x55, 0x72, 0x6e, 0x22, 0x48, 0x0a, + 0x17, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 0x73, 0x42, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x61, + 0x67, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x2d, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x41, 0x6c, + 0x6c, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x75, 0x72, 0x6e, 0x22, 0x53, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, + 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, + 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xb1, 0x02, 0x0a, 0x18, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, + 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x3e, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x26, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x3a, + 0x7e, 0x92, 0x41, 0x7b, 0x0a, 0x79, 0x2a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, + 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x32, 0x2d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, + 0x73, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, + 0x20, 0x74, 0x61, 0x67, 0x27, 0x73, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0xd2, + 0x01, 0x03, 0x75, 0x72, 0x6e, 0xd2, 0x01, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0xd2, 0x01, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0xd2, 0x01, 0x0a, 0x74, 0x61, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, + 0x52, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x04, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x64, 0x70, + 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x22, 0x3a, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x75, 0x72, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x55, 0x72, 0x6e, 0x22, + 0x4f, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, + 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x22, 0xc9, 0x02, 0x0a, 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, + 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x75, 0x72, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x55, 0x72, 0x6e, + 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x61, 0x67, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x06, 0x66, + 0x69, 0x65, 0x6c, 0x64, 0x73, 0x3a, 0x84, 0x01, 0x92, 0x41, 0x80, 0x01, 0x0a, 0x7e, 0x2a, 0x18, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x32, 0x2d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x20, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x74, 0x61, 0x67, 0x27, 0x73, 0x20, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0xd2, 0x01, 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x75, 0x72, 0x6e, 0xd2, 0x01, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0xd2, 0x01, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0xd2, 0x01, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x22, 0x52, 0x0a, 0x19, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, + 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x22, 0x3d, 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x75, 0x72, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x55, 0x72, 0x6e, 0x22, + 0x1b, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xdf, 0x01, 0x0a, + 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, + 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, + 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x0a, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 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, 0x52, 0x09, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x61, 0x74, 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, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, + 0x74, 0x3a, 0x0b, 0x92, 0x41, 0x08, 0x0a, 0x06, 0x2a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x22, 0x55, + 0x0a, 0x09, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x6c, 0x6f, 0x67, 0x12, 0x36, 0x0a, 0x07, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, + 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x73, 0x3a, 0x10, 0x92, 0x41, 0x0d, 0x0a, 0x0b, 0x2a, 0x09, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x6c, 0x6f, 0x67, 0x22, 0x93, 0x01, 0x0a, 0x06, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x2a, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x04, + 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x26, 0x0a, 0x02, 0x74, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x02, 0x74, 0x6f, 0x3a, 0x0d, 0x92, 0x41, + 0x0a, 0x0a, 0x08, 0x2a, 0x06, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x22, 0xb7, 0x04, 0x0a, 0x05, + 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, + 0x63, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2f, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x32, 0x0a, 0x06, 0x6f, 0x77, 0x6e, + 0x65, 0x72, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x64, 0x70, 0x66, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x18, 0x0a, + 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x64, + 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, + 0x42, 0x79, 0x12, 0x3d, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x6c, 0x6f, 0x67, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x6c, 0x6f, 0x67, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x6c, 0x6f, + 0x67, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 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, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0e, 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, 0x52, 0x09, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x3a, 0x0c, 0x92, 0x41, 0x09, 0x0a, 0x07, 0x2a, 0x05, + 0x41, 0x73, 0x73, 0x65, 0x74, 0x22, 0xf9, 0x02, 0x0a, 0x0a, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, + 0x64, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x12, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x12, 0x16, 0x0a, 0x06, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x06, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x73, 0x73, 0x69, + 0x67, 0x6e, 0x65, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x73, 0x73, + 0x69, 0x67, 0x6e, 0x65, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x73, 0x65, + 0x72, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 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, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, + 0x74, 0x18, 0x0b, 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, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x3a, 0x11, + 0x92, 0x41, 0x0e, 0x0a, 0x0c, 0x2a, 0x0a, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x22, 0xc5, 0x02, 0x0a, 0x07, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x23, 0x0a, + 0x0d, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x73, 0x65, + 0x72, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, + 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x64, 0x42, 0x79, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, + 0x74, 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, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, + 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 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, 0x52, 0x09, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x3a, 0x0e, 0x92, 0x41, 0x0b, 0x0a, 0x09, + 0x2a, 0x07, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x7e, 0x0a, 0x0b, 0x4c, 0x69, 0x6e, + 0x65, 0x61, 0x67, 0x65, 0x45, 0x64, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x70, 0x72, 0x6f, 0x70, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, + 0x04, 0x70, 0x72, 0x6f, 0x70, 0x3a, 0x12, 0x92, 0x41, 0x0f, 0x0a, 0x0d, 0x2a, 0x0b, 0x4c, 0x69, + 0x6e, 0x65, 0x61, 0x67, 0x65, 0x45, 0x64, 0x67, 0x65, 0x22, 0x61, 0x0a, 0x0b, 0x4c, 0x69, 0x6e, + 0x65, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, + 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x3a, 0x12, 0x92, 0x41, 0x0f, 0x0a, 0x0d, 0x2a, + 0x0b, 0x4c, 0x69, 0x6e, 0x65, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x9a, 0x02, 0x0a, + 0x03, 0x54, 0x61, 0x67, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, + 0x75, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x55, 0x72, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x5f, 0x75, 0x72, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x55, 0x72, 0x6e, 0x12, 0x3d, 0x0a, 0x0a, 0x74, 0x61, 0x67, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x64, + 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x54, 0x61, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x74, 0x61, 0x67, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x44, + 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x31, 0x0a, 0x14, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x0a, 0x92, + 0x41, 0x07, 0x0a, 0x05, 0x2a, 0x03, 0x54, 0x61, 0x67, 0x22, 0xd1, 0x03, 0x0a, 0x08, 0x54, 0x61, + 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x49, + 0x64, 0x12, 0x37, 0x0a, 0x0b, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, + 0x66, 0x69, 0x65, 0x6c, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, + 0x65, 0x6c, 0x64, 0x5f, 0x75, 0x72, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, + 0x69, 0x65, 0x6c, 0x64, 0x55, 0x72, 0x6e, 0x12, 0x2c, 0x0a, 0x12, 0x66, 0x69, 0x65, 0x6c, 0x64, + 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x10, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, + 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x10, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x66, 0x69, 0x65, + 0x6c, 0x64, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, + 0x65, 0x6c, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x0c, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x25, 0x0a, 0x0e, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, + 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x61, 0x74, 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, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, + 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 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, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x3a, 0x0f, 0x92, 0x41, + 0x0c, 0x0a, 0x0a, 0x2a, 0x08, 0x54, 0x61, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xae, 0x02, + 0x0a, 0x0b, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x10, 0x0a, + 0x03, 0x75, 0x72, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6e, 0x12, + 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x61, 0x67, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x06, 0x66, 0x69, + 0x65, 0x6c, 0x64, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x61, 0x74, 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, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, + 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 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, 0x52, + 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x3a, 0x12, 0x92, 0x41, 0x0f, 0x0a, + 0x0d, 0x2a, 0x0b, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0xdb, + 0x02, 0x0a, 0x10, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x46, 0x69, + 0x65, 0x6c, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x75, 0x72, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, + 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x61, + 0x74, 0x61, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, + 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x39, 0x0a, + 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, 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, 0x52, 0x09, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 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, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x64, 0x41, 0x74, 0x3a, 0x17, 0x92, 0x41, 0x14, 0x0a, 0x12, 0x2a, 0x10, 0x54, 0x61, 0x67, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x32, 0xeb, 0x41, 0x0a, + 0x0e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, + 0xb6, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2e, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x41, 0x6c, 0x6c, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x41, 0x6c, 0x6c, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x40, 0x92, 0x41, 0x21, 0x0a, 0x0a, 0x44, 0x69, 0x73, + 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x13, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, + 0x20, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x16, 0x12, 0x14, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x64, 0x69, 0x73, + 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xb6, 0x01, 0x0a, 0x10, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x2e, + 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x69, 0x73, 0x63, 0x75, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6f, + 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x43, 0x92, 0x41, + 0x21, 0x0a, 0x0a, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x13, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x14, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2f, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x01, + 0x2a, 0x12, 0xac, 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x69, + 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2b, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x42, 0x92, 0x41, + 0x1e, 0x0a, 0x0a, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x47, + 0x65, 0x74, 0x20, 0x61, 0x20, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, + 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, + 0x12, 0xb7, 0x01, 0x0a, 0x0f, 0x50, 0x61, 0x74, 0x63, 0x68, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x74, 0x63, + 0x68, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, + 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x44, + 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x47, 0x92, 0x41, 0x20, 0x0a, 0x0a, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x12, 0x50, 0x61, 0x74, 0x63, 0x68, 0x20, 0x61, 0x20, 0x64, 0x69, 0x73, 0x63, + 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x32, 0x19, 0x2f, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xdc, 0x01, 0x0a, 0x0d, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2a, 0x2e, 0x6f, + 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x72, 0x92, 0x41, 0x37, 0x0a, 0x0a, 0x44, 0x69, 0x73, 0x63, + 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x0a, 0x07, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, + 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, + 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x22, 0x2d, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2f, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x64, + 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, + 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xdc, 0x01, 0x0a, 0x0e, 0x47, 0x65, + 0x74, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2b, 0x2e, 0x6f, + 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x6f, 0x64, 0x70, 0x66, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6f, 0x92, 0x41, 0x37, 0x0a, 0x0a, 0x44, 0x69, + 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x0a, 0x07, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, + 0x74, 0x12, 0x20, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x12, 0x2d, 0x2f, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2f, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, + 0x7b, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, + 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0xd2, 0x01, 0x0a, 0x0a, 0x47, 0x65, 0x74, + 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x27, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x28, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x71, 0x92, 0x41, 0x34, 0x0a, + 0x0a, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x0a, 0x07, 0x43, 0x6f, 0x6d, + 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x47, 0x65, 0x74, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6d, 0x6d, + 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x12, 0x32, 0x2f, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2f, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, + 0x7b, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, + 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xe1, 0x01, + 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, + 0x2a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x6f, 0x64, + 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x77, 0x92, 0x41, 0x37, 0x0a, 0x0a, 0x44, + 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x0a, 0x07, 0x43, 0x6f, 0x6d, 0x6d, 0x65, + 0x6e, 0x74, 0x12, 0x20, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6d, + 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x1a, 0x32, 0x2f, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2f, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x2f, 0x7b, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x01, + 0x2a, 0x12, 0xde, 0x01, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, + 0x65, 0x6e, 0x74, 0x12, 0x2a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2b, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6d, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x74, 0x92, 0x41, + 0x37, 0x0a, 0x0a, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x0a, 0x07, 0x43, + 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, + 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x64, 0x69, + 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x2a, 0x32, + 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, + 0x64, 0x7d, 0x12, 0xf0, 0x04, 0x0a, 0x0c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x41, 0x73, 0x73, + 0x65, 0x74, 0x73, 0x12, 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, + 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x41, 0x73, 0x73, 0x65, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x88, 0x04, 0x92, 0x41, 0xed, + 0x03, 0x0a, 0x06, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x0a, 0x05, 0x41, 0x73, 0x73, 0x65, 0x74, + 0x12, 0x13, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x20, + 0x61, 0x73, 0x73, 0x65, 0x74, 0x1a, 0xc6, 0x03, 0x41, 0x50, 0x49, 0x20, 0x66, 0x6f, 0x72, 0x20, + 0x71, 0x75, 0x65, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x2e, 0x20, 0x27, 0x74, 0x65, 0x78, 0x74, 0x27, 0x20, 0x69, 0x73, 0x20, 0x66, 0x75, + 0x7a, 0x7a, 0x79, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x20, 0x61, 0x67, 0x61, 0x69, + 0x6e, 0x73, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x76, 0x61, 0x69, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x73, 0x2c, 0x20, + 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x20, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, + 0x2e, 0x20, 0x59, 0x6f, 0x75, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, + 0x79, 0x20, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x6d, 0x61, 0x74, + 0x63, 0x68, 0x20, 0x63, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x20, 0x75, 0x73, 0x69, 0x6e, + 0x67, 0x20, 0x27, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x2a, 0x27, 0x20, 0x71, 0x75, 0x65, + 0x72, 0x79, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x20, 0x59, + 0x6f, 0x75, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x20, 0x65, + 0x61, 0x63, 0x68, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, + 0x70, 0x6c, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x70, 0x65, + 0x63, 0x69, 0x66, 0x79, 0x20, 0x61, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x6f, 0x73, 0x65, 0x20, 0x66, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x20, 0x46, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x2c, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, + 0x20, 0x74, 0x77, 0x6f, 0x20, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x63, 0x61, 0x70, 0x65, 0x20, 0x27, + 0x76, 0x6e, 0x27, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x27, 0x74, 0x68, 0x27, 0x2c, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x71, 0x75, 0x65, 0x72, 0x79, 0x20, 0x63, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, + 0x20, 0x60, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x2f, 0x3f, 0x74, 0x65, 0x78, 0x74, 0x3d, + 0x3c, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x26, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x65, 0x6e, + 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x3d, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x26, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x6c, 0x61, 0x6e, + 0x64, 0x73, 0x63, 0x61, 0x70, 0x65, 0x3d, 0x76, 0x6e, 0x26, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x2e, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x63, 0x61, 0x70, 0x65, 0x3d, 0x74, 0x68, 0x60, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x73, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0xad, 0x01, 0x0a, 0x0d, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, + 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x2a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, + 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x75, 0x67, 0x67, 0x65, + 0x73, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x43, 0x92, 0x41, 0x21, 0x0a, 0x06, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x0a, 0x05, 0x41, + 0x73, 0x73, 0x65, 0x74, 0x12, 0x10, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x20, 0x61, 0x6e, + 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x2f, 0x73, 0x75, + 0x67, 0x67, 0x65, 0x73, 0x74, 0x12, 0xbe, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, + 0x70, 0x68, 0x12, 0x25, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, + 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, + 0x70, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6f, 0x64, 0x70, 0x66, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x63, 0x92, 0x41, 0x42, 0x0a, 0x07, 0x4c, 0x69, 0x6e, 0x65, 0x61, 0x67, 0x65, 0x0a, + 0x05, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x11, 0x47, 0x65, 0x74, 0x20, 0x4c, 0x69, 0x6e, 0x65, + 0x61, 0x67, 0x65, 0x20, 0x47, 0x72, 0x61, 0x70, 0x68, 0x1a, 0x1d, 0x47, 0x65, 0x74, 0x20, 0x6c, + 0x69, 0x6e, 0x65, 0x61, 0x67, 0x65, 0x20, 0x67, 0x72, 0x61, 0x70, 0x68, 0x20, 0x6f, 0x66, 0x20, + 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, + 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x67, 0x65, + 0x2f, 0x7b, 0x75, 0x72, 0x6e, 0x7d, 0x12, 0xdd, 0x01, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x41, 0x6c, + 0x6c, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, + 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, + 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x76, + 0x92, 0x41, 0x5c, 0x0a, 0x05, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x12, 0x47, 0x65, 0x74, 0x20, + 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x1a, 0x3f, + 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, + 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x2c, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x6c, 0x79, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, + 0x79, 0x70, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, + 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0xc2, 0x01, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x41, 0x73, + 0x73, 0x65, 0x74, 0x42, 0x79, 0x49, 0x44, 0x12, 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, 0x79, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, + 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, + 0x65, 0x74, 0x42, 0x79, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5b, + 0x92, 0x41, 0x3c, 0x0a, 0x05, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x0d, 0x46, 0x69, 0x6e, 0x64, + 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x1a, 0x24, 0x52, 0x65, 0x74, 0x75, 0x72, + 0x6e, 0x73, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x61, 0x73, 0x73, 0x65, + 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x49, 0x44, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, + 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x81, 0x02, 0x0a, 0x0b, + 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x28, 0x2e, 0x6f, 0x64, + 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x73, + 0x65, 0x72, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x9c, 0x01, 0x92, 0x41, 0x7f, 0x0a, 0x05, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x0f, 0x55, + 0x70, 0x73, 0x65, 0x72, 0x74, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x1a, 0x65, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x61, 0x73, 0x73, + 0x65, 0x74, 0x20, 0x69, 0x66, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x75, 0x72, 0x6e, 0x2c, 0x20, 0x74, 0x79, 0x70, 0x65, + 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, + 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x20, 0x49, 0x66, 0x20, + 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x69, 0x6e, + 0x73, 0x74, 0x65, 0x61, 0x64, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x1a, 0x0f, 0x2f, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x12, + 0xf4, 0x01, 0x0a, 0x10, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x50, 0x61, 0x74, 0x63, 0x68, 0x41, + 0x73, 0x73, 0x65, 0x74, 0x12, 0x2d, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, + 0x72, 0x74, 0x50, 0x61, 0x74, 0x63, 0x68, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, + 0x74, 0x50, 0x61, 0x74, 0x63, 0x68, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x80, 0x01, 0x92, 0x41, 0x63, 0x0a, 0x05, 0x41, 0x73, 0x73, 0x65, 0x74, + 0x12, 0x15, 0x50, 0x61, 0x74, 0x63, 0x68, 0x2f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, + 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x1a, 0x43, 0x53, 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, + 0x20, 0x74, 0x6f, 0x20, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x20, 0x62, 0x75, 0x74, 0x20, 0x77, + 0x69, 0x74, 0x68, 0x20, 0x70, 0x61, 0x74, 0x63, 0x68, 0x20, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, + 0x67, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, + 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x14, 0x32, 0x0f, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x73, 0x73, + 0x65, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xc0, 0x01, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x28, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x73, + 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5c, 0x92, 0x41, 0x3d, + 0x0a, 0x05, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, + 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x1a, 0x23, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x20, + 0x77, 0x69, 0x74, 0x68, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x16, 0x2a, 0x14, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x73, + 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xf7, 0x01, 0x0a, 0x12, 0x47, 0x65, + 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x53, 0x74, 0x61, 0x72, 0x67, 0x61, 0x7a, 0x65, 0x72, 0x73, + 0x12, 0x2f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, + 0x53, 0x74, 0x61, 0x72, 0x67, 0x61, 0x7a, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x30, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, + 0x74, 0x53, 0x74, 0x61, 0x72, 0x67, 0x61, 0x7a, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x7e, 0x92, 0x41, 0x54, 0x0a, 0x05, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, + 0x1e, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, + 0x20, 0x73, 0x74, 0x61, 0x72, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x1a, + 0x2b, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, + 0x6f, 0x66, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x73, 0x74, + 0x61, 0x72, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x21, 0x12, 0x1f, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x73, 0x73, + 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x67, 0x61, 0x7a, + 0x65, 0x72, 0x73, 0x12, 0xfe, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x33, + 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x73, + 0x73, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x79, 0x92, 0x41, 0x51, 0x0a, 0x05, + 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x1f, 0x47, 0x65, 0x74, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x20, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, + 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x1a, 0x27, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, + 0x61, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x20, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, + 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xf5, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, + 0x74, 0x42, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x2e, 0x6f, 0x64, 0x70, + 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, 0x79, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6f, 0x64, 0x70, + 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, 0x79, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7f, 0x92, 0x41, 0x4d, + 0x0a, 0x05, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x1c, 0x47, 0x65, 0x74, 0x20, 0x61, 0x73, 0x73, + 0x65, 0x74, 0x27, 0x73, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x20, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x26, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, + 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x29, 0x12, 0x27, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x73, + 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x2f, 0x7b, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x7d, 0x12, 0xf6, 0x01, 0x0a, + 0x14, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x41, + 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x31, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x41, 0x73, + 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x77, 0x92, 0x41, + 0x4c, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x0a, 0x04, 0x53, 0x74, 0x61, 0x72, 0x12, 0x1c, 0x47, + 0x65, 0x74, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x20, 0x73, 0x74, 0x61, 0x72, 0x72, 0x65, + 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x20, 0x75, 0x73, 0x65, 0x72, 0x1a, 0x20, 0x47, 0x65, 0x74, + 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x20, 0x73, 0x74, 0x61, 0x72, + 0x72, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x20, 0x75, 0x73, 0x65, 0x72, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x22, 0x12, 0x20, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x75, 0x73, + 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x73, 0x74, + 0x61, 0x72, 0x72, 0x65, 0x64, 0x12, 0xd8, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x53, + 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x2f, 0x2e, 0x6f, + 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x53, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, + 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, + 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x53, 0x74, 0x61, 0x72, 0x72, 0x65, + 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x5f, 0x92, 0x41, 0x41, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x0a, 0x04, 0x53, 0x74, 0x61, 0x72, + 0x12, 0x15, 0x47, 0x65, 0x74, 0x20, 0x6d, 0x79, 0x20, 0x73, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, + 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x1a, 0x1c, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, + 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x20, 0x73, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x20, + 0x62, 0x79, 0x20, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6d, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, + 0x12, 0xdd, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x53, 0x74, 0x61, 0x72, 0x72, 0x65, + 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x2e, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x4d, 0x79, 0x53, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x4d, 0x79, 0x53, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x67, 0x92, 0x41, 0x3e, 0x0a, 0x04, 0x55, 0x73, + 0x65, 0x72, 0x0a, 0x04, 0x53, 0x74, 0x61, 0x72, 0x12, 0x14, 0x47, 0x65, 0x74, 0x20, 0x6d, 0x79, + 0x20, 0x73, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x1a, 0x1a, + 0x47, 0x65, 0x74, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x20, 0x73, 0x74, 0x61, + 0x72, 0x72, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, + 0x12, 0x1e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6d, 0x65, 0x2f, 0x73, 0x74, + 0x61, 0x72, 0x72, 0x65, 0x64, 0x2f, 0x7b, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, + 0x12, 0xc3, 0x01, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x72, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x26, + 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x74, + 0x61, 0x72, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x65, 0x92, 0x41, 0x3c, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x0a, 0x04, 0x53, 0x74, 0x61, 0x72, + 0x12, 0x0d, 0x53, 0x74, 0x61, 0x72, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x1a, + 0x1f, 0x4d, 0x61, 0x72, 0x6b, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x20, 0x62, + 0x79, 0x20, 0x6d, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x73, 0x74, 0x61, 0x72, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x1a, 0x1e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2f, 0x6d, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x2f, 0x7b, 0x61, 0x73, 0x73, + 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xc3, 0x01, 0x0a, 0x0b, 0x55, 0x6e, 0x73, 0x74, 0x61, + 0x72, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x28, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x6e, + 0x73, 0x74, 0x61, 0x72, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x73, 0x74, 0x61, 0x72, 0x41, 0x73, + 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5f, 0x92, 0x41, 0x36, + 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x0a, 0x04, 0x53, 0x74, 0x61, 0x72, 0x12, 0x0f, 0x55, 0x6e, + 0x73, 0x74, 0x61, 0x72, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x1a, 0x17, 0x55, + 0x6e, 0x6d, 0x61, 0x72, 0x6b, 0x20, 0x6d, 0x79, 0x20, 0x73, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, + 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x2a, 0x1e, 0x2f, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6d, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x72, 0x65, + 0x64, 0x2f, 0x7b, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x81, 0x02, 0x0a, + 0x10, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x2d, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x44, 0x69, + 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2e, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x44, 0x69, 0x73, + 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x8d, 0x01, 0x92, 0x41, 0x6b, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x0a, 0x0a, 0x44, 0x69, + 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, + 0x6c, 0x20, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, + 0x20, 0x61, 0x20, 0x75, 0x73, 0x65, 0x72, 0x1a, 0x38, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, + 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x20, + 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x75, 0x73, 0x65, + 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2f, 0x6d, 0x65, 0x2f, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0xb8, 0x01, 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x26, + 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x5a, 0x92, 0x41, 0x3f, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x0c, 0x54, 0x61, 0x67, 0x20, 0x61, + 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x1a, 0x2a, 0x54, 0x61, 0x67, 0x20, 0x61, 0x20, 0x72, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, + 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x74, 0x61, 0x67, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x22, 0x0d, 0x2f, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xc2, 0x02, 0x0a, 0x1a, + 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 0x73, 0x42, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, + 0x6e, 0x64, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x37, 0x2e, 0x6f, 0x64, 0x70, + 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 0x73, 0x42, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x41, 0x6e, 0x64, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, + 0x67, 0x73, 0x42, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x6e, 0x64, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xb0, 0x01, + 0x92, 0x41, 0x5d, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x21, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x61, + 0x20, 0x74, 0x61, 0x67, 0x20, 0x62, 0x79, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x20, 0x61, + 0x6e, 0x64, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x1a, 0x33, 0x46, 0x69, 0x6e, + 0x64, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x74, 0x61, 0x67, 0x20, 0x75, + 0x73, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x20, 0x75, 0x72, 0x6e, 0x20, + 0x61, 0x6e, 0x64, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x75, 0x72, 0x6e, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4a, 0x12, 0x48, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x79, 0x70, + 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x5f, 0x75, 0x72, 0x6e, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x75, 0x72, 0x6e, 0x7d, + 0x12, 0xf8, 0x01, 0x0a, 0x09, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x26, + 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x99, 0x01, 0x92, 0x41, 0x43, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x18, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x20, 0x61, 0x20, 0x74, 0x61, 0x67, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x72, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x1a, 0x22, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x74, + 0x61, 0x67, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x20, 0x69, + 0x6e, 0x20, 0x61, 0x20, 0x74, 0x79, 0x70, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4d, 0x1a, 0x48, + 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x75, 0x72, 0x6e, 0x7d, 0x2f, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x5f, 0x75, 0x72, 0x6e, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xf5, 0x01, 0x0a, 0x09, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x26, 0x2e, 0x6f, 0x64, 0x70, 0x66, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x27, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, + 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x96, 0x01, 0x92, 0x41, 0x43, + 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x18, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x20, 0x61, 0x20, + 0x74, 0x61, 0x67, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x1a, + 0x22, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x20, 0x61, 0x20, 0x74, 0x61, 0x67, 0x20, 0x6f, 0x6e, + 0x20, 0x61, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x74, + 0x79, 0x70, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4a, 0x2a, 0x48, 0x2f, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x7b, + 0x74, 0x79, 0x70, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x2f, 0x7b, 0x72, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x75, 0x72, 0x6e, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x75, + 0x72, 0x6e, 0x7d, 0x12, 0xe9, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 0x73, 0x42, + 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x2c, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x54, 0x61, 0x67, 0x73, 0x42, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x54, 0x61, 0x67, 0x73, 0x42, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x79, 0x92, 0x41, 0x3f, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x13, + 0x47, 0x65, 0x74, 0x20, 0x61, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x27, 0x73, 0x20, 0x74, + 0x61, 0x67, 0x73, 0x1a, 0x23, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x61, 0x67, + 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x20, 0x69, + 0x6e, 0x20, 0x61, 0x20, 0x74, 0x79, 0x70, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x12, 0x2f, + 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x75, 0x72, 0x6e, 0x7d, 0x12, + 0xd8, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x2f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5f, 0x92, 0x41, 0x3d, 0x0a, 0x03, + 0x54, 0x61, 0x67, 0x12, 0x15, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x61, 0x67, + 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x1a, 0x1f, 0x47, 0x65, 0x74, 0x20, + 0x61, 0x6c, 0x6c, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x61, + 0x67, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, + 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0xce, 0x01, 0x0a, 0x11, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x12, 0x2e, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, + 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, + 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x58, 0x92, 0x41, 0x33, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x11, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x1a, 0x19, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x74, 0x61, 0x67, + 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x22, + 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xd2, 0x01, 0x0a, 0x0e, + 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x2b, + 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x6f, 0x64, + 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x65, 0x92, 0x41, 0x34, 0x0a, 0x03, + 0x54, 0x61, 0x67, 0x12, 0x12, 0x47, 0x65, 0x74, 0x20, 0x61, 0x20, 0x74, 0x61, 0x67, 0x20, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x1a, 0x19, 0x47, 0x65, 0x74, 0x20, 0x61, 0x20, 0x73, + 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x74, 0x61, 0x67, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x75, 0x72, 0x6e, 0x7d, + 0x12, 0xe3, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x2e, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6d, 0x92, 0x41, 0x39, 0x0a, 0x03, 0x54, 0x61, + 0x67, 0x12, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x1a, 0x1f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x61, 0x6e, 0x20, + 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x61, 0x67, 0x20, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x1a, 0x26, 0x2f, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x75, + 0x72, 0x6e, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xe1, 0x01, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x2e, 0x2e, 0x6f, + 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6f, + 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6b, 0x92, + 0x41, 0x3a, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, + 0x61, 0x20, 0x74, 0x61, 0x67, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x1a, 0x1c, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, + 0x74, 0x61, 0x67, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x61, 0x67, + 0x73, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x75, 0x72, 0x6e, 0x7d, 0x42, 0xae, 0x05, 0x0a, 0x16, 0x69, + 0x6f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x73, 0x73, 0x42, 0x13, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x35, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x64, 0x70, 0x66, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2f, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x92, 0x41, 0xc4, 0x04, 0x12, 0x97, 0x01, 0x0a, 0x07, 0x43, 0x6f, 0x6d, 0x70, + 0x61, 0x73, 0x73, 0x12, 0x3c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x6f, 0x75, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x73, + 0x73, 0x20, 0x41, 0x50, 0x49, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x67, 0x52, 0x50, 0x43, 0x20, + 0x61, 0x6e, 0x64, 0x20, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x2a, 0x47, 0x0a, 0x12, 0x41, 0x70, 0x61, 0x63, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, + 0x6e, 0x73, 0x65, 0x20, 0x32, 0x2e, 0x30, 0x12, 0x31, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, + 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x64, 0x70, 0x66, + 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, + 0x69, 0x6e, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x32, 0x05, 0x30, 0x2e, 0x31, 0x2e, + 0x39, 0x2a, 0x02, 0x01, 0x02, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x52, 0x51, 0x0a, 0x03, 0x34, 0x30, 0x30, + 0x12, 0x4a, 0x0a, 0x30, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, + 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, + 0x75, 0x73, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x69, 0x73, 0x20, 0x77, 0x72, + 0x6f, 0x6e, 0x67, 0x2e, 0x12, 0x16, 0x0a, 0x14, 0x1a, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x4b, 0x0a, 0x03, + 0x34, 0x30, 0x34, 0x12, 0x44, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, + 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, + 0x2e, 0x12, 0x16, 0x0a, 0x14, 0x1a, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x4a, 0x0a, 0x03, 0x34, 0x30, 0x39, + 0x12, 0x43, 0x0a, 0x29, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, + 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x61, + 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x16, 0x0a, + 0x14, 0x1a, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x5c, 0x0a, 0x03, 0x35, 0x30, 0x30, 0x12, 0x55, 0x0a, 0x3b, + 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, + 0x65, 0x72, 0x65, 0x73, 0x20, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x20, 0x77, 0x72, 0x6f, 0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x73, 0x69, 0x64, 0x65, 0x2e, 0x12, 0x16, 0x0a, 0x14, 0x1a, + 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x72, 0x36, 0x0a, 0x12, 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, + 0x74, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x12, 0x20, 0x68, 0x74, 0x74, 0x70, 0x73, + 0x3a, 0x2f, 0x2f, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x67, 0x69, 0x74, 0x62, 0x6f, 0x6f, 0x6b, 0x2e, + 0x69, 0x6f, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2f, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, +} + +var ( + file_odpf_compass_v1beta1_service_proto_rawDescOnce sync.Once + file_odpf_compass_v1beta1_service_proto_rawDescData = file_odpf_compass_v1beta1_service_proto_rawDesc +) + +func file_odpf_compass_v1beta1_service_proto_rawDescGZIP() []byte { + file_odpf_compass_v1beta1_service_proto_rawDescOnce.Do(func() { + file_odpf_compass_v1beta1_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_odpf_compass_v1beta1_service_proto_rawDescData) + }) + return file_odpf_compass_v1beta1_service_proto_rawDescData +} + +var file_odpf_compass_v1beta1_service_proto_msgTypes = make([]protoimpl.MessageInfo, 90) +var file_odpf_compass_v1beta1_service_proto_goTypes = []interface{}{ + (*GetAllDiscussionsRequest)(nil), // 0: odpf.compass.v1beta1.GetAllDiscussionsRequest + (*GetAllDiscussionsResponse)(nil), // 1: odpf.compass.v1beta1.GetAllDiscussionsResponse + (*CreateDiscussionRequest)(nil), // 2: odpf.compass.v1beta1.CreateDiscussionRequest + (*CreateDiscussionResponse)(nil), // 3: odpf.compass.v1beta1.CreateDiscussionResponse + (*GetDiscussionRequest)(nil), // 4: odpf.compass.v1beta1.GetDiscussionRequest + (*GetDiscussionResponse)(nil), // 5: odpf.compass.v1beta1.GetDiscussionResponse + (*PatchDiscussionRequest)(nil), // 6: odpf.compass.v1beta1.PatchDiscussionRequest + (*CreateCommentRequest)(nil), // 7: odpf.compass.v1beta1.CreateCommentRequest + (*PatchDiscussionResponse)(nil), // 8: odpf.compass.v1beta1.PatchDiscussionResponse + (*CreateCommentResponse)(nil), // 9: odpf.compass.v1beta1.CreateCommentResponse + (*GetAllCommentsRequest)(nil), // 10: odpf.compass.v1beta1.GetAllCommentsRequest + (*GetAllCommentsResponse)(nil), // 11: odpf.compass.v1beta1.GetAllCommentsResponse + (*GetCommentRequest)(nil), // 12: odpf.compass.v1beta1.GetCommentRequest + (*GetCommentResponse)(nil), // 13: odpf.compass.v1beta1.GetCommentResponse + (*UpdateCommentRequest)(nil), // 14: odpf.compass.v1beta1.UpdateCommentRequest + (*UpdateCommentResponse)(nil), // 15: odpf.compass.v1beta1.UpdateCommentResponse + (*DeleteCommentRequest)(nil), // 16: odpf.compass.v1beta1.DeleteCommentRequest + (*DeleteCommentResponse)(nil), // 17: odpf.compass.v1beta1.DeleteCommentResponse + (*SearchAssetsRequest)(nil), // 18: odpf.compass.v1beta1.SearchAssetsRequest + (*SearchAssetsResponse)(nil), // 19: odpf.compass.v1beta1.SearchAssetsResponse + (*SuggestAssetsRequest)(nil), // 20: odpf.compass.v1beta1.SuggestAssetsRequest + (*SuggestAssetsResponse)(nil), // 21: odpf.compass.v1beta1.SuggestAssetsResponse + (*GetGraphRequest)(nil), // 22: odpf.compass.v1beta1.GetGraphRequest + (*GetGraphResponse)(nil), // 23: odpf.compass.v1beta1.GetGraphResponse + (*GetAllAssetsRequest)(nil), // 24: odpf.compass.v1beta1.GetAllAssetsRequest + (*GetAllAssetsResponse)(nil), // 25: odpf.compass.v1beta1.GetAllAssetsResponse + (*GetAssetByIDRequest)(nil), // 26: odpf.compass.v1beta1.GetAssetByIDRequest + (*GetAssetByIDResponse)(nil), // 27: odpf.compass.v1beta1.GetAssetByIDResponse + (*UpsertAssetRequest)(nil), // 28: odpf.compass.v1beta1.UpsertAssetRequest + (*UpsertAssetResponse)(nil), // 29: odpf.compass.v1beta1.UpsertAssetResponse + (*UpsertPatchAssetRequest)(nil), // 30: odpf.compass.v1beta1.UpsertPatchAssetRequest + (*UpsertPatchAssetResponse)(nil), // 31: odpf.compass.v1beta1.UpsertPatchAssetResponse + (*DeleteAssetRequest)(nil), // 32: odpf.compass.v1beta1.DeleteAssetRequest + (*DeleteAssetResponse)(nil), // 33: odpf.compass.v1beta1.DeleteAssetResponse + (*GetAssetStargazersRequest)(nil), // 34: odpf.compass.v1beta1.GetAssetStargazersRequest + (*GetAssetStargazersResponse)(nil), // 35: odpf.compass.v1beta1.GetAssetStargazersResponse + (*GetAssetVersionHistoryRequest)(nil), // 36: odpf.compass.v1beta1.GetAssetVersionHistoryRequest + (*GetAssetVersionHistoryResponse)(nil), // 37: odpf.compass.v1beta1.GetAssetVersionHistoryResponse + (*GetAssetByVersionRequest)(nil), // 38: odpf.compass.v1beta1.GetAssetByVersionRequest + (*GetAssetByVersionResponse)(nil), // 39: odpf.compass.v1beta1.GetAssetByVersionResponse + (*GetUserStarredAssetsRequest)(nil), // 40: odpf.compass.v1beta1.GetUserStarredAssetsRequest + (*GetUserStarredAssetsResponse)(nil), // 41: odpf.compass.v1beta1.GetUserStarredAssetsResponse + (*GetMyStarredAssetsRequest)(nil), // 42: odpf.compass.v1beta1.GetMyStarredAssetsRequest + (*GetMyStarredAssetsResponse)(nil), // 43: odpf.compass.v1beta1.GetMyStarredAssetsResponse + (*GetMyStarredAssetRequest)(nil), // 44: odpf.compass.v1beta1.GetMyStarredAssetRequest + (*GetMyStarredAssetResponse)(nil), // 45: odpf.compass.v1beta1.GetMyStarredAssetResponse + (*StarAssetRequest)(nil), // 46: odpf.compass.v1beta1.StarAssetRequest + (*StarAssetResponse)(nil), // 47: odpf.compass.v1beta1.StarAssetResponse + (*UnstarAssetRequest)(nil), // 48: odpf.compass.v1beta1.UnstarAssetRequest + (*UnstarAssetResponse)(nil), // 49: odpf.compass.v1beta1.UnstarAssetResponse + (*GetMyDiscussionsRequest)(nil), // 50: odpf.compass.v1beta1.GetMyDiscussionsRequest + (*GetMyDiscussionsResponse)(nil), // 51: odpf.compass.v1beta1.GetMyDiscussionsResponse + (*CreateTagRequest)(nil), // 52: odpf.compass.v1beta1.CreateTagRequest + (*CreateTagResponse)(nil), // 53: odpf.compass.v1beta1.CreateTagResponse + (*GetTagsByRecordAndTemplateRequest)(nil), // 54: odpf.compass.v1beta1.GetTagsByRecordAndTemplateRequest + (*GetTagsByRecordAndTemplateResponse)(nil), // 55: odpf.compass.v1beta1.GetTagsByRecordAndTemplateResponse + (*UpdateTagRequest)(nil), // 56: odpf.compass.v1beta1.UpdateTagRequest + (*UpdateTagResponse)(nil), // 57: odpf.compass.v1beta1.UpdateTagResponse + (*DeleteTagRequest)(nil), // 58: odpf.compass.v1beta1.DeleteTagRequest + (*DeleteTagResponse)(nil), // 59: odpf.compass.v1beta1.DeleteTagResponse + (*GetTagsByRecordRequest)(nil), // 60: odpf.compass.v1beta1.GetTagsByRecordRequest + (*GetTagsByRecordResponse)(nil), // 61: odpf.compass.v1beta1.GetTagsByRecordResponse + (*GetAllTagTemplatesRequest)(nil), // 62: odpf.compass.v1beta1.GetAllTagTemplatesRequest + (*GetAllTagTemplatesResponse)(nil), // 63: odpf.compass.v1beta1.GetAllTagTemplatesResponse + (*CreateTagTemplateRequest)(nil), // 64: odpf.compass.v1beta1.CreateTagTemplateRequest + (*CreateTagTemplateResponse)(nil), // 65: odpf.compass.v1beta1.CreateTagTemplateResponse + (*GetTagTemplateRequest)(nil), // 66: odpf.compass.v1beta1.GetTagTemplateRequest + (*GetTagTemplateResponse)(nil), // 67: odpf.compass.v1beta1.GetTagTemplateResponse + (*UpdateTagTemplateRequest)(nil), // 68: odpf.compass.v1beta1.UpdateTagTemplateRequest + (*UpdateTagTemplateResponse)(nil), // 69: odpf.compass.v1beta1.UpdateTagTemplateResponse + (*DeleteTagTemplateRequest)(nil), // 70: odpf.compass.v1beta1.DeleteTagTemplateRequest + (*DeleteTagTemplateResponse)(nil), // 71: odpf.compass.v1beta1.DeleteTagTemplateResponse + (*User)(nil), // 72: odpf.compass.v1beta1.User + (*Changelog)(nil), // 73: odpf.compass.v1beta1.Changelog + (*Change)(nil), // 74: odpf.compass.v1beta1.Change + (*Asset)(nil), // 75: odpf.compass.v1beta1.Asset + (*Discussion)(nil), // 76: odpf.compass.v1beta1.Discussion + (*Comment)(nil), // 77: odpf.compass.v1beta1.Comment + (*LineageEdge)(nil), // 78: odpf.compass.v1beta1.LineageEdge + (*LineageNode)(nil), // 79: odpf.compass.v1beta1.LineageNode + (*Tag)(nil), // 80: odpf.compass.v1beta1.Tag + (*TagValue)(nil), // 81: odpf.compass.v1beta1.TagValue + (*TagTemplate)(nil), // 82: odpf.compass.v1beta1.TagTemplate + (*TagTemplateField)(nil), // 83: odpf.compass.v1beta1.TagTemplateField + nil, // 84: odpf.compass.v1beta1.SearchAssetsRequest.FilterEntry + nil, // 85: odpf.compass.v1beta1.SearchAssetsRequest.QueryEntry + nil, // 86: odpf.compass.v1beta1.SuggestAssetsRequest.FilterEntry + nil, // 87: odpf.compass.v1beta1.SuggestAssetsRequest.QueryEntry + (*UpsertAssetRequest_BaseAsset)(nil), // 88: odpf.compass.v1beta1.UpsertAssetRequest.BaseAsset + (*UpsertPatchAssetRequest_BaseAsset)(nil), // 89: odpf.compass.v1beta1.UpsertPatchAssetRequest.BaseAsset + (*timestamppb.Timestamp)(nil), // 90: google.protobuf.Timestamp + (*structpb.Value)(nil), // 91: google.protobuf.Value + (*structpb.Struct)(nil), // 92: google.protobuf.Struct + (*wrapperspb.StringValue)(nil), // 93: google.protobuf.StringValue +} +var file_odpf_compass_v1beta1_service_proto_depIdxs = []int32{ + 76, // 0: odpf.compass.v1beta1.GetAllDiscussionsResponse.data:type_name -> odpf.compass.v1beta1.Discussion + 76, // 1: odpf.compass.v1beta1.GetDiscussionResponse.data:type_name -> odpf.compass.v1beta1.Discussion + 77, // 2: odpf.compass.v1beta1.GetAllCommentsResponse.data:type_name -> odpf.compass.v1beta1.Comment + 77, // 3: odpf.compass.v1beta1.GetCommentResponse.data:type_name -> odpf.compass.v1beta1.Comment + 84, // 4: odpf.compass.v1beta1.SearchAssetsRequest.filter:type_name -> odpf.compass.v1beta1.SearchAssetsRequest.FilterEntry + 85, // 5: odpf.compass.v1beta1.SearchAssetsRequest.query:type_name -> odpf.compass.v1beta1.SearchAssetsRequest.QueryEntry + 75, // 6: odpf.compass.v1beta1.SearchAssetsResponse.data:type_name -> odpf.compass.v1beta1.Asset + 86, // 7: odpf.compass.v1beta1.SuggestAssetsRequest.filter:type_name -> odpf.compass.v1beta1.SuggestAssetsRequest.FilterEntry + 87, // 8: odpf.compass.v1beta1.SuggestAssetsRequest.query:type_name -> odpf.compass.v1beta1.SuggestAssetsRequest.QueryEntry + 78, // 9: odpf.compass.v1beta1.GetGraphResponse.data:type_name -> odpf.compass.v1beta1.LineageEdge + 75, // 10: odpf.compass.v1beta1.GetAllAssetsResponse.data:type_name -> odpf.compass.v1beta1.Asset + 75, // 11: odpf.compass.v1beta1.GetAssetByIDResponse.data:type_name -> odpf.compass.v1beta1.Asset + 88, // 12: odpf.compass.v1beta1.UpsertAssetRequest.asset:type_name -> odpf.compass.v1beta1.UpsertAssetRequest.BaseAsset + 79, // 13: odpf.compass.v1beta1.UpsertAssetRequest.upstreams:type_name -> odpf.compass.v1beta1.LineageNode + 79, // 14: odpf.compass.v1beta1.UpsertAssetRequest.downstreams:type_name -> odpf.compass.v1beta1.LineageNode + 89, // 15: odpf.compass.v1beta1.UpsertPatchAssetRequest.asset:type_name -> odpf.compass.v1beta1.UpsertPatchAssetRequest.BaseAsset + 79, // 16: odpf.compass.v1beta1.UpsertPatchAssetRequest.upstreams:type_name -> odpf.compass.v1beta1.LineageNode + 79, // 17: odpf.compass.v1beta1.UpsertPatchAssetRequest.downstreams:type_name -> odpf.compass.v1beta1.LineageNode + 72, // 18: odpf.compass.v1beta1.GetAssetStargazersResponse.data:type_name -> odpf.compass.v1beta1.User + 75, // 19: odpf.compass.v1beta1.GetAssetVersionHistoryResponse.data:type_name -> odpf.compass.v1beta1.Asset + 75, // 20: odpf.compass.v1beta1.GetAssetByVersionResponse.data:type_name -> odpf.compass.v1beta1.Asset + 75, // 21: odpf.compass.v1beta1.GetUserStarredAssetsResponse.data:type_name -> odpf.compass.v1beta1.Asset + 75, // 22: odpf.compass.v1beta1.GetMyStarredAssetsResponse.data:type_name -> odpf.compass.v1beta1.Asset + 75, // 23: odpf.compass.v1beta1.GetMyStarredAssetResponse.data:type_name -> odpf.compass.v1beta1.Asset + 76, // 24: odpf.compass.v1beta1.GetMyDiscussionsResponse.data:type_name -> odpf.compass.v1beta1.Discussion + 81, // 25: odpf.compass.v1beta1.CreateTagRequest.tag_values:type_name -> odpf.compass.v1beta1.TagValue + 80, // 26: odpf.compass.v1beta1.CreateTagResponse.data:type_name -> odpf.compass.v1beta1.Tag + 80, // 27: odpf.compass.v1beta1.GetTagsByRecordAndTemplateResponse.data:type_name -> odpf.compass.v1beta1.Tag + 81, // 28: odpf.compass.v1beta1.UpdateTagRequest.tag_values:type_name -> odpf.compass.v1beta1.TagValue + 80, // 29: odpf.compass.v1beta1.UpdateTagResponse.data:type_name -> odpf.compass.v1beta1.Tag + 80, // 30: odpf.compass.v1beta1.GetTagsByRecordResponse.data:type_name -> odpf.compass.v1beta1.Tag + 82, // 31: odpf.compass.v1beta1.GetAllTagTemplatesResponse.data:type_name -> odpf.compass.v1beta1.TagTemplate + 83, // 32: odpf.compass.v1beta1.CreateTagTemplateRequest.fields:type_name -> odpf.compass.v1beta1.TagTemplateField + 82, // 33: odpf.compass.v1beta1.CreateTagTemplateResponse.data:type_name -> odpf.compass.v1beta1.TagTemplate + 82, // 34: odpf.compass.v1beta1.GetTagTemplateResponse.data:type_name -> odpf.compass.v1beta1.TagTemplate + 83, // 35: odpf.compass.v1beta1.UpdateTagTemplateRequest.fields:type_name -> odpf.compass.v1beta1.TagTemplateField + 82, // 36: odpf.compass.v1beta1.UpdateTagTemplateResponse.data:type_name -> odpf.compass.v1beta1.TagTemplate + 90, // 37: odpf.compass.v1beta1.User.created_at:type_name -> google.protobuf.Timestamp + 90, // 38: odpf.compass.v1beta1.User.updated_at:type_name -> google.protobuf.Timestamp + 74, // 39: odpf.compass.v1beta1.Changelog.changes:type_name -> odpf.compass.v1beta1.Change + 91, // 40: odpf.compass.v1beta1.Change.from:type_name -> google.protobuf.Value + 91, // 41: odpf.compass.v1beta1.Change.to:type_name -> google.protobuf.Value + 92, // 42: odpf.compass.v1beta1.Asset.data:type_name -> google.protobuf.Struct + 92, // 43: odpf.compass.v1beta1.Asset.labels:type_name -> google.protobuf.Struct + 72, // 44: odpf.compass.v1beta1.Asset.owners:type_name -> odpf.compass.v1beta1.User + 72, // 45: odpf.compass.v1beta1.Asset.updated_by:type_name -> odpf.compass.v1beta1.User + 73, // 46: odpf.compass.v1beta1.Asset.changelog:type_name -> odpf.compass.v1beta1.Changelog + 90, // 47: odpf.compass.v1beta1.Asset.created_at:type_name -> google.protobuf.Timestamp + 90, // 48: odpf.compass.v1beta1.Asset.updated_at:type_name -> google.protobuf.Timestamp + 72, // 49: odpf.compass.v1beta1.Discussion.owner:type_name -> odpf.compass.v1beta1.User + 90, // 50: odpf.compass.v1beta1.Discussion.created_at:type_name -> google.protobuf.Timestamp + 90, // 51: odpf.compass.v1beta1.Discussion.updated_at:type_name -> google.protobuf.Timestamp + 72, // 52: odpf.compass.v1beta1.Comment.owner:type_name -> odpf.compass.v1beta1.User + 72, // 53: odpf.compass.v1beta1.Comment.updated_by:type_name -> odpf.compass.v1beta1.User + 90, // 54: odpf.compass.v1beta1.Comment.created_at:type_name -> google.protobuf.Timestamp + 90, // 55: odpf.compass.v1beta1.Comment.updated_at:type_name -> google.protobuf.Timestamp + 92, // 56: odpf.compass.v1beta1.LineageEdge.prop:type_name -> google.protobuf.Struct + 81, // 57: odpf.compass.v1beta1.Tag.tag_values:type_name -> odpf.compass.v1beta1.TagValue + 91, // 58: odpf.compass.v1beta1.TagValue.field_value:type_name -> google.protobuf.Value + 90, // 59: odpf.compass.v1beta1.TagValue.created_at:type_name -> google.protobuf.Timestamp + 90, // 60: odpf.compass.v1beta1.TagValue.updated_at:type_name -> google.protobuf.Timestamp + 83, // 61: odpf.compass.v1beta1.TagTemplate.fields:type_name -> odpf.compass.v1beta1.TagTemplateField + 90, // 62: odpf.compass.v1beta1.TagTemplate.created_at:type_name -> google.protobuf.Timestamp + 90, // 63: odpf.compass.v1beta1.TagTemplate.updated_at:type_name -> google.protobuf.Timestamp + 90, // 64: odpf.compass.v1beta1.TagTemplateField.created_at:type_name -> google.protobuf.Timestamp + 90, // 65: odpf.compass.v1beta1.TagTemplateField.updated_at:type_name -> google.protobuf.Timestamp + 92, // 66: odpf.compass.v1beta1.UpsertAssetRequest.BaseAsset.data:type_name -> google.protobuf.Struct + 92, // 67: odpf.compass.v1beta1.UpsertAssetRequest.BaseAsset.labels:type_name -> google.protobuf.Struct + 93, // 68: odpf.compass.v1beta1.UpsertPatchAssetRequest.BaseAsset.name:type_name -> google.protobuf.StringValue + 93, // 69: odpf.compass.v1beta1.UpsertPatchAssetRequest.BaseAsset.description:type_name -> google.protobuf.StringValue + 92, // 70: odpf.compass.v1beta1.UpsertPatchAssetRequest.BaseAsset.data:type_name -> google.protobuf.Struct + 92, // 71: odpf.compass.v1beta1.UpsertPatchAssetRequest.BaseAsset.labels:type_name -> google.protobuf.Struct + 0, // 72: odpf.compass.v1beta1.CompassService.GetAllDiscussions:input_type -> odpf.compass.v1beta1.GetAllDiscussionsRequest + 2, // 73: odpf.compass.v1beta1.CompassService.CreateDiscussion:input_type -> odpf.compass.v1beta1.CreateDiscussionRequest + 4, // 74: odpf.compass.v1beta1.CompassService.GetDiscussion:input_type -> odpf.compass.v1beta1.GetDiscussionRequest + 6, // 75: odpf.compass.v1beta1.CompassService.PatchDiscussion:input_type -> odpf.compass.v1beta1.PatchDiscussionRequest + 7, // 76: odpf.compass.v1beta1.CompassService.CreateComment:input_type -> odpf.compass.v1beta1.CreateCommentRequest + 10, // 77: odpf.compass.v1beta1.CompassService.GetAllComments:input_type -> odpf.compass.v1beta1.GetAllCommentsRequest + 12, // 78: odpf.compass.v1beta1.CompassService.GetComment:input_type -> odpf.compass.v1beta1.GetCommentRequest + 14, // 79: odpf.compass.v1beta1.CompassService.UpdateComment:input_type -> odpf.compass.v1beta1.UpdateCommentRequest + 16, // 80: odpf.compass.v1beta1.CompassService.DeleteComment:input_type -> odpf.compass.v1beta1.DeleteCommentRequest + 18, // 81: odpf.compass.v1beta1.CompassService.SearchAssets:input_type -> odpf.compass.v1beta1.SearchAssetsRequest + 20, // 82: odpf.compass.v1beta1.CompassService.SuggestAssets:input_type -> odpf.compass.v1beta1.SuggestAssetsRequest + 22, // 83: odpf.compass.v1beta1.CompassService.GetGraph:input_type -> odpf.compass.v1beta1.GetGraphRequest + 24, // 84: odpf.compass.v1beta1.CompassService.GetAllAssets:input_type -> odpf.compass.v1beta1.GetAllAssetsRequest + 26, // 85: odpf.compass.v1beta1.CompassService.GetAssetByID:input_type -> odpf.compass.v1beta1.GetAssetByIDRequest + 28, // 86: odpf.compass.v1beta1.CompassService.UpsertAsset:input_type -> odpf.compass.v1beta1.UpsertAssetRequest + 30, // 87: odpf.compass.v1beta1.CompassService.UpsertPatchAsset:input_type -> odpf.compass.v1beta1.UpsertPatchAssetRequest + 32, // 88: odpf.compass.v1beta1.CompassService.DeleteAsset:input_type -> odpf.compass.v1beta1.DeleteAssetRequest + 34, // 89: odpf.compass.v1beta1.CompassService.GetAssetStargazers:input_type -> odpf.compass.v1beta1.GetAssetStargazersRequest + 36, // 90: odpf.compass.v1beta1.CompassService.GetAssetVersionHistory:input_type -> odpf.compass.v1beta1.GetAssetVersionHistoryRequest + 38, // 91: odpf.compass.v1beta1.CompassService.GetAssetByVersion:input_type -> odpf.compass.v1beta1.GetAssetByVersionRequest + 40, // 92: odpf.compass.v1beta1.CompassService.GetUserStarredAssets:input_type -> odpf.compass.v1beta1.GetUserStarredAssetsRequest + 42, // 93: odpf.compass.v1beta1.CompassService.GetMyStarredAssets:input_type -> odpf.compass.v1beta1.GetMyStarredAssetsRequest + 44, // 94: odpf.compass.v1beta1.CompassService.GetMyStarredAsset:input_type -> odpf.compass.v1beta1.GetMyStarredAssetRequest + 46, // 95: odpf.compass.v1beta1.CompassService.StarAsset:input_type -> odpf.compass.v1beta1.StarAssetRequest + 48, // 96: odpf.compass.v1beta1.CompassService.UnstarAsset:input_type -> odpf.compass.v1beta1.UnstarAssetRequest + 50, // 97: odpf.compass.v1beta1.CompassService.GetMyDiscussions:input_type -> odpf.compass.v1beta1.GetMyDiscussionsRequest + 52, // 98: odpf.compass.v1beta1.CompassService.CreateTag:input_type -> odpf.compass.v1beta1.CreateTagRequest + 54, // 99: odpf.compass.v1beta1.CompassService.GetTagsByRecordAndTemplate:input_type -> odpf.compass.v1beta1.GetTagsByRecordAndTemplateRequest + 56, // 100: odpf.compass.v1beta1.CompassService.UpdateTag:input_type -> odpf.compass.v1beta1.UpdateTagRequest + 58, // 101: odpf.compass.v1beta1.CompassService.DeleteTag:input_type -> odpf.compass.v1beta1.DeleteTagRequest + 60, // 102: odpf.compass.v1beta1.CompassService.GetTagsByRecord:input_type -> odpf.compass.v1beta1.GetTagsByRecordRequest + 62, // 103: odpf.compass.v1beta1.CompassService.GetAllTagTemplates:input_type -> odpf.compass.v1beta1.GetAllTagTemplatesRequest + 64, // 104: odpf.compass.v1beta1.CompassService.CreateTagTemplate:input_type -> odpf.compass.v1beta1.CreateTagTemplateRequest + 66, // 105: odpf.compass.v1beta1.CompassService.GetTagTemplate:input_type -> odpf.compass.v1beta1.GetTagTemplateRequest + 68, // 106: odpf.compass.v1beta1.CompassService.UpdateTagTemplate:input_type -> odpf.compass.v1beta1.UpdateTagTemplateRequest + 70, // 107: odpf.compass.v1beta1.CompassService.DeleteTagTemplate:input_type -> odpf.compass.v1beta1.DeleteTagTemplateRequest + 1, // 108: odpf.compass.v1beta1.CompassService.GetAllDiscussions:output_type -> odpf.compass.v1beta1.GetAllDiscussionsResponse + 3, // 109: odpf.compass.v1beta1.CompassService.CreateDiscussion:output_type -> odpf.compass.v1beta1.CreateDiscussionResponse + 5, // 110: odpf.compass.v1beta1.CompassService.GetDiscussion:output_type -> odpf.compass.v1beta1.GetDiscussionResponse + 8, // 111: odpf.compass.v1beta1.CompassService.PatchDiscussion:output_type -> odpf.compass.v1beta1.PatchDiscussionResponse + 9, // 112: odpf.compass.v1beta1.CompassService.CreateComment:output_type -> odpf.compass.v1beta1.CreateCommentResponse + 11, // 113: odpf.compass.v1beta1.CompassService.GetAllComments:output_type -> odpf.compass.v1beta1.GetAllCommentsResponse + 13, // 114: odpf.compass.v1beta1.CompassService.GetComment:output_type -> odpf.compass.v1beta1.GetCommentResponse + 15, // 115: odpf.compass.v1beta1.CompassService.UpdateComment:output_type -> odpf.compass.v1beta1.UpdateCommentResponse + 17, // 116: odpf.compass.v1beta1.CompassService.DeleteComment:output_type -> odpf.compass.v1beta1.DeleteCommentResponse + 19, // 117: odpf.compass.v1beta1.CompassService.SearchAssets:output_type -> odpf.compass.v1beta1.SearchAssetsResponse + 21, // 118: odpf.compass.v1beta1.CompassService.SuggestAssets:output_type -> odpf.compass.v1beta1.SuggestAssetsResponse + 23, // 119: odpf.compass.v1beta1.CompassService.GetGraph:output_type -> odpf.compass.v1beta1.GetGraphResponse + 25, // 120: odpf.compass.v1beta1.CompassService.GetAllAssets:output_type -> odpf.compass.v1beta1.GetAllAssetsResponse + 27, // 121: odpf.compass.v1beta1.CompassService.GetAssetByID:output_type -> odpf.compass.v1beta1.GetAssetByIDResponse + 29, // 122: odpf.compass.v1beta1.CompassService.UpsertAsset:output_type -> odpf.compass.v1beta1.UpsertAssetResponse + 31, // 123: odpf.compass.v1beta1.CompassService.UpsertPatchAsset:output_type -> odpf.compass.v1beta1.UpsertPatchAssetResponse + 33, // 124: odpf.compass.v1beta1.CompassService.DeleteAsset:output_type -> odpf.compass.v1beta1.DeleteAssetResponse + 35, // 125: odpf.compass.v1beta1.CompassService.GetAssetStargazers:output_type -> odpf.compass.v1beta1.GetAssetStargazersResponse + 37, // 126: odpf.compass.v1beta1.CompassService.GetAssetVersionHistory:output_type -> odpf.compass.v1beta1.GetAssetVersionHistoryResponse + 39, // 127: odpf.compass.v1beta1.CompassService.GetAssetByVersion:output_type -> odpf.compass.v1beta1.GetAssetByVersionResponse + 41, // 128: odpf.compass.v1beta1.CompassService.GetUserStarredAssets:output_type -> odpf.compass.v1beta1.GetUserStarredAssetsResponse + 43, // 129: odpf.compass.v1beta1.CompassService.GetMyStarredAssets:output_type -> odpf.compass.v1beta1.GetMyStarredAssetsResponse + 45, // 130: odpf.compass.v1beta1.CompassService.GetMyStarredAsset:output_type -> odpf.compass.v1beta1.GetMyStarredAssetResponse + 47, // 131: odpf.compass.v1beta1.CompassService.StarAsset:output_type -> odpf.compass.v1beta1.StarAssetResponse + 49, // 132: odpf.compass.v1beta1.CompassService.UnstarAsset:output_type -> odpf.compass.v1beta1.UnstarAssetResponse + 51, // 133: odpf.compass.v1beta1.CompassService.GetMyDiscussions:output_type -> odpf.compass.v1beta1.GetMyDiscussionsResponse + 53, // 134: odpf.compass.v1beta1.CompassService.CreateTag:output_type -> odpf.compass.v1beta1.CreateTagResponse + 55, // 135: odpf.compass.v1beta1.CompassService.GetTagsByRecordAndTemplate:output_type -> odpf.compass.v1beta1.GetTagsByRecordAndTemplateResponse + 57, // 136: odpf.compass.v1beta1.CompassService.UpdateTag:output_type -> odpf.compass.v1beta1.UpdateTagResponse + 59, // 137: odpf.compass.v1beta1.CompassService.DeleteTag:output_type -> odpf.compass.v1beta1.DeleteTagResponse + 61, // 138: odpf.compass.v1beta1.CompassService.GetTagsByRecord:output_type -> odpf.compass.v1beta1.GetTagsByRecordResponse + 63, // 139: odpf.compass.v1beta1.CompassService.GetAllTagTemplates:output_type -> odpf.compass.v1beta1.GetAllTagTemplatesResponse + 65, // 140: odpf.compass.v1beta1.CompassService.CreateTagTemplate:output_type -> odpf.compass.v1beta1.CreateTagTemplateResponse + 67, // 141: odpf.compass.v1beta1.CompassService.GetTagTemplate:output_type -> odpf.compass.v1beta1.GetTagTemplateResponse + 69, // 142: odpf.compass.v1beta1.CompassService.UpdateTagTemplate:output_type -> odpf.compass.v1beta1.UpdateTagTemplateResponse + 71, // 143: odpf.compass.v1beta1.CompassService.DeleteTagTemplate:output_type -> odpf.compass.v1beta1.DeleteTagTemplateResponse + 108, // [108:144] is the sub-list for method output_type + 72, // [72:108] is the sub-list for method input_type + 72, // [72:72] is the sub-list for extension type_name + 72, // [72:72] is the sub-list for extension extendee + 0, // [0:72] is the sub-list for field type_name +} + +func init() { file_odpf_compass_v1beta1_service_proto_init() } +func file_odpf_compass_v1beta1_service_proto_init() { + if File_odpf_compass_v1beta1_service_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_odpf_compass_v1beta1_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAllDiscussionsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_compass_v1beta1_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAllDiscussionsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_compass_v1beta1_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateDiscussionRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_compass_v1beta1_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateDiscussionResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_compass_v1beta1_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetDiscussionRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_compass_v1beta1_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetDiscussionResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_compass_v1beta1_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PatchDiscussionRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_compass_v1beta1_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateCommentRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_compass_v1beta1_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PatchDiscussionResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_compass_v1beta1_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateCommentResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_compass_v1beta1_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAllCommentsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_compass_v1beta1_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAllCommentsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_compass_v1beta1_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetCommentRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_compass_v1beta1_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetCommentResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_compass_v1beta1_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateCommentRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_compass_v1beta1_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateCommentResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_compass_v1beta1_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteCommentRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_compass_v1beta1_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteCommentResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_compass_v1beta1_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SearchAssetsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_compass_v1beta1_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SearchAssetsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_compass_v1beta1_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SuggestAssetsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_compass_v1beta1_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SuggestAssetsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_compass_v1beta1_service_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetGraphRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_compass_v1beta1_service_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetGraphResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_compass_v1beta1_service_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAllAssetsRequest); i { case 0: return &v.state case 1: @@ -4297,8 +7379,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAllDiscussionsResponse); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAllAssetsResponse); i { case 0: return &v.state case 1: @@ -4309,8 +7391,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateDiscussionRequest); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAssetByIDRequest); i { case 0: return &v.state case 1: @@ -4321,8 +7403,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateDiscussionResponse); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAssetByIDResponse); i { case 0: return &v.state case 1: @@ -4333,8 +7415,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDiscussionRequest); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpsertAssetRequest); i { case 0: return &v.state case 1: @@ -4345,8 +7427,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDiscussionResponse); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpsertAssetResponse); i { case 0: return &v.state case 1: @@ -4357,8 +7439,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PatchDiscussionRequest); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpsertPatchAssetRequest); i { case 0: return &v.state case 1: @@ -4369,8 +7451,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateCommentRequest); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpsertPatchAssetResponse); i { case 0: return &v.state case 1: @@ -4381,8 +7463,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PatchDiscussionResponse); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteAssetRequest); i { case 0: return &v.state case 1: @@ -4393,8 +7475,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateCommentResponse); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteAssetResponse); i { case 0: return &v.state case 1: @@ -4405,8 +7487,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAllCommentsRequest); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAssetStargazersRequest); i { case 0: return &v.state case 1: @@ -4417,8 +7499,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAllCommentsResponse); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAssetStargazersResponse); i { case 0: return &v.state case 1: @@ -4429,8 +7511,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCommentRequest); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAssetVersionHistoryRequest); i { case 0: return &v.state case 1: @@ -4441,8 +7523,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCommentResponse); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAssetVersionHistoryResponse); i { case 0: return &v.state case 1: @@ -4453,8 +7535,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateCommentRequest); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAssetByVersionRequest); i { case 0: return &v.state case 1: @@ -4465,8 +7547,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateCommentResponse); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAssetByVersionResponse); i { case 0: return &v.state case 1: @@ -4477,8 +7559,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteCommentRequest); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetUserStarredAssetsRequest); i { case 0: return &v.state case 1: @@ -4489,8 +7571,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteCommentResponse); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetUserStarredAssetsResponse); i { case 0: return &v.state case 1: @@ -4501,8 +7583,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SearchAssetsRequest); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMyStarredAssetsRequest); i { case 0: return &v.state case 1: @@ -4513,8 +7595,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SearchAssetsResponse); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMyStarredAssetsResponse); i { case 0: return &v.state case 1: @@ -4525,8 +7607,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SuggestAssetsRequest); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMyStarredAssetRequest); i { case 0: return &v.state case 1: @@ -4537,8 +7619,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SuggestAssetsResponse); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMyStarredAssetResponse); i { case 0: return &v.state case 1: @@ -4549,8 +7631,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetGraphRequest); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StarAssetRequest); i { case 0: return &v.state case 1: @@ -4561,8 +7643,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetGraphResponse); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StarAssetResponse); i { case 0: return &v.state case 1: @@ -4573,8 +7655,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAllAssetsRequest); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UnstarAssetRequest); i { case 0: return &v.state case 1: @@ -4585,8 +7667,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAllAssetsResponse); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UnstarAssetResponse); i { case 0: return &v.state case 1: @@ -4597,8 +7679,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAssetByIDRequest); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMyDiscussionsRequest); i { case 0: return &v.state case 1: @@ -4609,8 +7691,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAssetByIDResponse); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMyDiscussionsResponse); i { case 0: return &v.state case 1: @@ -4621,8 +7703,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpsertAssetRequest); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateTagRequest); i { case 0: return &v.state case 1: @@ -4633,8 +7715,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpsertAssetResponse); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateTagResponse); i { case 0: return &v.state case 1: @@ -4645,8 +7727,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpsertPatchAssetRequest); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTagsByRecordAndTemplateRequest); i { case 0: return &v.state case 1: @@ -4657,8 +7739,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpsertPatchAssetResponse); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTagsByRecordAndTemplateResponse); i { case 0: return &v.state case 1: @@ -4669,8 +7751,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteAssetRequest); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateTagRequest); i { case 0: return &v.state case 1: @@ -4681,8 +7763,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteAssetResponse); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateTagResponse); i { case 0: return &v.state case 1: @@ -4693,8 +7775,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAssetStargazersRequest); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteTagRequest); i { case 0: return &v.state case 1: @@ -4705,8 +7787,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAssetStargazersResponse); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteTagResponse); i { case 0: return &v.state case 1: @@ -4717,8 +7799,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAssetVersionHistoryRequest); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTagsByRecordRequest); i { case 0: return &v.state case 1: @@ -4729,8 +7811,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAssetVersionHistoryResponse); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTagsByRecordResponse); i { case 0: return &v.state case 1: @@ -4741,8 +7823,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAssetByVersionRequest); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAllTagTemplatesRequest); i { case 0: return &v.state case 1: @@ -4753,8 +7835,8 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAssetByVersionResponse); i { + file_odpf_compass_v1beta1_service_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAllTagTemplatesResponse); i { case 0: return &v.state case 1: @@ -4765,7 +7847,103 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + file_odpf_compass_v1beta1_service_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateTagTemplateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_compass_v1beta1_service_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateTagTemplateResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_compass_v1beta1_service_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTagTemplateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_compass_v1beta1_service_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTagTemplateResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_compass_v1beta1_service_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateTagTemplateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_compass_v1beta1_service_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateTagTemplateResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_compass_v1beta1_service_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteTagTemplateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_compass_v1beta1_service_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteTagTemplateResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_compass_v1beta1_service_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*User); i { case 0: return &v.state @@ -4777,7 +7955,7 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + file_odpf_compass_v1beta1_service_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Changelog); i { case 0: return &v.state @@ -4789,7 +7967,7 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + file_odpf_compass_v1beta1_service_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Change); i { case 0: return &v.state @@ -4801,7 +7979,7 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + file_odpf_compass_v1beta1_service_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Asset); i { case 0: return &v.state @@ -4813,7 +7991,7 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + file_odpf_compass_v1beta1_service_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Discussion); i { case 0: return &v.state @@ -4825,7 +8003,7 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + file_odpf_compass_v1beta1_service_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Comment); i { case 0: return &v.state @@ -4837,7 +8015,7 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + file_odpf_compass_v1beta1_service_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LineageEdge); i { case 0: return &v.state @@ -4849,7 +8027,7 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + file_odpf_compass_v1beta1_service_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LineageNode); i { case 0: return &v.state @@ -4861,7 +8039,55 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { + file_odpf_compass_v1beta1_service_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Tag); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_compass_v1beta1_service_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TagValue); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_compass_v1beta1_service_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TagTemplate); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_compass_v1beta1_service_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TagTemplateField); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_compass_v1beta1_service_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpsertAssetRequest_BaseAsset); i { case 0: return &v.state @@ -4873,7 +8099,7 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { + file_odpf_compass_v1beta1_service_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpsertPatchAssetRequest_BaseAsset); i { case 0: return &v.state @@ -4892,7 +8118,7 @@ func file_odpf_compass_v1beta1_service_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_odpf_compass_v1beta1_service_proto_rawDesc, NumEnums: 0, - NumMessages: 54, + NumMessages: 90, NumExtensions: 0, NumServices: 1, }, diff --git a/api/proto/odpf/compass/v1beta1/service.pb.gw.go b/api/proto/odpf/compass/v1beta1/service.pb.gw.go index c4391824..fbbbc657 100644 --- a/api/proto/odpf/compass/v1beta1/service.pb.gw.go +++ b/api/proto/odpf/compass/v1beta1/service.pb.gw.go @@ -1135,24 +1135,1514 @@ func local_request_CompassService_GetAssetByVersion_0(ctx context.Context, marsh } +var ( + filter_CompassService_GetUserStarredAssets_0 = &utilities.DoubleArray{Encoding: map[string]int{"user_id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_CompassService_GetUserStarredAssets_0(ctx context.Context, marshaler runtime.Marshaler, client CompassServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetUserStarredAssetsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["user_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "user_id") + } + + protoReq.UserId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "user_id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_CompassService_GetUserStarredAssets_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetUserStarredAssets(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_CompassService_GetUserStarredAssets_0(ctx context.Context, marshaler runtime.Marshaler, server CompassServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetUserStarredAssetsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["user_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "user_id") + } + + protoReq.UserId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "user_id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_CompassService_GetUserStarredAssets_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetUserStarredAssets(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_CompassService_GetMyStarredAssets_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_CompassService_GetMyStarredAssets_0(ctx context.Context, marshaler runtime.Marshaler, client CompassServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetMyStarredAssetsRequest + 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_CompassService_GetMyStarredAssets_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetMyStarredAssets(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_CompassService_GetMyStarredAssets_0(ctx context.Context, marshaler runtime.Marshaler, server CompassServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetMyStarredAssetsRequest + 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_CompassService_GetMyStarredAssets_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetMyStarredAssets(ctx, &protoReq) + return msg, metadata, err + +} + +func request_CompassService_GetMyStarredAsset_0(ctx context.Context, marshaler runtime.Marshaler, client CompassServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetMyStarredAssetRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["asset_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "asset_id") + } + + protoReq.AssetId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "asset_id", err) + } + + msg, err := client.GetMyStarredAsset(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_CompassService_GetMyStarredAsset_0(ctx context.Context, marshaler runtime.Marshaler, server CompassServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetMyStarredAssetRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["asset_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "asset_id") + } + + protoReq.AssetId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "asset_id", err) + } + + msg, err := server.GetMyStarredAsset(ctx, &protoReq) + return msg, metadata, err + +} + +func request_CompassService_StarAsset_0(ctx context.Context, marshaler runtime.Marshaler, client CompassServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq StarAssetRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["asset_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "asset_id") + } + + protoReq.AssetId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "asset_id", err) + } + + msg, err := client.StarAsset(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_CompassService_StarAsset_0(ctx context.Context, marshaler runtime.Marshaler, server CompassServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq StarAssetRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["asset_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "asset_id") + } + + protoReq.AssetId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "asset_id", err) + } + + msg, err := server.StarAsset(ctx, &protoReq) + return msg, metadata, err + +} + +func request_CompassService_UnstarAsset_0(ctx context.Context, marshaler runtime.Marshaler, client CompassServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq UnstarAssetRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["asset_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "asset_id") + } + + protoReq.AssetId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "asset_id", err) + } + + msg, err := client.UnstarAsset(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_CompassService_UnstarAsset_0(ctx context.Context, marshaler runtime.Marshaler, server CompassServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq UnstarAssetRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["asset_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "asset_id") + } + + protoReq.AssetId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "asset_id", err) + } + + msg, err := server.UnstarAsset(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_CompassService_GetMyDiscussions_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_CompassService_GetMyDiscussions_0(ctx context.Context, marshaler runtime.Marshaler, client CompassServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetMyDiscussionsRequest + 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_CompassService_GetMyDiscussions_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetMyDiscussions(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_CompassService_GetMyDiscussions_0(ctx context.Context, marshaler runtime.Marshaler, server CompassServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetMyDiscussionsRequest + 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_CompassService_GetMyDiscussions_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetMyDiscussions(ctx, &protoReq) + return msg, metadata, err + +} + +func request_CompassService_CreateTag_0(ctx context.Context, marshaler runtime.Marshaler, client CompassServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateTagRequest + 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.CreateTag(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_CompassService_CreateTag_0(ctx context.Context, marshaler runtime.Marshaler, server CompassServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateTagRequest + 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.CreateTag(ctx, &protoReq) + return msg, metadata, err + +} + +func request_CompassService_GetTagsByRecordAndTemplate_0(ctx context.Context, marshaler runtime.Marshaler, client CompassServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetTagsByRecordAndTemplateRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["type"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "type") + } + + protoReq.Type, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "type", err) + } + + val, ok = pathParams["record_urn"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "record_urn") + } + + protoReq.RecordUrn, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "record_urn", err) + } + + val, ok = pathParams["template_urn"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "template_urn") + } + + protoReq.TemplateUrn, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "template_urn", err) + } + + msg, err := client.GetTagsByRecordAndTemplate(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_CompassService_GetTagsByRecordAndTemplate_0(ctx context.Context, marshaler runtime.Marshaler, server CompassServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetTagsByRecordAndTemplateRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["type"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "type") + } + + protoReq.Type, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "type", err) + } + + val, ok = pathParams["record_urn"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "record_urn") + } + + protoReq.RecordUrn, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "record_urn", err) + } + + val, ok = pathParams["template_urn"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "template_urn") + } + + protoReq.TemplateUrn, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "template_urn", err) + } + + msg, err := server.GetTagsByRecordAndTemplate(ctx, &protoReq) + return msg, metadata, err + +} + +func request_CompassService_UpdateTag_0(ctx context.Context, marshaler runtime.Marshaler, client CompassServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq UpdateTagRequest + 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) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["type"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "type") + } + + protoReq.Type, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "type", err) + } + + val, ok = pathParams["record_urn"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "record_urn") + } + + protoReq.RecordUrn, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "record_urn", err) + } + + val, ok = pathParams["template_urn"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "template_urn") + } + + protoReq.TemplateUrn, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "template_urn", err) + } + + msg, err := client.UpdateTag(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_CompassService_UpdateTag_0(ctx context.Context, marshaler runtime.Marshaler, server CompassServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq UpdateTagRequest + 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) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["type"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "type") + } + + protoReq.Type, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "type", err) + } + + val, ok = pathParams["record_urn"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "record_urn") + } + + protoReq.RecordUrn, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "record_urn", err) + } + + val, ok = pathParams["template_urn"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "template_urn") + } + + protoReq.TemplateUrn, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "template_urn", err) + } + + msg, err := server.UpdateTag(ctx, &protoReq) + return msg, metadata, err + +} + +func request_CompassService_DeleteTag_0(ctx context.Context, marshaler runtime.Marshaler, client CompassServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteTagRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["type"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "type") + } + + protoReq.Type, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "type", err) + } + + val, ok = pathParams["record_urn"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "record_urn") + } + + protoReq.RecordUrn, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "record_urn", err) + } + + val, ok = pathParams["template_urn"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "template_urn") + } + + protoReq.TemplateUrn, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "template_urn", err) + } + + msg, err := client.DeleteTag(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_CompassService_DeleteTag_0(ctx context.Context, marshaler runtime.Marshaler, server CompassServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteTagRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["type"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "type") + } + + protoReq.Type, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "type", err) + } + + val, ok = pathParams["record_urn"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "record_urn") + } + + protoReq.RecordUrn, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "record_urn", err) + } + + val, ok = pathParams["template_urn"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "template_urn") + } + + protoReq.TemplateUrn, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "template_urn", err) + } + + msg, err := server.DeleteTag(ctx, &protoReq) + return msg, metadata, err + +} + +func request_CompassService_GetTagsByRecord_0(ctx context.Context, marshaler runtime.Marshaler, client CompassServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetTagsByRecordRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["type"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "type") + } + + protoReq.Type, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "type", err) + } + + val, ok = pathParams["record_urn"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "record_urn") + } + + protoReq.RecordUrn, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "record_urn", err) + } + + msg, err := client.GetTagsByRecord(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_CompassService_GetTagsByRecord_0(ctx context.Context, marshaler runtime.Marshaler, server CompassServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetTagsByRecordRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["type"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "type") + } + + protoReq.Type, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "type", err) + } + + val, ok = pathParams["record_urn"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "record_urn") + } + + protoReq.RecordUrn, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "record_urn", err) + } + + msg, err := server.GetTagsByRecord(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_CompassService_GetAllTagTemplates_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_CompassService_GetAllTagTemplates_0(ctx context.Context, marshaler runtime.Marshaler, client CompassServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetAllTagTemplatesRequest + 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_CompassService_GetAllTagTemplates_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetAllTagTemplates(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_CompassService_GetAllTagTemplates_0(ctx context.Context, marshaler runtime.Marshaler, server CompassServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetAllTagTemplatesRequest + 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_CompassService_GetAllTagTemplates_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetAllTagTemplates(ctx, &protoReq) + return msg, metadata, err + +} + +func request_CompassService_CreateTagTemplate_0(ctx context.Context, marshaler runtime.Marshaler, client CompassServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateTagTemplateRequest + 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.CreateTagTemplate(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_CompassService_CreateTagTemplate_0(ctx context.Context, marshaler runtime.Marshaler, server CompassServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateTagTemplateRequest + 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.CreateTagTemplate(ctx, &protoReq) + return msg, metadata, err + +} + +func request_CompassService_GetTagTemplate_0(ctx context.Context, marshaler runtime.Marshaler, client CompassServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetTagTemplateRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["template_urn"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "template_urn") + } + + protoReq.TemplateUrn, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "template_urn", err) + } + + msg, err := client.GetTagTemplate(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_CompassService_GetTagTemplate_0(ctx context.Context, marshaler runtime.Marshaler, server CompassServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetTagTemplateRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["template_urn"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "template_urn") + } + + protoReq.TemplateUrn, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "template_urn", err) + } + + msg, err := server.GetTagTemplate(ctx, &protoReq) + return msg, metadata, err + +} + +func request_CompassService_UpdateTagTemplate_0(ctx context.Context, marshaler runtime.Marshaler, client CompassServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq UpdateTagTemplateRequest + 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) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["template_urn"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "template_urn") + } + + protoReq.TemplateUrn, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "template_urn", err) + } + + msg, err := client.UpdateTagTemplate(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_CompassService_UpdateTagTemplate_0(ctx context.Context, marshaler runtime.Marshaler, server CompassServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq UpdateTagTemplateRequest + 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) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["template_urn"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "template_urn") + } + + protoReq.TemplateUrn, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "template_urn", err) + } + + msg, err := server.UpdateTagTemplate(ctx, &protoReq) + return msg, metadata, err + +} + +func request_CompassService_DeleteTagTemplate_0(ctx context.Context, marshaler runtime.Marshaler, client CompassServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteTagTemplateRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["template_urn"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "template_urn") + } + + protoReq.TemplateUrn, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "template_urn", err) + } + + msg, err := client.DeleteTagTemplate(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_CompassService_DeleteTagTemplate_0(ctx context.Context, marshaler runtime.Marshaler, server CompassServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteTagTemplateRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["template_urn"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "template_urn") + } + + protoReq.TemplateUrn, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "template_urn", err) + } + + msg, err := server.DeleteTagTemplate(ctx, &protoReq) + return msg, metadata, err + +} + // RegisterCompassServiceHandlerServer registers the http handlers for service CompassService to "mux". // UnaryRPC :call CompassServiceServer 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 RegisterCompassServiceHandlerFromEndpoint instead. func RegisterCompassServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server CompassServiceServer) error { - mux.Handle("GET", pattern_CompassService_GetAllDiscussions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_CompassService_GetAllDiscussions_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) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetAllDiscussions", runtime.WithHTTPPathPattern("/v1beta1/discussions")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_CompassService_GetAllDiscussions_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_CompassService_GetAllDiscussions_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_CompassService_CreateDiscussion_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) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/CreateDiscussion", runtime.WithHTTPPathPattern("/v1beta1/discussions")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_CompassService_CreateDiscussion_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_CompassService_CreateDiscussion_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_CompassService_GetDiscussion_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) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetDiscussion", runtime.WithHTTPPathPattern("/v1beta1/discussions/{id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_CompassService_GetDiscussion_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_CompassService_GetDiscussion_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PATCH", pattern_CompassService_PatchDiscussion_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) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/PatchDiscussion", runtime.WithHTTPPathPattern("/v1beta1/discussions/{id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_CompassService_PatchDiscussion_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_CompassService_PatchDiscussion_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_CompassService_CreateComment_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) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/CreateComment", runtime.WithHTTPPathPattern("/v1beta1/discussions/{discussion_id}/comments")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_CompassService_CreateComment_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_CompassService_CreateComment_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_CompassService_GetAllComments_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) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetAllComments", runtime.WithHTTPPathPattern("/v1beta1/discussions/{discussion_id}/comments")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_CompassService_GetAllComments_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_CompassService_GetAllComments_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_CompassService_GetComment_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) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetComment", runtime.WithHTTPPathPattern("/v1beta1/discussions/{discussion_id}/comments/{id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_CompassService_GetComment_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_CompassService_GetComment_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_CompassService_UpdateComment_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) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/UpdateComment", runtime.WithHTTPPathPattern("/v1beta1/discussions/{discussion_id}/comments/{id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_CompassService_UpdateComment_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_CompassService_UpdateComment_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_CompassService_DeleteComment_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) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/DeleteComment", runtime.WithHTTPPathPattern("/v1beta1/discussions/{discussion_id}/comments/{id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_CompassService_DeleteComment_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_CompassService_DeleteComment_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_CompassService_SearchAssets_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) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/SearchAssets", runtime.WithHTTPPathPattern("/v1beta1/search")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_CompassService_SearchAssets_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_CompassService_SearchAssets_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_CompassService_SuggestAssets_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) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/SuggestAssets", runtime.WithHTTPPathPattern("/v1beta1/search/suggest")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_CompassService_SuggestAssets_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_CompassService_SuggestAssets_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_CompassService_GetGraph_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) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetGraph", runtime.WithHTTPPathPattern("/v1beta1/lineage/{urn}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_CompassService_GetGraph_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_CompassService_GetGraph_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_CompassService_GetAllAssets_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) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetAllAssets", runtime.WithHTTPPathPattern("/v1beta1/assets")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_CompassService_GetAllAssets_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_CompassService_GetAllAssets_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_CompassService_GetAssetByID_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) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetAssetByID", runtime.WithHTTPPathPattern("/v1beta1/assets/{id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_CompassService_GetAssetByID_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_CompassService_GetAssetByID_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_CompassService_UpsertAsset_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) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/UpsertAsset", runtime.WithHTTPPathPattern("/v1beta1/assets")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_CompassService_UpsertAsset_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_CompassService_UpsertAsset_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PATCH", pattern_CompassService_UpsertPatchAsset_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) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/UpsertPatchAsset", runtime.WithHTTPPathPattern("/v1beta1/assets")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_CompassService_UpsertPatchAsset_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_CompassService_UpsertPatchAsset_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_CompassService_DeleteAsset_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) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/DeleteAsset", runtime.WithHTTPPathPattern("/v1beta1/assets/{id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_CompassService_DeleteAsset_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_CompassService_DeleteAsset_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_CompassService_GetAssetStargazers_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) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetAssetStargazers", runtime.WithHTTPPathPattern("/v1beta1/assets/{id}/stargazers")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_CompassService_GetAssetStargazers_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_CompassService_GetAssetStargazers_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_CompassService_GetAssetVersionHistory_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) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetAssetVersionHistory", runtime.WithHTTPPathPattern("/v1beta1/assets/{id}/versions")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_CompassService_GetAssetVersionHistory_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_CompassService_GetAssetVersionHistory_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_CompassService_GetAssetByVersion_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) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetAssetByVersion", runtime.WithHTTPPathPattern("/v1beta1/assets/{id}/versions/{version}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_CompassService_GetAssetByVersion_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_CompassService_GetAssetByVersion_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_CompassService_GetUserStarredAssets_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) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetUserStarredAssets", runtime.WithHTTPPathPattern("/v1beta1/users/{user_id}/starred")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_CompassService_GetUserStarredAssets_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_CompassService_GetUserStarredAssets_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_CompassService_GetMyStarredAssets_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) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetMyStarredAssets", runtime.WithHTTPPathPattern("/v1beta1/me/starred")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_CompassService_GetMyStarredAssets_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_CompassService_GetMyStarredAssets_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_CompassService_GetMyStarredAsset_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) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetMyStarredAsset", runtime.WithHTTPPathPattern("/v1beta1/me/starred/{asset_id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_CompassService_GetMyStarredAsset_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_CompassService_GetMyStarredAsset_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_CompassService_StarAsset_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) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/StarAsset", runtime.WithHTTPPathPattern("/v1beta1/me/starred/{asset_id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_CompassService_StarAsset_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_CompassService_StarAsset_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_CompassService_UnstarAsset_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) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetAllDiscussions", runtime.WithHTTPPathPattern("/v1beta1/discussions")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/UnstarAsset", runtime.WithHTTPPathPattern("/v1beta1/me/starred/{asset_id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_CompassService_GetAllDiscussions_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_CompassService_UnstarAsset_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -1160,22 +2650,22 @@ func RegisterCompassServiceHandlerServer(ctx context.Context, mux *runtime.Serve return } - forward_CompassService_GetAllDiscussions_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_UnstarAsset_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("POST", pattern_CompassService_CreateDiscussion_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_CompassService_GetMyDiscussions_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) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/CreateDiscussion", runtime.WithHTTPPathPattern("/v1beta1/discussions")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetMyDiscussions", runtime.WithHTTPPathPattern("/v1beta1/me/discussions")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_CompassService_CreateDiscussion_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_CompassService_GetMyDiscussions_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -1183,22 +2673,22 @@ func RegisterCompassServiceHandlerServer(ctx context.Context, mux *runtime.Serve return } - forward_CompassService_CreateDiscussion_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_GetMyDiscussions_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_CompassService_GetDiscussion_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("POST", pattern_CompassService_CreateTag_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) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetDiscussion", runtime.WithHTTPPathPattern("/v1beta1/discussions/{id}")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/CreateTag", runtime.WithHTTPPathPattern("/v1beta1/tags")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_CompassService_GetDiscussion_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_CompassService_CreateTag_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -1206,22 +2696,22 @@ func RegisterCompassServiceHandlerServer(ctx context.Context, mux *runtime.Serve return } - forward_CompassService_GetDiscussion_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_CreateTag_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("PATCH", pattern_CompassService_PatchDiscussion_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_CompassService_GetTagsByRecordAndTemplate_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) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/PatchDiscussion", runtime.WithHTTPPathPattern("/v1beta1/discussions/{id}")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetTagsByRecordAndTemplate", runtime.WithHTTPPathPattern("/v1beta1/tags/types/{type}/records/{record_urn}/templates/{template_urn}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_CompassService_PatchDiscussion_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_CompassService_GetTagsByRecordAndTemplate_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -1229,22 +2719,22 @@ func RegisterCompassServiceHandlerServer(ctx context.Context, mux *runtime.Serve return } - forward_CompassService_PatchDiscussion_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_GetTagsByRecordAndTemplate_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("POST", pattern_CompassService_CreateComment_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("PUT", pattern_CompassService_UpdateTag_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) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/CreateComment", runtime.WithHTTPPathPattern("/v1beta1/discussions/{discussion_id}/comments")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/UpdateTag", runtime.WithHTTPPathPattern("/v1beta1/tags/types/{type}/records/{record_urn}/templates/{template_urn}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_CompassService_CreateComment_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_CompassService_UpdateTag_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -1252,22 +2742,22 @@ func RegisterCompassServiceHandlerServer(ctx context.Context, mux *runtime.Serve return } - forward_CompassService_CreateComment_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_UpdateTag_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_CompassService_GetAllComments_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("DELETE", pattern_CompassService_DeleteTag_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) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetAllComments", runtime.WithHTTPPathPattern("/v1beta1/discussions/{discussion_id}/comments")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/DeleteTag", runtime.WithHTTPPathPattern("/v1beta1/tags/types/{type}/records/{record_urn}/templates/{template_urn}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_CompassService_GetAllComments_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_CompassService_DeleteTag_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -1275,22 +2765,22 @@ func RegisterCompassServiceHandlerServer(ctx context.Context, mux *runtime.Serve return } - forward_CompassService_GetAllComments_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_DeleteTag_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_CompassService_GetComment_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_CompassService_GetTagsByRecord_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) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetComment", runtime.WithHTTPPathPattern("/v1beta1/discussions/{discussion_id}/comments/{id}")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetTagsByRecord", runtime.WithHTTPPathPattern("/v1beta1/tags/types/{type}/records/{record_urn}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_CompassService_GetComment_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_CompassService_GetTagsByRecord_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -1298,22 +2788,22 @@ func RegisterCompassServiceHandlerServer(ctx context.Context, mux *runtime.Serve return } - forward_CompassService_GetComment_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_GetTagsByRecord_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("PUT", pattern_CompassService_UpdateComment_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_CompassService_GetAllTagTemplates_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) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/UpdateComment", runtime.WithHTTPPathPattern("/v1beta1/discussions/{discussion_id}/comments/{id}")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetAllTagTemplates", runtime.WithHTTPPathPattern("/v1beta1/tags/templates")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_CompassService_UpdateComment_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_CompassService_GetAllTagTemplates_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -1321,22 +2811,22 @@ func RegisterCompassServiceHandlerServer(ctx context.Context, mux *runtime.Serve return } - forward_CompassService_UpdateComment_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_GetAllTagTemplates_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("DELETE", pattern_CompassService_DeleteComment_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("POST", pattern_CompassService_CreateTagTemplate_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) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/DeleteComment", runtime.WithHTTPPathPattern("/v1beta1/discussions/{discussion_id}/comments/{id}")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/CreateTagTemplate", runtime.WithHTTPPathPattern("/v1beta1/tags/templates")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_CompassService_DeleteComment_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_CompassService_CreateTagTemplate_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -1344,22 +2834,22 @@ func RegisterCompassServiceHandlerServer(ctx context.Context, mux *runtime.Serve return } - forward_CompassService_DeleteComment_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_CreateTagTemplate_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_CompassService_SearchAssets_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_CompassService_GetTagTemplate_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) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/SearchAssets", runtime.WithHTTPPathPattern("/v1beta1/search")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetTagTemplate", runtime.WithHTTPPathPattern("/v1beta1/tags/templates/{template_urn}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_CompassService_SearchAssets_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_CompassService_GetTagTemplate_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -1367,22 +2857,22 @@ func RegisterCompassServiceHandlerServer(ctx context.Context, mux *runtime.Serve return } - forward_CompassService_SearchAssets_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_GetTagTemplate_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_CompassService_SuggestAssets_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("PUT", pattern_CompassService_UpdateTagTemplate_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) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/SuggestAssets", runtime.WithHTTPPathPattern("/v1beta1/search/suggest")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/UpdateTagTemplate", runtime.WithHTTPPathPattern("/v1beta1/tags/templates/{template_urn}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_CompassService_SuggestAssets_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_CompassService_UpdateTagTemplate_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -1390,22 +2880,22 @@ func RegisterCompassServiceHandlerServer(ctx context.Context, mux *runtime.Serve return } - forward_CompassService_SuggestAssets_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_UpdateTagTemplate_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_CompassService_GetGraph_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("DELETE", pattern_CompassService_DeleteTagTemplate_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) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetGraph", runtime.WithHTTPPathPattern("/v1beta1/lineage/{urn}")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/DeleteTagTemplate", runtime.WithHTTPPathPattern("/v1beta1/tags/templates/{template_urn}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_CompassService_GetGraph_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_CompassService_DeleteTagTemplate_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -1413,632 +2903,768 @@ func RegisterCompassServiceHandlerServer(ctx context.Context, mux *runtime.Serve return } - forward_CompassService_GetGraph_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_DeleteTagTemplate_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_CompassService_GetAllAssets_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + return nil +} + +// RegisterCompassServiceHandlerFromEndpoint is same as RegisterCompassServiceHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterCompassServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(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 RegisterCompassServiceHandler(ctx, mux, conn) +} + +// RegisterCompassServiceHandler registers the http handlers for service CompassService to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterCompassServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterCompassServiceHandlerClient(ctx, mux, NewCompassServiceClient(conn)) +} + +// RegisterCompassServiceHandlerClient registers the http handlers for service CompassService +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "CompassServiceClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "CompassServiceClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "CompassServiceClient" to call the correct interceptors. +func RegisterCompassServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client CompassServiceClient) error { + + mux.Handle("GET", pattern_CompassService_GetAllDiscussions_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) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetAllDiscussions", runtime.WithHTTPPathPattern("/v1beta1/discussions")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_CompassService_GetAllDiscussions_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_CompassService_GetAllDiscussions_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_CompassService_CreateDiscussion_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) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/CreateDiscussion", runtime.WithHTTPPathPattern("/v1beta1/discussions")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_CompassService_CreateDiscussion_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_CompassService_CreateDiscussion_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_CompassService_GetDiscussion_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) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetDiscussion", runtime.WithHTTPPathPattern("/v1beta1/discussions/{id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_CompassService_GetDiscussion_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_CompassService_GetDiscussion_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PATCH", pattern_CompassService_PatchDiscussion_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) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/PatchDiscussion", runtime.WithHTTPPathPattern("/v1beta1/discussions/{id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_CompassService_PatchDiscussion_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_CompassService_PatchDiscussion_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_CompassService_CreateComment_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) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/CreateComment", runtime.WithHTTPPathPattern("/v1beta1/discussions/{discussion_id}/comments")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_CompassService_CreateComment_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_CompassService_CreateComment_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_CompassService_GetAllComments_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) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetAllComments", runtime.WithHTTPPathPattern("/v1beta1/discussions/{discussion_id}/comments")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_CompassService_GetAllComments_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_CompassService_GetAllComments_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_CompassService_GetComment_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) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetComment", runtime.WithHTTPPathPattern("/v1beta1/discussions/{discussion_id}/comments/{id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_CompassService_GetComment_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_CompassService_GetComment_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_CompassService_UpdateComment_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) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/UpdateComment", runtime.WithHTTPPathPattern("/v1beta1/discussions/{discussion_id}/comments/{id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_CompassService_UpdateComment_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_CompassService_UpdateComment_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_CompassService_DeleteComment_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) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetAllAssets", runtime.WithHTTPPathPattern("/v1beta1/assets")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/DeleteComment", runtime.WithHTTPPathPattern("/v1beta1/discussions/{discussion_id}/comments/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_CompassService_GetAllAssets_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + resp, md, err := request_CompassService_DeleteComment_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_CompassService_GetAllAssets_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_DeleteComment_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_CompassService_GetAssetByID_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_CompassService_SearchAssets_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) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetAssetByID", runtime.WithHTTPPathPattern("/v1beta1/assets/{id}")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/SearchAssets", runtime.WithHTTPPathPattern("/v1beta1/search")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_CompassService_GetAssetByID_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + resp, md, err := request_CompassService_SearchAssets_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_CompassService_GetAssetByID_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_SearchAssets_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("PUT", pattern_CompassService_UpsertAsset_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_CompassService_SuggestAssets_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) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/UpsertAsset", runtime.WithHTTPPathPattern("/v1beta1/assets")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/SuggestAssets", runtime.WithHTTPPathPattern("/v1beta1/search/suggest")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_CompassService_UpsertAsset_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + resp, md, err := request_CompassService_SuggestAssets_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_CompassService_UpsertAsset_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_SuggestAssets_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("PATCH", pattern_CompassService_UpsertPatchAsset_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_CompassService_GetGraph_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) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/UpsertPatchAsset", runtime.WithHTTPPathPattern("/v1beta1/assets")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetGraph", runtime.WithHTTPPathPattern("/v1beta1/lineage/{urn}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_CompassService_UpsertPatchAsset_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + resp, md, err := request_CompassService_GetGraph_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_CompassService_UpsertPatchAsset_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_GetGraph_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("DELETE", pattern_CompassService_DeleteAsset_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_CompassService_GetAllAssets_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) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/DeleteAsset", runtime.WithHTTPPathPattern("/v1beta1/assets/{id}")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetAllAssets", runtime.WithHTTPPathPattern("/v1beta1/assets")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_CompassService_DeleteAsset_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + resp, md, err := request_CompassService_GetAllAssets_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_CompassService_DeleteAsset_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_GetAllAssets_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_CompassService_GetAssetStargazers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_CompassService_GetAssetByID_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) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetAssetStargazers", runtime.WithHTTPPathPattern("/v1beta1/assets/{id}/stargazers")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetAssetByID", runtime.WithHTTPPathPattern("/v1beta1/assets/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_CompassService_GetAssetStargazers_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + resp, md, err := request_CompassService_GetAssetByID_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_CompassService_GetAssetStargazers_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_GetAssetByID_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_CompassService_GetAssetVersionHistory_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("PUT", pattern_CompassService_UpsertAsset_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) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetAssetVersionHistory", runtime.WithHTTPPathPattern("/v1beta1/assets/{id}/versions")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/UpsertAsset", runtime.WithHTTPPathPattern("/v1beta1/assets")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_CompassService_GetAssetVersionHistory_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + resp, md, err := request_CompassService_UpsertAsset_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_CompassService_GetAssetVersionHistory_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_UpsertAsset_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_CompassService_GetAssetByVersion_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("PATCH", pattern_CompassService_UpsertPatchAsset_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) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetAssetByVersion", runtime.WithHTTPPathPattern("/v1beta1/assets/{id}/versions/{version}")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/UpsertPatchAsset", runtime.WithHTTPPathPattern("/v1beta1/assets")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_CompassService_GetAssetByVersion_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + resp, md, err := request_CompassService_UpsertPatchAsset_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_CompassService_GetAssetByVersion_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_UpsertPatchAsset_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - return nil -} - -// RegisterCompassServiceHandlerFromEndpoint is same as RegisterCompassServiceHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterCompassServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.Dial(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 RegisterCompassServiceHandler(ctx, mux, conn) -} - -// RegisterCompassServiceHandler registers the http handlers for service CompassService to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterCompassServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterCompassServiceHandlerClient(ctx, mux, NewCompassServiceClient(conn)) -} - -// RegisterCompassServiceHandlerClient registers the http handlers for service CompassService -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "CompassServiceClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "CompassServiceClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "CompassServiceClient" to call the correct interceptors. -func RegisterCompassServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client CompassServiceClient) error { - - mux.Handle("GET", pattern_CompassService_GetAllDiscussions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("DELETE", pattern_CompassService_DeleteAsset_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) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetAllDiscussions", runtime.WithHTTPPathPattern("/v1beta1/discussions")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/DeleteAsset", runtime.WithHTTPPathPattern("/v1beta1/assets/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_CompassService_GetAllDiscussions_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_CompassService_DeleteAsset_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_CompassService_GetAllDiscussions_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_DeleteAsset_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("POST", pattern_CompassService_CreateDiscussion_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_CompassService_GetAssetStargazers_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) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/CreateDiscussion", runtime.WithHTTPPathPattern("/v1beta1/discussions")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetAssetStargazers", runtime.WithHTTPPathPattern("/v1beta1/assets/{id}/stargazers")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_CompassService_CreateDiscussion_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_CompassService_GetAssetStargazers_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_CompassService_CreateDiscussion_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_GetAssetStargazers_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_CompassService_GetDiscussion_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_CompassService_GetAssetVersionHistory_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) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetDiscussion", runtime.WithHTTPPathPattern("/v1beta1/discussions/{id}")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetAssetVersionHistory", runtime.WithHTTPPathPattern("/v1beta1/assets/{id}/versions")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_CompassService_GetDiscussion_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_CompassService_GetAssetVersionHistory_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_CompassService_GetDiscussion_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_GetAssetVersionHistory_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("PATCH", pattern_CompassService_PatchDiscussion_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_CompassService_GetAssetByVersion_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) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/PatchDiscussion", runtime.WithHTTPPathPattern("/v1beta1/discussions/{id}")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetAssetByVersion", runtime.WithHTTPPathPattern("/v1beta1/assets/{id}/versions/{version}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_CompassService_PatchDiscussion_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_CompassService_GetAssetByVersion_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_CompassService_PatchDiscussion_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_GetAssetByVersion_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("POST", pattern_CompassService_CreateComment_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_CompassService_GetUserStarredAssets_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) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/CreateComment", runtime.WithHTTPPathPattern("/v1beta1/discussions/{discussion_id}/comments")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetUserStarredAssets", runtime.WithHTTPPathPattern("/v1beta1/users/{user_id}/starred")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_CompassService_CreateComment_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_CompassService_GetUserStarredAssets_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_CompassService_CreateComment_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_GetUserStarredAssets_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_CompassService_GetAllComments_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_CompassService_GetMyStarredAssets_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) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetAllComments", runtime.WithHTTPPathPattern("/v1beta1/discussions/{discussion_id}/comments")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetMyStarredAssets", runtime.WithHTTPPathPattern("/v1beta1/me/starred")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_CompassService_GetAllComments_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_CompassService_GetMyStarredAssets_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_CompassService_GetAllComments_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_GetMyStarredAssets_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_CompassService_GetComment_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_CompassService_GetMyStarredAsset_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) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetComment", runtime.WithHTTPPathPattern("/v1beta1/discussions/{discussion_id}/comments/{id}")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetMyStarredAsset", runtime.WithHTTPPathPattern("/v1beta1/me/starred/{asset_id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_CompassService_GetComment_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_CompassService_GetMyStarredAsset_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_CompassService_GetComment_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_GetMyStarredAsset_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("PUT", pattern_CompassService_UpdateComment_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("PUT", pattern_CompassService_StarAsset_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) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/UpdateComment", runtime.WithHTTPPathPattern("/v1beta1/discussions/{discussion_id}/comments/{id}")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/StarAsset", runtime.WithHTTPPathPattern("/v1beta1/me/starred/{asset_id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_CompassService_UpdateComment_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_CompassService_StarAsset_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_CompassService_UpdateComment_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_StarAsset_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("DELETE", pattern_CompassService_DeleteComment_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("DELETE", pattern_CompassService_UnstarAsset_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) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/DeleteComment", runtime.WithHTTPPathPattern("/v1beta1/discussions/{discussion_id}/comments/{id}")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/UnstarAsset", runtime.WithHTTPPathPattern("/v1beta1/me/starred/{asset_id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_CompassService_DeleteComment_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_CompassService_UnstarAsset_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_CompassService_DeleteComment_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_UnstarAsset_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_CompassService_SearchAssets_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_CompassService_GetMyDiscussions_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) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/SearchAssets", runtime.WithHTTPPathPattern("/v1beta1/search")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetMyDiscussions", runtime.WithHTTPPathPattern("/v1beta1/me/discussions")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_CompassService_SearchAssets_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_CompassService_GetMyDiscussions_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_CompassService_SearchAssets_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_GetMyDiscussions_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_CompassService_SuggestAssets_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("POST", pattern_CompassService_CreateTag_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) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/SuggestAssets", runtime.WithHTTPPathPattern("/v1beta1/search/suggest")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/CreateTag", runtime.WithHTTPPathPattern("/v1beta1/tags")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_CompassService_SuggestAssets_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_CompassService_CreateTag_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_CompassService_SuggestAssets_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_CreateTag_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_CompassService_GetGraph_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_CompassService_GetTagsByRecordAndTemplate_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) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetGraph", runtime.WithHTTPPathPattern("/v1beta1/lineage/{urn}")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetTagsByRecordAndTemplate", runtime.WithHTTPPathPattern("/v1beta1/tags/types/{type}/records/{record_urn}/templates/{template_urn}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_CompassService_GetGraph_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_CompassService_GetTagsByRecordAndTemplate_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_CompassService_GetGraph_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_GetTagsByRecordAndTemplate_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_CompassService_GetAllAssets_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("PUT", pattern_CompassService_UpdateTag_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) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetAllAssets", runtime.WithHTTPPathPattern("/v1beta1/assets")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/UpdateTag", runtime.WithHTTPPathPattern("/v1beta1/tags/types/{type}/records/{record_urn}/templates/{template_urn}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_CompassService_GetAllAssets_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_CompassService_UpdateTag_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_CompassService_GetAllAssets_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_UpdateTag_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_CompassService_GetAssetByID_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("DELETE", pattern_CompassService_DeleteTag_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) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetAssetByID", runtime.WithHTTPPathPattern("/v1beta1/assets/{id}")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/DeleteTag", runtime.WithHTTPPathPattern("/v1beta1/tags/types/{type}/records/{record_urn}/templates/{template_urn}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_CompassService_GetAssetByID_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_CompassService_DeleteTag_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_CompassService_GetAssetByID_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_DeleteTag_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("PUT", pattern_CompassService_UpsertAsset_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_CompassService_GetTagsByRecord_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) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/UpsertAsset", runtime.WithHTTPPathPattern("/v1beta1/assets")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetTagsByRecord", runtime.WithHTTPPathPattern("/v1beta1/tags/types/{type}/records/{record_urn}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_CompassService_UpsertAsset_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_CompassService_GetTagsByRecord_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_CompassService_UpsertAsset_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_GetTagsByRecord_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("PATCH", pattern_CompassService_UpsertPatchAsset_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_CompassService_GetAllTagTemplates_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) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/UpsertPatchAsset", runtime.WithHTTPPathPattern("/v1beta1/assets")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetAllTagTemplates", runtime.WithHTTPPathPattern("/v1beta1/tags/templates")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_CompassService_UpsertPatchAsset_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_CompassService_GetAllTagTemplates_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_CompassService_UpsertPatchAsset_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_GetAllTagTemplates_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("DELETE", pattern_CompassService_DeleteAsset_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("POST", pattern_CompassService_CreateTagTemplate_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) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/DeleteAsset", runtime.WithHTTPPathPattern("/v1beta1/assets/{id}")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/CreateTagTemplate", runtime.WithHTTPPathPattern("/v1beta1/tags/templates")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_CompassService_DeleteAsset_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_CompassService_CreateTagTemplate_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_CompassService_DeleteAsset_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_CreateTagTemplate_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_CompassService_GetAssetStargazers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_CompassService_GetTagTemplate_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) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetAssetStargazers", runtime.WithHTTPPathPattern("/v1beta1/assets/{id}/stargazers")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetTagTemplate", runtime.WithHTTPPathPattern("/v1beta1/tags/templates/{template_urn}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_CompassService_GetAssetStargazers_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_CompassService_GetTagTemplate_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_CompassService_GetAssetStargazers_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_GetTagTemplate_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_CompassService_GetAssetVersionHistory_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("PUT", pattern_CompassService_UpdateTagTemplate_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) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetAssetVersionHistory", runtime.WithHTTPPathPattern("/v1beta1/assets/{id}/versions")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/UpdateTagTemplate", runtime.WithHTTPPathPattern("/v1beta1/tags/templates/{template_urn}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_CompassService_GetAssetVersionHistory_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_CompassService_UpdateTagTemplate_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_CompassService_GetAssetVersionHistory_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_UpdateTagTemplate_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_CompassService_GetAssetByVersion_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("DELETE", pattern_CompassService_DeleteTagTemplate_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) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/GetAssetByVersion", runtime.WithHTTPPathPattern("/v1beta1/assets/{id}/versions/{version}")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.compass.v1beta1.CompassService/DeleteTagTemplate", runtime.WithHTTPPathPattern("/v1beta1/tags/templates/{template_urn}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_CompassService_GetAssetByVersion_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_CompassService_DeleteTagTemplate_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_CompassService_GetAssetByVersion_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CompassService_DeleteTagTemplate_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2085,6 +3711,38 @@ var ( pattern_CompassService_GetAssetVersionHistory_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"v1beta1", "assets", "id", "versions"}, "")) pattern_CompassService_GetAssetByVersion_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"v1beta1", "assets", "id", "versions", "version"}, "")) + + pattern_CompassService_GetUserStarredAssets_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"v1beta1", "users", "user_id", "starred"}, "")) + + pattern_CompassService_GetMyStarredAssets_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1beta1", "me", "starred"}, "")) + + pattern_CompassService_GetMyStarredAsset_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1beta1", "me", "starred", "asset_id"}, "")) + + pattern_CompassService_StarAsset_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1beta1", "me", "starred", "asset_id"}, "")) + + pattern_CompassService_UnstarAsset_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1beta1", "me", "starred", "asset_id"}, "")) + + pattern_CompassService_GetMyDiscussions_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1beta1", "me", "discussions"}, "")) + + pattern_CompassService_CreateTag_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1beta1", "tags"}, "")) + + pattern_CompassService_GetTagsByRecordAndTemplate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6, 1, 0, 4, 1, 5, 7}, []string{"v1beta1", "tags", "types", "type", "records", "record_urn", "templates", "template_urn"}, "")) + + pattern_CompassService_UpdateTag_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6, 1, 0, 4, 1, 5, 7}, []string{"v1beta1", "tags", "types", "type", "records", "record_urn", "templates", "template_urn"}, "")) + + pattern_CompassService_DeleteTag_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6, 1, 0, 4, 1, 5, 7}, []string{"v1beta1", "tags", "types", "type", "records", "record_urn", "templates", "template_urn"}, "")) + + pattern_CompassService_GetTagsByRecord_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"v1beta1", "tags", "types", "type", "records", "record_urn"}, "")) + + pattern_CompassService_GetAllTagTemplates_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1beta1", "tags", "templates"}, "")) + + pattern_CompassService_CreateTagTemplate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1beta1", "tags", "templates"}, "")) + + pattern_CompassService_GetTagTemplate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1beta1", "tags", "templates", "template_urn"}, "")) + + pattern_CompassService_UpdateTagTemplate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1beta1", "tags", "templates", "template_urn"}, "")) + + pattern_CompassService_DeleteTagTemplate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1beta1", "tags", "templates", "template_urn"}, "")) ) var ( @@ -2127,4 +3785,36 @@ var ( forward_CompassService_GetAssetVersionHistory_0 = runtime.ForwardResponseMessage forward_CompassService_GetAssetByVersion_0 = runtime.ForwardResponseMessage + + forward_CompassService_GetUserStarredAssets_0 = runtime.ForwardResponseMessage + + forward_CompassService_GetMyStarredAssets_0 = runtime.ForwardResponseMessage + + forward_CompassService_GetMyStarredAsset_0 = runtime.ForwardResponseMessage + + forward_CompassService_StarAsset_0 = runtime.ForwardResponseMessage + + forward_CompassService_UnstarAsset_0 = runtime.ForwardResponseMessage + + forward_CompassService_GetMyDiscussions_0 = runtime.ForwardResponseMessage + + forward_CompassService_CreateTag_0 = runtime.ForwardResponseMessage + + forward_CompassService_GetTagsByRecordAndTemplate_0 = runtime.ForwardResponseMessage + + forward_CompassService_UpdateTag_0 = runtime.ForwardResponseMessage + + forward_CompassService_DeleteTag_0 = runtime.ForwardResponseMessage + + forward_CompassService_GetTagsByRecord_0 = runtime.ForwardResponseMessage + + forward_CompassService_GetAllTagTemplates_0 = runtime.ForwardResponseMessage + + forward_CompassService_CreateTagTemplate_0 = runtime.ForwardResponseMessage + + forward_CompassService_GetTagTemplate_0 = runtime.ForwardResponseMessage + + forward_CompassService_UpdateTagTemplate_0 = runtime.ForwardResponseMessage + + forward_CompassService_DeleteTagTemplate_0 = runtime.ForwardResponseMessage ) diff --git a/api/proto/odpf/compass/v1beta1/service.pb.validate.go b/api/proto/odpf/compass/v1beta1/service.pb.validate.go index ca3bb741..76487be4 100644 --- a/api/proto/odpf/compass/v1beta1/service.pb.validate.go +++ b/api/proto/odpf/compass/v1beta1/service.pb.validate.go @@ -59,32 +59,10 @@ func (m *GetAllDiscussionsRequest) validate(all bool) error { if m.GetType() != "" { - if _, ok := _GetAllDiscussionsRequest_Type_InLookup[m.GetType()]; !ok { - err := GetAllDiscussionsRequestValidationError{ - field: "Type", - reason: "value must be in list [openended issues qanda all]", - } - if !all { - return err - } - errors = append(errors, err) - } - } if m.GetState() != "" { - if _, ok := _GetAllDiscussionsRequest_State_InLookup[m.GetState()]; !ok { - err := GetAllDiscussionsRequestValidationError{ - field: "State", - reason: "value must be in list [open closed all]", - } - if !all { - return err - } - errors = append(errors, err) - } - } if m.GetOwner() != "" { @@ -105,32 +83,10 @@ func (m *GetAllDiscussionsRequest) validate(all bool) error { if m.GetSort() != "" { - if _, ok := _GetAllDiscussionsRequest_Sort_InLookup[m.GetSort()]; !ok { - err := GetAllDiscussionsRequestValidationError{ - field: "Sort", - reason: "value must be in list [created_at updated_at]", - } - if !all { - return err - } - errors = append(errors, err) - } - } if m.GetDirection() != "" { - if _, ok := _GetAllDiscussionsRequest_Direction_InLookup[m.GetDirection()]; !ok { - err := GetAllDiscussionsRequestValidationError{ - field: "Direction", - reason: "value must be in list [asc desc]", - } - if !all { - return err - } - errors = append(errors, err) - } - } if m.GetSize() != 0 { @@ -243,29 +199,6 @@ var _ interface { ErrorName() string } = GetAllDiscussionsRequestValidationError{} -var _GetAllDiscussionsRequest_Type_InLookup = map[string]struct{}{ - "openended": {}, - "issues": {}, - "qanda": {}, - "all": {}, -} - -var _GetAllDiscussionsRequest_State_InLookup = map[string]struct{}{ - "open": {}, - "closed": {}, - "all": {}, -} - -var _GetAllDiscussionsRequest_Sort_InLookup = map[string]struct{}{ - "created_at": {}, - "updated_at": {}, -} - -var _GetAllDiscussionsRequest_Direction_InLookup = map[string]struct{}{ - "asc": {}, - "desc": {}, -} - // Validate checks the field values on GetAllDiscussionsResponse with the rules // defined in the proto definition for this message. If any rules are // violated, the first error encountered is returned, or nil if there are no violations. @@ -446,30 +379,10 @@ func (m *CreateDiscussionRequest) validate(all bool) error { errors = append(errors, err) } - if _, ok := _CreateDiscussionRequest_Type_InLookup[m.GetType()]; !ok { - err := CreateDiscussionRequestValidationError{ - field: "Type", - reason: "value must be in list [openended issues qanda]", - } - if !all { - return err - } - errors = append(errors, err) - } + // no validation rules for Type if m.GetState() != "" { - if _, ok := _CreateDiscussionRequest_State_InLookup[m.GetState()]; !ok { - err := CreateDiscussionRequestValidationError{ - field: "State", - reason: "value must be in list [open closed]", - } - if !all { - return err - } - errors = append(errors, err) - } - } if len(m.GetLabels()) > 0 { @@ -627,17 +540,6 @@ var _ interface { ErrorName() string } = CreateDiscussionRequestValidationError{} -var _CreateDiscussionRequest_Type_InLookup = map[string]struct{}{ - "openended": {}, - "issues": {}, - "qanda": {}, -} - -var _CreateDiscussionRequest_State_InLookup = map[string]struct{}{ - "open": {}, - "closed": {}, -} - // Validate checks the field values on CreateDiscussionResponse with the rules // defined in the proto definition for this message. If any rules are // violated, the first error encountered is returned, or nil if there are no violations. @@ -1011,32 +913,10 @@ func (m *PatchDiscussionRequest) validate(all bool) error { if m.GetType() != "" { - if _, ok := _PatchDiscussionRequest_Type_InLookup[m.GetType()]; !ok { - err := PatchDiscussionRequestValidationError{ - field: "Type", - reason: "value must be in list [openended issues qanda]", - } - if !all { - return err - } - errors = append(errors, err) - } - } if m.GetState() != "" { - if _, ok := _PatchDiscussionRequest_State_InLookup[m.GetState()]; !ok { - err := PatchDiscussionRequestValidationError{ - field: "State", - reason: "value must be in list [open closed]", - } - if !all { - return err - } - errors = append(errors, err) - } - } if len(m.GetLabels()) > 0 { @@ -1194,17 +1074,6 @@ var _ interface { ErrorName() string } = PatchDiscussionRequestValidationError{} -var _PatchDiscussionRequest_Type_InLookup = map[string]struct{}{ - "openended": {}, - "issues": {}, - "qanda": {}, -} - -var _PatchDiscussionRequest_State_InLookup = map[string]struct{}{ - "open": {}, - "closed": {}, -} - // Validate checks the field values on CreateCommentRequest with the rules // defined in the proto definition for this message. If any rules are // violated, the first error encountered is returned, or nil if there are no violations. @@ -1552,32 +1421,10 @@ func (m *GetAllCommentsRequest) validate(all bool) error { if m.GetSort() != "" { - if _, ok := _GetAllCommentsRequest_Sort_InLookup[m.GetSort()]; !ok { - err := GetAllCommentsRequestValidationError{ - field: "Sort", - reason: "value must be in list [created_at updated_at]", - } - if !all { - return err - } - errors = append(errors, err) - } - } if m.GetDirection() != "" { - if _, ok := _GetAllCommentsRequest_Direction_InLookup[m.GetDirection()]; !ok { - err := GetAllCommentsRequestValidationError{ - field: "Direction", - reason: "value must be in list [asc desc]", - } - if !all { - return err - } - errors = append(errors, err) - } - } if m.GetSize() != 0 { @@ -1690,16 +1537,6 @@ var _ interface { ErrorName() string } = GetAllCommentsRequestValidationError{} -var _GetAllCommentsRequest_Sort_InLookup = map[string]struct{}{ - "created_at": {}, - "updated_at": {}, -} - -var _GetAllCommentsRequest_Direction_InLookup = map[string]struct{}{ - "asc": {}, - "desc": {}, -} - // Validate checks the field values on GetAllCommentsResponse with the rules // defined in the proto definition for this message. If any rules are // violated, the first error encountered is returned, or nil if there are no violations. @@ -5350,106 +5187,74 @@ var _ interface { ErrorName() string } = GetAssetByVersionResponseValidationError{} -// Validate checks the field values on User with the rules defined in the proto -// definition for this message. If any rules are violated, the first error -// encountered is returned, or nil if there are no violations. -func (m *User) Validate() error { +// Validate checks the field values on GetUserStarredAssetsRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *GetUserStarredAssetsRequest) Validate() error { return m.validate(false) } -// ValidateAll checks the field values on User with the rules defined in the -// proto definition for this message. If any rules are violated, the result is -// a list of violation errors wrapped in UserMultiError, or nil if none found. -func (m *User) ValidateAll() error { +// ValidateAll checks the field values on GetUserStarredAssetsRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetUserStarredAssetsRequestMultiError, or nil if none found. +func (m *GetUserStarredAssetsRequest) ValidateAll() error { return m.validate(true) } -func (m *User) validate(all bool) error { +func (m *GetUserStarredAssetsRequest) validate(all bool) error { if m == nil { return nil } var errors []error - // no validation rules for Id - - // no validation rules for Uuid - - // no validation rules for Email + // no validation rules for UserId - // no validation rules for Provider + if m.GetSize() != 0 { - if all { - switch v := interface{}(m.GetCreatedAt()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, UserValidationError{ - field: "CreatedAt", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, UserValidationError{ - field: "CreatedAt", - reason: "embedded message failed validation", - cause: err, - }) + if m.GetSize() < 0 { + err := GetUserStarredAssetsRequestValidationError{ + field: "Size", + reason: "value must be greater than or equal to 0", } - } - } else if v, ok := interface{}(m.GetCreatedAt()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return UserValidationError{ - field: "CreatedAt", - reason: "embedded message failed validation", - cause: err, + if !all { + return err } + errors = append(errors, err) } + } - if all { - switch v := interface{}(m.GetUpdatedAt()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, UserValidationError{ - field: "UpdatedAt", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, UserValidationError{ - field: "UpdatedAt", - reason: "embedded message failed validation", - cause: err, - }) + if m.GetOffset() != 0 { + + if m.GetOffset() < 0 { + err := GetUserStarredAssetsRequestValidationError{ + field: "Offset", + reason: "value must be greater than or equal to 0", } - } - } else if v, ok := interface{}(m.GetUpdatedAt()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return UserValidationError{ - field: "UpdatedAt", - reason: "embedded message failed validation", - cause: err, + if !all { + return err } + errors = append(errors, err) } + } if len(errors) > 0 { - return UserMultiError(errors) + return GetUserStarredAssetsRequestMultiError(errors) } return nil } -// UserMultiError is an error wrapping multiple validation errors returned by -// User.ValidateAll() if the designated constraints aren't met. -type UserMultiError []error +// GetUserStarredAssetsRequestMultiError is an error wrapping multiple +// validation errors returned by GetUserStarredAssetsRequest.ValidateAll() if +// the designated constraints aren't met. +type GetUserStarredAssetsRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. -func (m UserMultiError) Error() string { +func (m GetUserStarredAssetsRequestMultiError) Error() string { var msgs []string for _, err := range m { msgs = append(msgs, err.Error()) @@ -5458,11 +5263,12 @@ func (m UserMultiError) Error() string { } // AllErrors returns a list of validation violation errors. -func (m UserMultiError) AllErrors() []error { return m } +func (m GetUserStarredAssetsRequestMultiError) AllErrors() []error { return m } -// UserValidationError is the validation error returned by User.Validate if the -// designated constraints aren't met. -type UserValidationError struct { +// GetUserStarredAssetsRequestValidationError is the validation error returned +// by GetUserStarredAssetsRequest.Validate if the designated constraints +// aren't met. +type GetUserStarredAssetsRequestValidationError struct { field string reason string cause error @@ -5470,22 +5276,24 @@ type UserValidationError struct { } // Field function returns field value. -func (e UserValidationError) Field() string { return e.field } +func (e GetUserStarredAssetsRequestValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e UserValidationError) Reason() string { return e.reason } +func (e GetUserStarredAssetsRequestValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e UserValidationError) Cause() error { return e.cause } +func (e GetUserStarredAssetsRequestValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e UserValidationError) Key() bool { return e.key } +func (e GetUserStarredAssetsRequestValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e UserValidationError) ErrorName() string { return "UserValidationError" } +func (e GetUserStarredAssetsRequestValidationError) ErrorName() string { + return "GetUserStarredAssetsRequestValidationError" +} // Error satisfies the builtin error interface -func (e UserValidationError) Error() string { +func (e GetUserStarredAssetsRequestValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -5497,14 +5305,14 @@ func (e UserValidationError) Error() string { } return fmt.Sprintf( - "invalid %sUser.%s: %s%s", + "invalid %sGetUserStarredAssetsRequest.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = UserValidationError{} +var _ error = GetUserStarredAssetsRequestValidationError{} var _ interface { Field() string @@ -5512,47 +5320,47 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = UserValidationError{} +} = GetUserStarredAssetsRequestValidationError{} -// Validate checks the field values on Changelog with the rules defined in the -// proto definition for this message. If any rules are violated, the first -// error encountered is returned, or nil if there are no violations. -func (m *Changelog) Validate() error { +// Validate checks the field values on GetUserStarredAssetsResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *GetUserStarredAssetsResponse) Validate() error { return m.validate(false) } -// ValidateAll checks the field values on Changelog with the rules defined in -// the proto definition for this message. If any rules are violated, the -// result is a list of violation errors wrapped in ChangelogMultiError, or nil -// if none found. -func (m *Changelog) ValidateAll() error { +// ValidateAll checks the field values on GetUserStarredAssetsResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetUserStarredAssetsResponseMultiError, or nil if none found. +func (m *GetUserStarredAssetsResponse) ValidateAll() error { return m.validate(true) } -func (m *Changelog) validate(all bool) error { +func (m *GetUserStarredAssetsResponse) validate(all bool) error { if m == nil { return nil } var errors []error - for idx, item := range m.GetChanges() { + for idx, item := range m.GetData() { _, _ = idx, item if all { switch v := interface{}(item).(type) { case interface{ ValidateAll() error }: if err := v.ValidateAll(); err != nil { - errors = append(errors, ChangelogValidationError{ - field: fmt.Sprintf("Changes[%v]", idx), + errors = append(errors, GetUserStarredAssetsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), reason: "embedded message failed validation", cause: err, }) } case interface{ Validate() error }: if err := v.Validate(); err != nil { - errors = append(errors, ChangelogValidationError{ - field: fmt.Sprintf("Changes[%v]", idx), + errors = append(errors, GetUserStarredAssetsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), reason: "embedded message failed validation", cause: err, }) @@ -5560,8 +5368,8 @@ func (m *Changelog) validate(all bool) error { } } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return ChangelogValidationError{ - field: fmt.Sprintf("Changes[%v]", idx), + return GetUserStarredAssetsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), reason: "embedded message failed validation", cause: err, } @@ -5571,18 +5379,19 @@ func (m *Changelog) validate(all bool) error { } if len(errors) > 0 { - return ChangelogMultiError(errors) + return GetUserStarredAssetsResponseMultiError(errors) } return nil } -// ChangelogMultiError is an error wrapping multiple validation errors returned -// by Changelog.ValidateAll() if the designated constraints aren't met. -type ChangelogMultiError []error +// GetUserStarredAssetsResponseMultiError is an error wrapping multiple +// validation errors returned by GetUserStarredAssetsResponse.ValidateAll() if +// the designated constraints aren't met. +type GetUserStarredAssetsResponseMultiError []error // Error returns a concatenation of all the error messages it wraps. -func (m ChangelogMultiError) Error() string { +func (m GetUserStarredAssetsResponseMultiError) Error() string { var msgs []string for _, err := range m { msgs = append(msgs, err.Error()) @@ -5591,11 +5400,12 @@ func (m ChangelogMultiError) Error() string { } // AllErrors returns a list of validation violation errors. -func (m ChangelogMultiError) AllErrors() []error { return m } +func (m GetUserStarredAssetsResponseMultiError) AllErrors() []error { return m } -// ChangelogValidationError is the validation error returned by -// Changelog.Validate if the designated constraints aren't met. -type ChangelogValidationError struct { +// GetUserStarredAssetsResponseValidationError is the validation error returned +// by GetUserStarredAssetsResponse.Validate if the designated constraints +// aren't met. +type GetUserStarredAssetsResponseValidationError struct { field string reason string cause error @@ -5603,22 +5413,24 @@ type ChangelogValidationError struct { } // Field function returns field value. -func (e ChangelogValidationError) Field() string { return e.field } +func (e GetUserStarredAssetsResponseValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e ChangelogValidationError) Reason() string { return e.reason } +func (e GetUserStarredAssetsResponseValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e ChangelogValidationError) Cause() error { return e.cause } +func (e GetUserStarredAssetsResponseValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e ChangelogValidationError) Key() bool { return e.key } +func (e GetUserStarredAssetsResponseValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e ChangelogValidationError) ErrorName() string { return "ChangelogValidationError" } +func (e GetUserStarredAssetsResponseValidationError) ErrorName() string { + return "GetUserStarredAssetsResponseValidationError" +} // Error satisfies the builtin error interface -func (e ChangelogValidationError) Error() string { +func (e GetUserStarredAssetsResponseValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -5630,14 +5442,14 @@ func (e ChangelogValidationError) Error() string { } return fmt.Sprintf( - "invalid %sChangelog.%s: %s%s", + "invalid %sGetUserStarredAssetsResponse.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = ChangelogValidationError{} +var _ error = GetUserStarredAssetsResponseValidationError{} var _ interface { Field() string @@ -5645,102 +5457,74 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = ChangelogValidationError{} +} = GetUserStarredAssetsResponseValidationError{} -// Validate checks the field values on Change with the rules defined in the -// proto definition for this message. If any rules are violated, the first -// error encountered is returned, or nil if there are no violations. -func (m *Change) Validate() error { +// Validate checks the field values on GetMyStarredAssetsRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *GetMyStarredAssetsRequest) Validate() error { return m.validate(false) } -// ValidateAll checks the field values on Change with the rules defined in the -// proto definition for this message. If any rules are violated, the result is -// a list of violation errors wrapped in ChangeMultiError, or nil if none found. -func (m *Change) ValidateAll() error { +// ValidateAll checks the field values on GetMyStarredAssetsRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetMyStarredAssetsRequestMultiError, or nil if none found. +func (m *GetMyStarredAssetsRequest) ValidateAll() error { return m.validate(true) } -func (m *Change) validate(all bool) error { +func (m *GetMyStarredAssetsRequest) validate(all bool) error { if m == nil { return nil } var errors []error - // no validation rules for Type + if m.GetSize() != 0 { - if all { - switch v := interface{}(m.GetFrom()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, ChangeValidationError{ - field: "From", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, ChangeValidationError{ - field: "From", - reason: "embedded message failed validation", - cause: err, - }) + if m.GetSize() < 0 { + err := GetMyStarredAssetsRequestValidationError{ + field: "Size", + reason: "value must be greater than or equal to 0", } - } - } else if v, ok := interface{}(m.GetFrom()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ChangeValidationError{ - field: "From", - reason: "embedded message failed validation", - cause: err, + if !all { + return err } + errors = append(errors, err) } + } - if all { - switch v := interface{}(m.GetTo()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, ChangeValidationError{ - field: "To", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, ChangeValidationError{ - field: "To", - reason: "embedded message failed validation", - cause: err, - }) + if m.GetOffset() != 0 { + + if m.GetOffset() < 0 { + err := GetMyStarredAssetsRequestValidationError{ + field: "Offset", + reason: "value must be greater than or equal to 0", } - } - } else if v, ok := interface{}(m.GetTo()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ChangeValidationError{ - field: "To", - reason: "embedded message failed validation", - cause: err, + if !all { + return err } + errors = append(errors, err) } + } if len(errors) > 0 { - return ChangeMultiError(errors) + return GetMyStarredAssetsRequestMultiError(errors) } return nil } -// ChangeMultiError is an error wrapping multiple validation errors returned by -// Change.ValidateAll() if the designated constraints aren't met. -type ChangeMultiError []error +// GetMyStarredAssetsRequestMultiError is an error wrapping multiple validation +// errors returned by GetMyStarredAssetsRequest.ValidateAll() if the +// designated constraints aren't met. +type GetMyStarredAssetsRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. -func (m ChangeMultiError) Error() string { +func (m GetMyStarredAssetsRequestMultiError) Error() string { var msgs []string for _, err := range m { msgs = append(msgs, err.Error()) @@ -5749,11 +5533,11 @@ func (m ChangeMultiError) Error() string { } // AllErrors returns a list of validation violation errors. -func (m ChangeMultiError) AllErrors() []error { return m } +func (m GetMyStarredAssetsRequestMultiError) AllErrors() []error { return m } -// ChangeValidationError is the validation error returned by Change.Validate if -// the designated constraints aren't met. -type ChangeValidationError struct { +// GetMyStarredAssetsRequestValidationError is the validation error returned by +// GetMyStarredAssetsRequest.Validate if the designated constraints aren't met. +type GetMyStarredAssetsRequestValidationError struct { field string reason string cause error @@ -5761,22 +5545,24 @@ type ChangeValidationError struct { } // Field function returns field value. -func (e ChangeValidationError) Field() string { return e.field } +func (e GetMyStarredAssetsRequestValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e ChangeValidationError) Reason() string { return e.reason } +func (e GetMyStarredAssetsRequestValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e ChangeValidationError) Cause() error { return e.cause } +func (e GetMyStarredAssetsRequestValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e ChangeValidationError) Key() bool { return e.key } +func (e GetMyStarredAssetsRequestValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e ChangeValidationError) ErrorName() string { return "ChangeValidationError" } +func (e GetMyStarredAssetsRequestValidationError) ErrorName() string { + return "GetMyStarredAssetsRequestValidationError" +} // Error satisfies the builtin error interface -func (e ChangeValidationError) Error() string { +func (e GetMyStarredAssetsRequestValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -5788,14 +5574,14 @@ func (e ChangeValidationError) Error() string { } return fmt.Sprintf( - "invalid %sChange.%s: %s%s", + "invalid %sGetMyStarredAssetsRequest.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = ChangeValidationError{} +var _ error = GetMyStarredAssetsRequestValidationError{} var _ interface { Field() string @@ -5803,116 +5589,47 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = ChangeValidationError{} +} = GetMyStarredAssetsRequestValidationError{} -// Validate checks the field values on Asset with the rules defined in the -// proto definition for this message. If any rules are violated, the first -// error encountered is returned, or nil if there are no violations. -func (m *Asset) Validate() error { +// Validate checks the field values on GetMyStarredAssetsResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *GetMyStarredAssetsResponse) Validate() error { return m.validate(false) } -// ValidateAll checks the field values on Asset with the rules defined in the -// proto definition for this message. If any rules are violated, the result is -// a list of violation errors wrapped in AssetMultiError, or nil if none found. -func (m *Asset) ValidateAll() error { +// ValidateAll checks the field values on GetMyStarredAssetsResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetMyStarredAssetsResponseMultiError, or nil if none found. +func (m *GetMyStarredAssetsResponse) ValidateAll() error { return m.validate(true) } -func (m *Asset) validate(all bool) error { +func (m *GetMyStarredAssetsResponse) validate(all bool) error { if m == nil { return nil } var errors []error - // no validation rules for Id - - // no validation rules for Urn - - // no validation rules for Type - - // no validation rules for Service - - // no validation rules for Name - - // no validation rules for Description - - if all { - switch v := interface{}(m.GetData()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, AssetValidationError{ - field: "Data", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, AssetValidationError{ - field: "Data", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return AssetValidationError{ - field: "Data", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if all { - switch v := interface{}(m.GetLabels()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, AssetValidationError{ - field: "Labels", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, AssetValidationError{ - field: "Labels", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetLabels()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return AssetValidationError{ - field: "Labels", - reason: "embedded message failed validation", - cause: err, - } - } - } - - for idx, item := range m.GetOwners() { + for idx, item := range m.GetData() { _, _ = idx, item if all { switch v := interface{}(item).(type) { case interface{ ValidateAll() error }: if err := v.ValidateAll(); err != nil { - errors = append(errors, AssetValidationError{ - field: fmt.Sprintf("Owners[%v]", idx), + errors = append(errors, GetMyStarredAssetsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), reason: "embedded message failed validation", cause: err, }) } case interface{ Validate() error }: if err := v.Validate(); err != nil { - errors = append(errors, AssetValidationError{ - field: fmt.Sprintf("Owners[%v]", idx), + errors = append(errors, GetMyStarredAssetsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), reason: "embedded message failed validation", cause: err, }) @@ -5920,8 +5637,8 @@ func (m *Asset) validate(all bool) error { } } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return AssetValidationError{ - field: fmt.Sprintf("Owners[%v]", idx), + return GetMyStarredAssetsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), reason: "embedded message failed validation", cause: err, } @@ -5930,71 +5647,4562 @@ func (m *Asset) validate(all bool) error { } - // no validation rules for Version - - if all { - switch v := interface{}(m.GetUpdatedBy()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, AssetValidationError{ - field: "UpdatedBy", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, AssetValidationError{ - field: "UpdatedBy", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetUpdatedBy()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return AssetValidationError{ - field: "UpdatedBy", - reason: "embedded message failed validation", - cause: err, - } - } + if len(errors) > 0 { + return GetMyStarredAssetsResponseMultiError(errors) } - if all { - switch v := interface{}(m.GetChangelog()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, AssetValidationError{ - field: "Changelog", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, AssetValidationError{ - field: "Changelog", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetChangelog()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return AssetValidationError{ - field: "Changelog", - reason: "embedded message failed validation", - cause: err, - } - } + return nil +} + +// GetMyStarredAssetsResponseMultiError is an error wrapping multiple +// validation errors returned by GetMyStarredAssetsResponse.ValidateAll() if +// the designated constraints aren't met. +type GetMyStarredAssetsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetMyStarredAssetsResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) } + return strings.Join(msgs, "; ") +} - if all { - switch v := interface{}(m.GetCreatedAt()).(type) { - case interface{ ValidateAll() error }: +// AllErrors returns a list of validation violation errors. +func (m GetMyStarredAssetsResponseMultiError) AllErrors() []error { return m } + +// GetMyStarredAssetsResponseValidationError is the validation error returned +// by GetMyStarredAssetsResponse.Validate if the designated constraints aren't met. +type GetMyStarredAssetsResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e GetMyStarredAssetsResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e GetMyStarredAssetsResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e GetMyStarredAssetsResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e GetMyStarredAssetsResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e GetMyStarredAssetsResponseValidationError) ErrorName() string { + return "GetMyStarredAssetsResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e GetMyStarredAssetsResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sGetMyStarredAssetsResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = GetMyStarredAssetsResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = GetMyStarredAssetsResponseValidationError{} + +// Validate checks the field values on GetMyStarredAssetRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *GetMyStarredAssetRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetMyStarredAssetRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetMyStarredAssetRequestMultiError, or nil if none found. +func (m *GetMyStarredAssetRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetMyStarredAssetRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for AssetId + + if len(errors) > 0 { + return GetMyStarredAssetRequestMultiError(errors) + } + + return nil +} + +// GetMyStarredAssetRequestMultiError is an error wrapping multiple validation +// errors returned by GetMyStarredAssetRequest.ValidateAll() if the designated +// constraints aren't met. +type GetMyStarredAssetRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetMyStarredAssetRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetMyStarredAssetRequestMultiError) AllErrors() []error { return m } + +// GetMyStarredAssetRequestValidationError is the validation error returned by +// GetMyStarredAssetRequest.Validate if the designated constraints aren't met. +type GetMyStarredAssetRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e GetMyStarredAssetRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e GetMyStarredAssetRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e GetMyStarredAssetRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e GetMyStarredAssetRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e GetMyStarredAssetRequestValidationError) ErrorName() string { + return "GetMyStarredAssetRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e GetMyStarredAssetRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sGetMyStarredAssetRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = GetMyStarredAssetRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = GetMyStarredAssetRequestValidationError{} + +// Validate checks the field values on GetMyStarredAssetResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *GetMyStarredAssetResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetMyStarredAssetResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetMyStarredAssetResponseMultiError, or nil if none found. +func (m *GetMyStarredAssetResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetMyStarredAssetResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetMyStarredAssetResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetMyStarredAssetResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetMyStarredAssetResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(errors) > 0 { + return GetMyStarredAssetResponseMultiError(errors) + } + + return nil +} + +// GetMyStarredAssetResponseMultiError is an error wrapping multiple validation +// errors returned by GetMyStarredAssetResponse.ValidateAll() if the +// designated constraints aren't met. +type GetMyStarredAssetResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetMyStarredAssetResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetMyStarredAssetResponseMultiError) AllErrors() []error { return m } + +// GetMyStarredAssetResponseValidationError is the validation error returned by +// GetMyStarredAssetResponse.Validate if the designated constraints aren't met. +type GetMyStarredAssetResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e GetMyStarredAssetResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e GetMyStarredAssetResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e GetMyStarredAssetResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e GetMyStarredAssetResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e GetMyStarredAssetResponseValidationError) ErrorName() string { + return "GetMyStarredAssetResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e GetMyStarredAssetResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sGetMyStarredAssetResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = GetMyStarredAssetResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = GetMyStarredAssetResponseValidationError{} + +// Validate checks the field values on StarAssetRequest with the rules defined +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. +func (m *StarAssetRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on StarAssetRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// StarAssetRequestMultiError, or nil if none found. +func (m *StarAssetRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *StarAssetRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for AssetId + + if len(errors) > 0 { + return StarAssetRequestMultiError(errors) + } + + return nil +} + +// StarAssetRequestMultiError is an error wrapping multiple validation errors +// returned by StarAssetRequest.ValidateAll() if the designated constraints +// aren't met. +type StarAssetRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m StarAssetRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m StarAssetRequestMultiError) AllErrors() []error { return m } + +// StarAssetRequestValidationError is the validation error returned by +// StarAssetRequest.Validate if the designated constraints aren't met. +type StarAssetRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e StarAssetRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e StarAssetRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e StarAssetRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e StarAssetRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e StarAssetRequestValidationError) ErrorName() string { return "StarAssetRequestValidationError" } + +// Error satisfies the builtin error interface +func (e StarAssetRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sStarAssetRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = StarAssetRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = StarAssetRequestValidationError{} + +// Validate checks the field values on StarAssetResponse with the rules defined +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. +func (m *StarAssetResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on StarAssetResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// StarAssetResponseMultiError, or nil if none found. +func (m *StarAssetResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *StarAssetResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Id + + if len(errors) > 0 { + return StarAssetResponseMultiError(errors) + } + + return nil +} + +// StarAssetResponseMultiError is an error wrapping multiple validation errors +// returned by StarAssetResponse.ValidateAll() if the designated constraints +// aren't met. +type StarAssetResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m StarAssetResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m StarAssetResponseMultiError) AllErrors() []error { return m } + +// StarAssetResponseValidationError is the validation error returned by +// StarAssetResponse.Validate if the designated constraints aren't met. +type StarAssetResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e StarAssetResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e StarAssetResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e StarAssetResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e StarAssetResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e StarAssetResponseValidationError) ErrorName() string { + return "StarAssetResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e StarAssetResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sStarAssetResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = StarAssetResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = StarAssetResponseValidationError{} + +// Validate checks the field values on UnstarAssetRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *UnstarAssetRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UnstarAssetRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UnstarAssetRequestMultiError, or nil if none found. +func (m *UnstarAssetRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UnstarAssetRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for AssetId + + if len(errors) > 0 { + return UnstarAssetRequestMultiError(errors) + } + + return nil +} + +// UnstarAssetRequestMultiError is an error wrapping multiple validation errors +// returned by UnstarAssetRequest.ValidateAll() if the designated constraints +// aren't met. +type UnstarAssetRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UnstarAssetRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UnstarAssetRequestMultiError) AllErrors() []error { return m } + +// UnstarAssetRequestValidationError is the validation error returned by +// UnstarAssetRequest.Validate if the designated constraints aren't met. +type UnstarAssetRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e UnstarAssetRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e UnstarAssetRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e UnstarAssetRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e UnstarAssetRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e UnstarAssetRequestValidationError) ErrorName() string { + return "UnstarAssetRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e UnstarAssetRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sUnstarAssetRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = UnstarAssetRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = UnstarAssetRequestValidationError{} + +// Validate checks the field values on UnstarAssetResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *UnstarAssetResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UnstarAssetResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UnstarAssetResponseMultiError, or nil if none found. +func (m *UnstarAssetResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UnstarAssetResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if len(errors) > 0 { + return UnstarAssetResponseMultiError(errors) + } + + return nil +} + +// UnstarAssetResponseMultiError is an error wrapping multiple validation +// errors returned by UnstarAssetResponse.ValidateAll() if the designated +// constraints aren't met. +type UnstarAssetResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UnstarAssetResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UnstarAssetResponseMultiError) AllErrors() []error { return m } + +// UnstarAssetResponseValidationError is the validation error returned by +// UnstarAssetResponse.Validate if the designated constraints aren't met. +type UnstarAssetResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e UnstarAssetResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e UnstarAssetResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e UnstarAssetResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e UnstarAssetResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e UnstarAssetResponseValidationError) ErrorName() string { + return "UnstarAssetResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e UnstarAssetResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sUnstarAssetResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = UnstarAssetResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = UnstarAssetResponseValidationError{} + +// Validate checks the field values on GetMyDiscussionsRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *GetMyDiscussionsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetMyDiscussionsRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetMyDiscussionsRequestMultiError, or nil if none found. +func (m *GetMyDiscussionsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetMyDiscussionsRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if m.GetFilter() != "" { + + } + + if m.GetType() != "" { + + } + + if m.GetState() != "" { + + } + + if m.GetAsset() != "" { + + } + + if m.GetLabels() != "" { + + } + + if m.GetSort() != "" { + + } + + if m.GetDirection() != "" { + + } + + if m.GetSize() != 0 { + + if m.GetSize() < 0 { + err := GetMyDiscussionsRequestValidationError{ + field: "Size", + reason: "value must be greater than or equal to 0", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + + if m.GetOffset() != 0 { + + if m.GetOffset() < 0 { + err := GetMyDiscussionsRequestValidationError{ + field: "Offset", + reason: "value must be greater than or equal to 0", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + + if len(errors) > 0 { + return GetMyDiscussionsRequestMultiError(errors) + } + + return nil +} + +// GetMyDiscussionsRequestMultiError is an error wrapping multiple validation +// errors returned by GetMyDiscussionsRequest.ValidateAll() if the designated +// constraints aren't met. +type GetMyDiscussionsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetMyDiscussionsRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetMyDiscussionsRequestMultiError) AllErrors() []error { return m } + +// GetMyDiscussionsRequestValidationError is the validation error returned by +// GetMyDiscussionsRequest.Validate if the designated constraints aren't met. +type GetMyDiscussionsRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e GetMyDiscussionsRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e GetMyDiscussionsRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e GetMyDiscussionsRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e GetMyDiscussionsRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e GetMyDiscussionsRequestValidationError) ErrorName() string { + return "GetMyDiscussionsRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e GetMyDiscussionsRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sGetMyDiscussionsRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = GetMyDiscussionsRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = GetMyDiscussionsRequestValidationError{} + +// Validate checks the field values on GetMyDiscussionsResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *GetMyDiscussionsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetMyDiscussionsResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetMyDiscussionsResponseMultiError, or nil if none found. +func (m *GetMyDiscussionsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetMyDiscussionsResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + for idx, item := range m.GetData() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetMyDiscussionsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetMyDiscussionsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetMyDiscussionsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if len(errors) > 0 { + return GetMyDiscussionsResponseMultiError(errors) + } + + return nil +} + +// GetMyDiscussionsResponseMultiError is an error wrapping multiple validation +// errors returned by GetMyDiscussionsResponse.ValidateAll() if the designated +// constraints aren't met. +type GetMyDiscussionsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetMyDiscussionsResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetMyDiscussionsResponseMultiError) AllErrors() []error { return m } + +// GetMyDiscussionsResponseValidationError is the validation error returned by +// GetMyDiscussionsResponse.Validate if the designated constraints aren't met. +type GetMyDiscussionsResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e GetMyDiscussionsResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e GetMyDiscussionsResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e GetMyDiscussionsResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e GetMyDiscussionsResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e GetMyDiscussionsResponseValidationError) ErrorName() string { + return "GetMyDiscussionsResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e GetMyDiscussionsResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sGetMyDiscussionsResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = GetMyDiscussionsResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = GetMyDiscussionsResponseValidationError{} + +// Validate checks the field values on CreateTagRequest with the rules defined +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. +func (m *CreateTagRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateTagRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateTagRequestMultiError, or nil if none found. +func (m *CreateTagRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateTagRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for RecordType + + // no validation rules for RecordUrn + + // no validation rules for TemplateUrn + + for idx, item := range m.GetTagValues() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateTagRequestValidationError{ + field: fmt.Sprintf("TagValues[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateTagRequestValidationError{ + field: fmt.Sprintf("TagValues[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CreateTagRequestValidationError{ + field: fmt.Sprintf("TagValues[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + // no validation rules for TemplateDisplayName + + // no validation rules for TemplateDescription + + if len(errors) > 0 { + return CreateTagRequestMultiError(errors) + } + + return nil +} + +// CreateTagRequestMultiError is an error wrapping multiple validation errors +// returned by CreateTagRequest.ValidateAll() if the designated constraints +// aren't met. +type CreateTagRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateTagRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateTagRequestMultiError) AllErrors() []error { return m } + +// CreateTagRequestValidationError is the validation error returned by +// CreateTagRequest.Validate if the designated constraints aren't met. +type CreateTagRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e CreateTagRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e CreateTagRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e CreateTagRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e CreateTagRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e CreateTagRequestValidationError) ErrorName() string { return "CreateTagRequestValidationError" } + +// Error satisfies the builtin error interface +func (e CreateTagRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sCreateTagRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = CreateTagRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = CreateTagRequestValidationError{} + +// Validate checks the field values on CreateTagResponse with the rules defined +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. +func (m *CreateTagResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateTagResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateTagResponseMultiError, or nil if none found. +func (m *CreateTagResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateTagResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateTagResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateTagResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CreateTagResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(errors) > 0 { + return CreateTagResponseMultiError(errors) + } + + return nil +} + +// CreateTagResponseMultiError is an error wrapping multiple validation errors +// returned by CreateTagResponse.ValidateAll() if the designated constraints +// aren't met. +type CreateTagResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateTagResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateTagResponseMultiError) AllErrors() []error { return m } + +// CreateTagResponseValidationError is the validation error returned by +// CreateTagResponse.Validate if the designated constraints aren't met. +type CreateTagResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e CreateTagResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e CreateTagResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e CreateTagResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e CreateTagResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e CreateTagResponseValidationError) ErrorName() string { + return "CreateTagResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e CreateTagResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sCreateTagResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = CreateTagResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = CreateTagResponseValidationError{} + +// Validate checks the field values on GetTagsByRecordAndTemplateRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the first error encountered is returned, or nil if there are +// no violations. +func (m *GetTagsByRecordAndTemplateRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetTagsByRecordAndTemplateRequest +// with the rules defined in the proto definition for this message. If any +// rules are violated, the result is a list of violation errors wrapped in +// GetTagsByRecordAndTemplateRequestMultiError, or nil if none found. +func (m *GetTagsByRecordAndTemplateRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetTagsByRecordAndTemplateRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Type + + // no validation rules for RecordUrn + + // no validation rules for TemplateUrn + + if len(errors) > 0 { + return GetTagsByRecordAndTemplateRequestMultiError(errors) + } + + return nil +} + +// GetTagsByRecordAndTemplateRequestMultiError is an error wrapping multiple +// validation errors returned by +// GetTagsByRecordAndTemplateRequest.ValidateAll() if the designated +// constraints aren't met. +type GetTagsByRecordAndTemplateRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetTagsByRecordAndTemplateRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetTagsByRecordAndTemplateRequestMultiError) AllErrors() []error { return m } + +// GetTagsByRecordAndTemplateRequestValidationError is the validation error +// returned by GetTagsByRecordAndTemplateRequest.Validate if the designated +// constraints aren't met. +type GetTagsByRecordAndTemplateRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e GetTagsByRecordAndTemplateRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e GetTagsByRecordAndTemplateRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e GetTagsByRecordAndTemplateRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e GetTagsByRecordAndTemplateRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e GetTagsByRecordAndTemplateRequestValidationError) ErrorName() string { + return "GetTagsByRecordAndTemplateRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e GetTagsByRecordAndTemplateRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sGetTagsByRecordAndTemplateRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = GetTagsByRecordAndTemplateRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = GetTagsByRecordAndTemplateRequestValidationError{} + +// Validate checks the field values on GetTagsByRecordAndTemplateResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the first error encountered is returned, or nil if there are +// no violations. +func (m *GetTagsByRecordAndTemplateResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetTagsByRecordAndTemplateResponse +// with the rules defined in the proto definition for this message. If any +// rules are violated, the result is a list of violation errors wrapped in +// GetTagsByRecordAndTemplateResponseMultiError, or nil if none found. +func (m *GetTagsByRecordAndTemplateResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetTagsByRecordAndTemplateResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetTagsByRecordAndTemplateResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetTagsByRecordAndTemplateResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetTagsByRecordAndTemplateResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(errors) > 0 { + return GetTagsByRecordAndTemplateResponseMultiError(errors) + } + + return nil +} + +// GetTagsByRecordAndTemplateResponseMultiError is an error wrapping multiple +// validation errors returned by +// GetTagsByRecordAndTemplateResponse.ValidateAll() if the designated +// constraints aren't met. +type GetTagsByRecordAndTemplateResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetTagsByRecordAndTemplateResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetTagsByRecordAndTemplateResponseMultiError) AllErrors() []error { return m } + +// GetTagsByRecordAndTemplateResponseValidationError is the validation error +// returned by GetTagsByRecordAndTemplateResponse.Validate if the designated +// constraints aren't met. +type GetTagsByRecordAndTemplateResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e GetTagsByRecordAndTemplateResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e GetTagsByRecordAndTemplateResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e GetTagsByRecordAndTemplateResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e GetTagsByRecordAndTemplateResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e GetTagsByRecordAndTemplateResponseValidationError) ErrorName() string { + return "GetTagsByRecordAndTemplateResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e GetTagsByRecordAndTemplateResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sGetTagsByRecordAndTemplateResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = GetTagsByRecordAndTemplateResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = GetTagsByRecordAndTemplateResponseValidationError{} + +// Validate checks the field values on UpdateTagRequest with the rules defined +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. +func (m *UpdateTagRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateTagRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateTagRequestMultiError, or nil if none found. +func (m *UpdateTagRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateTagRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Type + + // no validation rules for RecordUrn + + // no validation rules for TemplateUrn + + for idx, item := range m.GetTagValues() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateTagRequestValidationError{ + field: fmt.Sprintf("TagValues[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateTagRequestValidationError{ + field: fmt.Sprintf("TagValues[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UpdateTagRequestValidationError{ + field: fmt.Sprintf("TagValues[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + // no validation rules for TemplateDisplayName + + // no validation rules for TemplateDescription + + if len(errors) > 0 { + return UpdateTagRequestMultiError(errors) + } + + return nil +} + +// UpdateTagRequestMultiError is an error wrapping multiple validation errors +// returned by UpdateTagRequest.ValidateAll() if the designated constraints +// aren't met. +type UpdateTagRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateTagRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateTagRequestMultiError) AllErrors() []error { return m } + +// UpdateTagRequestValidationError is the validation error returned by +// UpdateTagRequest.Validate if the designated constraints aren't met. +type UpdateTagRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e UpdateTagRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e UpdateTagRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e UpdateTagRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e UpdateTagRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e UpdateTagRequestValidationError) ErrorName() string { return "UpdateTagRequestValidationError" } + +// Error satisfies the builtin error interface +func (e UpdateTagRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sUpdateTagRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = UpdateTagRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = UpdateTagRequestValidationError{} + +// Validate checks the field values on UpdateTagResponse with the rules defined +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. +func (m *UpdateTagResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateTagResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateTagResponseMultiError, or nil if none found. +func (m *UpdateTagResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateTagResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateTagResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateTagResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UpdateTagResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(errors) > 0 { + return UpdateTagResponseMultiError(errors) + } + + return nil +} + +// UpdateTagResponseMultiError is an error wrapping multiple validation errors +// returned by UpdateTagResponse.ValidateAll() if the designated constraints +// aren't met. +type UpdateTagResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateTagResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateTagResponseMultiError) AllErrors() []error { return m } + +// UpdateTagResponseValidationError is the validation error returned by +// UpdateTagResponse.Validate if the designated constraints aren't met. +type UpdateTagResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e UpdateTagResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e UpdateTagResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e UpdateTagResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e UpdateTagResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e UpdateTagResponseValidationError) ErrorName() string { + return "UpdateTagResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e UpdateTagResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sUpdateTagResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = UpdateTagResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = UpdateTagResponseValidationError{} + +// Validate checks the field values on DeleteTagRequest with the rules defined +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. +func (m *DeleteTagRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteTagRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteTagRequestMultiError, or nil if none found. +func (m *DeleteTagRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteTagRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Type + + // no validation rules for RecordUrn + + // no validation rules for TemplateUrn + + if len(errors) > 0 { + return DeleteTagRequestMultiError(errors) + } + + return nil +} + +// DeleteTagRequestMultiError is an error wrapping multiple validation errors +// returned by DeleteTagRequest.ValidateAll() if the designated constraints +// aren't met. +type DeleteTagRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteTagRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteTagRequestMultiError) AllErrors() []error { return m } + +// DeleteTagRequestValidationError is the validation error returned by +// DeleteTagRequest.Validate if the designated constraints aren't met. +type DeleteTagRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DeleteTagRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DeleteTagRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DeleteTagRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DeleteTagRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DeleteTagRequestValidationError) ErrorName() string { return "DeleteTagRequestValidationError" } + +// Error satisfies the builtin error interface +func (e DeleteTagRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sDeleteTagRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DeleteTagRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DeleteTagRequestValidationError{} + +// Validate checks the field values on DeleteTagResponse with the rules defined +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. +func (m *DeleteTagResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteTagResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteTagResponseMultiError, or nil if none found. +func (m *DeleteTagResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteTagResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if len(errors) > 0 { + return DeleteTagResponseMultiError(errors) + } + + return nil +} + +// DeleteTagResponseMultiError is an error wrapping multiple validation errors +// returned by DeleteTagResponse.ValidateAll() if the designated constraints +// aren't met. +type DeleteTagResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteTagResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteTagResponseMultiError) AllErrors() []error { return m } + +// DeleteTagResponseValidationError is the validation error returned by +// DeleteTagResponse.Validate if the designated constraints aren't met. +type DeleteTagResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DeleteTagResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DeleteTagResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DeleteTagResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DeleteTagResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DeleteTagResponseValidationError) ErrorName() string { + return "DeleteTagResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e DeleteTagResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sDeleteTagResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DeleteTagResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DeleteTagResponseValidationError{} + +// Validate checks the field values on GetTagsByRecordRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *GetTagsByRecordRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetTagsByRecordRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetTagsByRecordRequestMultiError, or nil if none found. +func (m *GetTagsByRecordRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetTagsByRecordRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Type + + // no validation rules for RecordUrn + + if len(errors) > 0 { + return GetTagsByRecordRequestMultiError(errors) + } + + return nil +} + +// GetTagsByRecordRequestMultiError is an error wrapping multiple validation +// errors returned by GetTagsByRecordRequest.ValidateAll() if the designated +// constraints aren't met. +type GetTagsByRecordRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetTagsByRecordRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetTagsByRecordRequestMultiError) AllErrors() []error { return m } + +// GetTagsByRecordRequestValidationError is the validation error returned by +// GetTagsByRecordRequest.Validate if the designated constraints aren't met. +type GetTagsByRecordRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e GetTagsByRecordRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e GetTagsByRecordRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e GetTagsByRecordRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e GetTagsByRecordRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e GetTagsByRecordRequestValidationError) ErrorName() string { + return "GetTagsByRecordRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e GetTagsByRecordRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sGetTagsByRecordRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = GetTagsByRecordRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = GetTagsByRecordRequestValidationError{} + +// Validate checks the field values on GetTagsByRecordResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *GetTagsByRecordResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetTagsByRecordResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetTagsByRecordResponseMultiError, or nil if none found. +func (m *GetTagsByRecordResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetTagsByRecordResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + for idx, item := range m.GetData() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetTagsByRecordResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetTagsByRecordResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetTagsByRecordResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if len(errors) > 0 { + return GetTagsByRecordResponseMultiError(errors) + } + + return nil +} + +// GetTagsByRecordResponseMultiError is an error wrapping multiple validation +// errors returned by GetTagsByRecordResponse.ValidateAll() if the designated +// constraints aren't met. +type GetTagsByRecordResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetTagsByRecordResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetTagsByRecordResponseMultiError) AllErrors() []error { return m } + +// GetTagsByRecordResponseValidationError is the validation error returned by +// GetTagsByRecordResponse.Validate if the designated constraints aren't met. +type GetTagsByRecordResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e GetTagsByRecordResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e GetTagsByRecordResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e GetTagsByRecordResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e GetTagsByRecordResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e GetTagsByRecordResponseValidationError) ErrorName() string { + return "GetTagsByRecordResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e GetTagsByRecordResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sGetTagsByRecordResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = GetTagsByRecordResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = GetTagsByRecordResponseValidationError{} + +// Validate checks the field values on GetAllTagTemplatesRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *GetAllTagTemplatesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetAllTagTemplatesRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetAllTagTemplatesRequestMultiError, or nil if none found. +func (m *GetAllTagTemplatesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetAllTagTemplatesRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Urn + + if len(errors) > 0 { + return GetAllTagTemplatesRequestMultiError(errors) + } + + return nil +} + +// GetAllTagTemplatesRequestMultiError is an error wrapping multiple validation +// errors returned by GetAllTagTemplatesRequest.ValidateAll() if the +// designated constraints aren't met. +type GetAllTagTemplatesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetAllTagTemplatesRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetAllTagTemplatesRequestMultiError) AllErrors() []error { return m } + +// GetAllTagTemplatesRequestValidationError is the validation error returned by +// GetAllTagTemplatesRequest.Validate if the designated constraints aren't met. +type GetAllTagTemplatesRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e GetAllTagTemplatesRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e GetAllTagTemplatesRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e GetAllTagTemplatesRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e GetAllTagTemplatesRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e GetAllTagTemplatesRequestValidationError) ErrorName() string { + return "GetAllTagTemplatesRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e GetAllTagTemplatesRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sGetAllTagTemplatesRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = GetAllTagTemplatesRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = GetAllTagTemplatesRequestValidationError{} + +// Validate checks the field values on GetAllTagTemplatesResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *GetAllTagTemplatesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetAllTagTemplatesResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetAllTagTemplatesResponseMultiError, or nil if none found. +func (m *GetAllTagTemplatesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetAllTagTemplatesResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + for idx, item := range m.GetData() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetAllTagTemplatesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetAllTagTemplatesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetAllTagTemplatesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if len(errors) > 0 { + return GetAllTagTemplatesResponseMultiError(errors) + } + + return nil +} + +// GetAllTagTemplatesResponseMultiError is an error wrapping multiple +// validation errors returned by GetAllTagTemplatesResponse.ValidateAll() if +// the designated constraints aren't met. +type GetAllTagTemplatesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetAllTagTemplatesResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetAllTagTemplatesResponseMultiError) AllErrors() []error { return m } + +// GetAllTagTemplatesResponseValidationError is the validation error returned +// by GetAllTagTemplatesResponse.Validate if the designated constraints aren't met. +type GetAllTagTemplatesResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e GetAllTagTemplatesResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e GetAllTagTemplatesResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e GetAllTagTemplatesResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e GetAllTagTemplatesResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e GetAllTagTemplatesResponseValidationError) ErrorName() string { + return "GetAllTagTemplatesResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e GetAllTagTemplatesResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sGetAllTagTemplatesResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = GetAllTagTemplatesResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = GetAllTagTemplatesResponseValidationError{} + +// Validate checks the field values on CreateTagTemplateRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *CreateTagTemplateRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateTagTemplateRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateTagTemplateRequestMultiError, or nil if none found. +func (m *CreateTagTemplateRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateTagTemplateRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Urn + + // no validation rules for DisplayName + + // no validation rules for Description + + for idx, item := range m.GetFields() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateTagTemplateRequestValidationError{ + field: fmt.Sprintf("Fields[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateTagTemplateRequestValidationError{ + field: fmt.Sprintf("Fields[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CreateTagTemplateRequestValidationError{ + field: fmt.Sprintf("Fields[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if len(errors) > 0 { + return CreateTagTemplateRequestMultiError(errors) + } + + return nil +} + +// CreateTagTemplateRequestMultiError is an error wrapping multiple validation +// errors returned by CreateTagTemplateRequest.ValidateAll() if the designated +// constraints aren't met. +type CreateTagTemplateRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateTagTemplateRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateTagTemplateRequestMultiError) AllErrors() []error { return m } + +// CreateTagTemplateRequestValidationError is the validation error returned by +// CreateTagTemplateRequest.Validate if the designated constraints aren't met. +type CreateTagTemplateRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e CreateTagTemplateRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e CreateTagTemplateRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e CreateTagTemplateRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e CreateTagTemplateRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e CreateTagTemplateRequestValidationError) ErrorName() string { + return "CreateTagTemplateRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e CreateTagTemplateRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sCreateTagTemplateRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = CreateTagTemplateRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = CreateTagTemplateRequestValidationError{} + +// Validate checks the field values on CreateTagTemplateResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *CreateTagTemplateResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateTagTemplateResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateTagTemplateResponseMultiError, or nil if none found. +func (m *CreateTagTemplateResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateTagTemplateResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateTagTemplateResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateTagTemplateResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CreateTagTemplateResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(errors) > 0 { + return CreateTagTemplateResponseMultiError(errors) + } + + return nil +} + +// CreateTagTemplateResponseMultiError is an error wrapping multiple validation +// errors returned by CreateTagTemplateResponse.ValidateAll() if the +// designated constraints aren't met. +type CreateTagTemplateResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateTagTemplateResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateTagTemplateResponseMultiError) AllErrors() []error { return m } + +// CreateTagTemplateResponseValidationError is the validation error returned by +// CreateTagTemplateResponse.Validate if the designated constraints aren't met. +type CreateTagTemplateResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e CreateTagTemplateResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e CreateTagTemplateResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e CreateTagTemplateResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e CreateTagTemplateResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e CreateTagTemplateResponseValidationError) ErrorName() string { + return "CreateTagTemplateResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e CreateTagTemplateResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sCreateTagTemplateResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = CreateTagTemplateResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = CreateTagTemplateResponseValidationError{} + +// Validate checks the field values on GetTagTemplateRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *GetTagTemplateRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetTagTemplateRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetTagTemplateRequestMultiError, or nil if none found. +func (m *GetTagTemplateRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetTagTemplateRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for TemplateUrn + + if len(errors) > 0 { + return GetTagTemplateRequestMultiError(errors) + } + + return nil +} + +// GetTagTemplateRequestMultiError is an error wrapping multiple validation +// errors returned by GetTagTemplateRequest.ValidateAll() if the designated +// constraints aren't met. +type GetTagTemplateRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetTagTemplateRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetTagTemplateRequestMultiError) AllErrors() []error { return m } + +// GetTagTemplateRequestValidationError is the validation error returned by +// GetTagTemplateRequest.Validate if the designated constraints aren't met. +type GetTagTemplateRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e GetTagTemplateRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e GetTagTemplateRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e GetTagTemplateRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e GetTagTemplateRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e GetTagTemplateRequestValidationError) ErrorName() string { + return "GetTagTemplateRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e GetTagTemplateRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sGetTagTemplateRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = GetTagTemplateRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = GetTagTemplateRequestValidationError{} + +// Validate checks the field values on GetTagTemplateResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *GetTagTemplateResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetTagTemplateResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetTagTemplateResponseMultiError, or nil if none found. +func (m *GetTagTemplateResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetTagTemplateResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetTagTemplateResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetTagTemplateResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetTagTemplateResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(errors) > 0 { + return GetTagTemplateResponseMultiError(errors) + } + + return nil +} + +// GetTagTemplateResponseMultiError is an error wrapping multiple validation +// errors returned by GetTagTemplateResponse.ValidateAll() if the designated +// constraints aren't met. +type GetTagTemplateResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetTagTemplateResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetTagTemplateResponseMultiError) AllErrors() []error { return m } + +// GetTagTemplateResponseValidationError is the validation error returned by +// GetTagTemplateResponse.Validate if the designated constraints aren't met. +type GetTagTemplateResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e GetTagTemplateResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e GetTagTemplateResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e GetTagTemplateResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e GetTagTemplateResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e GetTagTemplateResponseValidationError) ErrorName() string { + return "GetTagTemplateResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e GetTagTemplateResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sGetTagTemplateResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = GetTagTemplateResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = GetTagTemplateResponseValidationError{} + +// Validate checks the field values on UpdateTagTemplateRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *UpdateTagTemplateRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateTagTemplateRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateTagTemplateRequestMultiError, or nil if none found. +func (m *UpdateTagTemplateRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateTagTemplateRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for TemplateUrn + + // no validation rules for DisplayName + + // no validation rules for Description + + for idx, item := range m.GetFields() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateTagTemplateRequestValidationError{ + field: fmt.Sprintf("Fields[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateTagTemplateRequestValidationError{ + field: fmt.Sprintf("Fields[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UpdateTagTemplateRequestValidationError{ + field: fmt.Sprintf("Fields[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if len(errors) > 0 { + return UpdateTagTemplateRequestMultiError(errors) + } + + return nil +} + +// UpdateTagTemplateRequestMultiError is an error wrapping multiple validation +// errors returned by UpdateTagTemplateRequest.ValidateAll() if the designated +// constraints aren't met. +type UpdateTagTemplateRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateTagTemplateRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateTagTemplateRequestMultiError) AllErrors() []error { return m } + +// UpdateTagTemplateRequestValidationError is the validation error returned by +// UpdateTagTemplateRequest.Validate if the designated constraints aren't met. +type UpdateTagTemplateRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e UpdateTagTemplateRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e UpdateTagTemplateRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e UpdateTagTemplateRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e UpdateTagTemplateRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e UpdateTagTemplateRequestValidationError) ErrorName() string { + return "UpdateTagTemplateRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e UpdateTagTemplateRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sUpdateTagTemplateRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = UpdateTagTemplateRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = UpdateTagTemplateRequestValidationError{} + +// Validate checks the field values on UpdateTagTemplateResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *UpdateTagTemplateResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateTagTemplateResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateTagTemplateResponseMultiError, or nil if none found. +func (m *UpdateTagTemplateResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateTagTemplateResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateTagTemplateResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateTagTemplateResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UpdateTagTemplateResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(errors) > 0 { + return UpdateTagTemplateResponseMultiError(errors) + } + + return nil +} + +// UpdateTagTemplateResponseMultiError is an error wrapping multiple validation +// errors returned by UpdateTagTemplateResponse.ValidateAll() if the +// designated constraints aren't met. +type UpdateTagTemplateResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateTagTemplateResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateTagTemplateResponseMultiError) AllErrors() []error { return m } + +// UpdateTagTemplateResponseValidationError is the validation error returned by +// UpdateTagTemplateResponse.Validate if the designated constraints aren't met. +type UpdateTagTemplateResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e UpdateTagTemplateResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e UpdateTagTemplateResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e UpdateTagTemplateResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e UpdateTagTemplateResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e UpdateTagTemplateResponseValidationError) ErrorName() string { + return "UpdateTagTemplateResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e UpdateTagTemplateResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sUpdateTagTemplateResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = UpdateTagTemplateResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = UpdateTagTemplateResponseValidationError{} + +// Validate checks the field values on DeleteTagTemplateRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *DeleteTagTemplateRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteTagTemplateRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteTagTemplateRequestMultiError, or nil if none found. +func (m *DeleteTagTemplateRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteTagTemplateRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for TemplateUrn + + if len(errors) > 0 { + return DeleteTagTemplateRequestMultiError(errors) + } + + return nil +} + +// DeleteTagTemplateRequestMultiError is an error wrapping multiple validation +// errors returned by DeleteTagTemplateRequest.ValidateAll() if the designated +// constraints aren't met. +type DeleteTagTemplateRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteTagTemplateRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteTagTemplateRequestMultiError) AllErrors() []error { return m } + +// DeleteTagTemplateRequestValidationError is the validation error returned by +// DeleteTagTemplateRequest.Validate if the designated constraints aren't met. +type DeleteTagTemplateRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DeleteTagTemplateRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DeleteTagTemplateRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DeleteTagTemplateRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DeleteTagTemplateRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DeleteTagTemplateRequestValidationError) ErrorName() string { + return "DeleteTagTemplateRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e DeleteTagTemplateRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sDeleteTagTemplateRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DeleteTagTemplateRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DeleteTagTemplateRequestValidationError{} + +// Validate checks the field values on DeleteTagTemplateResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *DeleteTagTemplateResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteTagTemplateResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteTagTemplateResponseMultiError, or nil if none found. +func (m *DeleteTagTemplateResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteTagTemplateResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if len(errors) > 0 { + return DeleteTagTemplateResponseMultiError(errors) + } + + return nil +} + +// DeleteTagTemplateResponseMultiError is an error wrapping multiple validation +// errors returned by DeleteTagTemplateResponse.ValidateAll() if the +// designated constraints aren't met. +type DeleteTagTemplateResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteTagTemplateResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteTagTemplateResponseMultiError) AllErrors() []error { return m } + +// DeleteTagTemplateResponseValidationError is the validation error returned by +// DeleteTagTemplateResponse.Validate if the designated constraints aren't met. +type DeleteTagTemplateResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DeleteTagTemplateResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DeleteTagTemplateResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DeleteTagTemplateResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DeleteTagTemplateResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DeleteTagTemplateResponseValidationError) ErrorName() string { + return "DeleteTagTemplateResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e DeleteTagTemplateResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sDeleteTagTemplateResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DeleteTagTemplateResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DeleteTagTemplateResponseValidationError{} + +// Validate checks the field values on User with the rules defined in the proto +// definition for this message. If any rules are violated, the first error +// encountered is returned, or nil if there are no violations. +func (m *User) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on User with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in UserMultiError, or nil if none found. +func (m *User) ValidateAll() error { + return m.validate(true) +} + +func (m *User) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Id + + // no validation rules for Uuid + + // no validation rules for Email + + // no validation rules for Provider + + if all { + switch v := interface{}(m.GetCreatedAt()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UserValidationError{ + field: "CreatedAt", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UserValidationError{ + field: "CreatedAt", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetCreatedAt()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UserValidationError{ + field: "CreatedAt", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if all { + switch v := interface{}(m.GetUpdatedAt()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UserValidationError{ + field: "UpdatedAt", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UserValidationError{ + field: "UpdatedAt", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetUpdatedAt()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UserValidationError{ + field: "UpdatedAt", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(errors) > 0 { + return UserMultiError(errors) + } + + return nil +} + +// UserMultiError is an error wrapping multiple validation errors returned by +// User.ValidateAll() if the designated constraints aren't met. +type UserMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UserMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UserMultiError) AllErrors() []error { return m } + +// UserValidationError is the validation error returned by User.Validate if the +// designated constraints aren't met. +type UserValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e UserValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e UserValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e UserValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e UserValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e UserValidationError) ErrorName() string { return "UserValidationError" } + +// Error satisfies the builtin error interface +func (e UserValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sUser.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = UserValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = UserValidationError{} + +// Validate checks the field values on Changelog with the rules defined in the +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. +func (m *Changelog) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Changelog with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in ChangelogMultiError, or nil +// if none found. +func (m *Changelog) ValidateAll() error { + return m.validate(true) +} + +func (m *Changelog) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + for idx, item := range m.GetChanges() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ChangelogValidationError{ + field: fmt.Sprintf("Changes[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ChangelogValidationError{ + field: fmt.Sprintf("Changes[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChangelogValidationError{ + field: fmt.Sprintf("Changes[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if len(errors) > 0 { + return ChangelogMultiError(errors) + } + + return nil +} + +// ChangelogMultiError is an error wrapping multiple validation errors returned +// by Changelog.ValidateAll() if the designated constraints aren't met. +type ChangelogMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ChangelogMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ChangelogMultiError) AllErrors() []error { return m } + +// ChangelogValidationError is the validation error returned by +// Changelog.Validate if the designated constraints aren't met. +type ChangelogValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ChangelogValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ChangelogValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ChangelogValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ChangelogValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ChangelogValidationError) ErrorName() string { return "ChangelogValidationError" } + +// Error satisfies the builtin error interface +func (e ChangelogValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sChangelog.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ChangelogValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ChangelogValidationError{} + +// Validate checks the field values on Change with the rules defined in the +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. +func (m *Change) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Change with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in ChangeMultiError, or nil if none found. +func (m *Change) ValidateAll() error { + return m.validate(true) +} + +func (m *Change) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Type + + if all { + switch v := interface{}(m.GetFrom()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ChangeValidationError{ + field: "From", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ChangeValidationError{ + field: "From", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetFrom()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChangeValidationError{ + field: "From", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if all { + switch v := interface{}(m.GetTo()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ChangeValidationError{ + field: "To", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ChangeValidationError{ + field: "To", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTo()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChangeValidationError{ + field: "To", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(errors) > 0 { + return ChangeMultiError(errors) + } + + return nil +} + +// ChangeMultiError is an error wrapping multiple validation errors returned by +// Change.ValidateAll() if the designated constraints aren't met. +type ChangeMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ChangeMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ChangeMultiError) AllErrors() []error { return m } + +// ChangeValidationError is the validation error returned by Change.Validate if +// the designated constraints aren't met. +type ChangeValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ChangeValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ChangeValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ChangeValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ChangeValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ChangeValidationError) ErrorName() string { return "ChangeValidationError" } + +// Error satisfies the builtin error interface +func (e ChangeValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sChange.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ChangeValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ChangeValidationError{} + +// Validate checks the field values on Asset with the rules defined in the +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. +func (m *Asset) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Asset with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in AssetMultiError, or nil if none found. +func (m *Asset) ValidateAll() error { + return m.validate(true) +} + +func (m *Asset) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Id + + // no validation rules for Urn + + // no validation rules for Type + + // no validation rules for Service + + // no validation rules for Name + + // no validation rules for Description + + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AssetValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AssetValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AssetValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if all { + switch v := interface{}(m.GetLabels()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AssetValidationError{ + field: "Labels", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AssetValidationError{ + field: "Labels", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetLabels()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AssetValidationError{ + field: "Labels", + reason: "embedded message failed validation", + cause: err, + } + } + } + + for idx, item := range m.GetOwners() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AssetValidationError{ + field: fmt.Sprintf("Owners[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AssetValidationError{ + field: fmt.Sprintf("Owners[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AssetValidationError{ + field: fmt.Sprintf("Owners[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + // no validation rules for Version + + if all { + switch v := interface{}(m.GetUpdatedBy()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AssetValidationError{ + field: "UpdatedBy", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AssetValidationError{ + field: "UpdatedBy", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetUpdatedBy()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AssetValidationError{ + field: "UpdatedBy", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if all { + switch v := interface{}(m.GetChangelog()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AssetValidationError{ + field: "Changelog", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AssetValidationError{ + field: "Changelog", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetChangelog()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AssetValidationError{ + field: "Changelog", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if all { + switch v := interface{}(m.GetCreatedAt()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AssetValidationError{ + field: "CreatedAt", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AssetValidationError{ + field: "CreatedAt", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetCreatedAt()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AssetValidationError{ + field: "CreatedAt", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if all { + switch v := interface{}(m.GetUpdatedAt()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AssetValidationError{ + field: "UpdatedAt", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AssetValidationError{ + field: "UpdatedAt", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetUpdatedAt()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AssetValidationError{ + field: "UpdatedAt", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(errors) > 0 { + return AssetMultiError(errors) + } + + return nil +} + +// AssetMultiError is an error wrapping multiple validation errors returned by +// Asset.ValidateAll() if the designated constraints aren't met. +type AssetMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m AssetMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m AssetMultiError) AllErrors() []error { return m } + +// AssetValidationError is the validation error returned by Asset.Validate if +// the designated constraints aren't met. +type AssetValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e AssetValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e AssetValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e AssetValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e AssetValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e AssetValidationError) ErrorName() string { return "AssetValidationError" } + +// Error satisfies the builtin error interface +func (e AssetValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sAsset.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = AssetValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = AssetValidationError{} + +// Validate checks the field values on Discussion with the rules defined in the +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. +func (m *Discussion) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Discussion with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in DiscussionMultiError, or +// nil if none found. +func (m *Discussion) ValidateAll() error { + return m.validate(true) +} + +func (m *Discussion) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Id + + // no validation rules for Title + + // no validation rules for Body + + // no validation rules for Type + + // no validation rules for State + + if all { + switch v := interface{}(m.GetOwner()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DiscussionValidationError{ + field: "Owner", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DiscussionValidationError{ + field: "Owner", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetOwner()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DiscussionValidationError{ + field: "Owner", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if all { + switch v := interface{}(m.GetCreatedAt()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DiscussionValidationError{ + field: "CreatedAt", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DiscussionValidationError{ + field: "CreatedAt", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetCreatedAt()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DiscussionValidationError{ + field: "CreatedAt", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if all { + switch v := interface{}(m.GetUpdatedAt()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DiscussionValidationError{ + field: "UpdatedAt", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DiscussionValidationError{ + field: "UpdatedAt", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetUpdatedAt()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DiscussionValidationError{ + field: "UpdatedAt", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(errors) > 0 { + return DiscussionMultiError(errors) + } + + return nil +} + +// DiscussionMultiError is an error wrapping multiple validation errors +// returned by Discussion.ValidateAll() if the designated constraints aren't met. +type DiscussionMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DiscussionMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DiscussionMultiError) AllErrors() []error { return m } + +// DiscussionValidationError is the validation error returned by +// Discussion.Validate if the designated constraints aren't met. +type DiscussionValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DiscussionValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DiscussionValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DiscussionValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DiscussionValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DiscussionValidationError) ErrorName() string { return "DiscussionValidationError" } + +// Error satisfies the builtin error interface +func (e DiscussionValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sDiscussion.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DiscussionValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DiscussionValidationError{} + +// Validate checks the field values on Comment with the rules defined in the +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. +func (m *Comment) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Comment with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in CommentMultiError, or nil if none found. +func (m *Comment) ValidateAll() error { + return m.validate(true) +} + +func (m *Comment) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Id + + // no validation rules for DiscussionId + + // no validation rules for Body + + if all { + switch v := interface{}(m.GetOwner()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CommentValidationError{ + field: "Owner", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CommentValidationError{ + field: "Owner", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetOwner()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CommentValidationError{ + field: "Owner", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if all { + switch v := interface{}(m.GetUpdatedBy()).(type) { + case interface{ ValidateAll() error }: if err := v.ValidateAll(); err != nil { - errors = append(errors, AssetValidationError{ + errors = append(errors, CommentValidationError{ + field: "UpdatedBy", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CommentValidationError{ + field: "UpdatedBy", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetUpdatedBy()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CommentValidationError{ + field: "UpdatedBy", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if all { + switch v := interface{}(m.GetCreatedAt()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CommentValidationError{ field: "CreatedAt", reason: "embedded message failed validation", cause: err, @@ -6002,7 +10210,7 @@ func (m *Asset) validate(all bool) error { } case interface{ Validate() error }: if err := v.Validate(); err != nil { - errors = append(errors, AssetValidationError{ + errors = append(errors, CommentValidationError{ field: "CreatedAt", reason: "embedded message failed validation", cause: err, @@ -6011,7 +10219,7 @@ func (m *Asset) validate(all bool) error { } } else if v, ok := interface{}(m.GetCreatedAt()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return AssetValidationError{ + return CommentValidationError{ field: "CreatedAt", reason: "embedded message failed validation", cause: err, @@ -6019,48 +10227,285 @@ func (m *Asset) validate(all bool) error { } } - if all { - switch v := interface{}(m.GetUpdatedAt()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, AssetValidationError{ - field: "UpdatedAt", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, AssetValidationError{ - field: "UpdatedAt", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetUpdatedAt()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return AssetValidationError{ - field: "UpdatedAt", - reason: "embedded message failed validation", - cause: err, - } - } + if all { + switch v := interface{}(m.GetUpdatedAt()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CommentValidationError{ + field: "UpdatedAt", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CommentValidationError{ + field: "UpdatedAt", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetUpdatedAt()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CommentValidationError{ + field: "UpdatedAt", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(errors) > 0 { + return CommentMultiError(errors) + } + + return nil +} + +// CommentMultiError is an error wrapping multiple validation errors returned +// by Comment.ValidateAll() if the designated constraints aren't met. +type CommentMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CommentMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CommentMultiError) AllErrors() []error { return m } + +// CommentValidationError is the validation error returned by Comment.Validate +// if the designated constraints aren't met. +type CommentValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e CommentValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e CommentValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e CommentValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e CommentValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e CommentValidationError) ErrorName() string { return "CommentValidationError" } + +// Error satisfies the builtin error interface +func (e CommentValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sComment.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = CommentValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = CommentValidationError{} + +// Validate checks the field values on LineageEdge with the rules defined in +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. +func (m *LineageEdge) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on LineageEdge with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in LineageEdgeMultiError, or +// nil if none found. +func (m *LineageEdge) ValidateAll() error { + return m.validate(true) +} + +func (m *LineageEdge) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Source + + // no validation rules for Target + + if all { + switch v := interface{}(m.GetProp()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, LineageEdgeValidationError{ + field: "Prop", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, LineageEdgeValidationError{ + field: "Prop", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetProp()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return LineageEdgeValidationError{ + field: "Prop", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(errors) > 0 { + return LineageEdgeMultiError(errors) + } + + return nil +} + +// LineageEdgeMultiError is an error wrapping multiple validation errors +// returned by LineageEdge.ValidateAll() if the designated constraints aren't met. +type LineageEdgeMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m LineageEdgeMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m LineageEdgeMultiError) AllErrors() []error { return m } + +// LineageEdgeValidationError is the validation error returned by +// LineageEdge.Validate if the designated constraints aren't met. +type LineageEdgeValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e LineageEdgeValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e LineageEdgeValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e LineageEdgeValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e LineageEdgeValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e LineageEdgeValidationError) ErrorName() string { return "LineageEdgeValidationError" } + +// Error satisfies the builtin error interface +func (e LineageEdgeValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sLineageEdge.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = LineageEdgeValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = LineageEdgeValidationError{} + +// Validate checks the field values on LineageNode with the rules defined in +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. +func (m *LineageNode) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on LineageNode with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in LineageNodeMultiError, or +// nil if none found. +func (m *LineageNode) ValidateAll() error { + return m.validate(true) +} + +func (m *LineageNode) validate(all bool) error { + if m == nil { + return nil } + var errors []error + + // no validation rules for Urn + + // no validation rules for Type + + // no validation rules for Service + if len(errors) > 0 { - return AssetMultiError(errors) + return LineageNodeMultiError(errors) } return nil } -// AssetMultiError is an error wrapping multiple validation errors returned by -// Asset.ValidateAll() if the designated constraints aren't met. -type AssetMultiError []error +// LineageNodeMultiError is an error wrapping multiple validation errors +// returned by LineageNode.ValidateAll() if the designated constraints aren't met. +type LineageNodeMultiError []error // Error returns a concatenation of all the error messages it wraps. -func (m AssetMultiError) Error() string { +func (m LineageNodeMultiError) Error() string { var msgs []string for _, err := range m { msgs = append(msgs, err.Error()) @@ -6069,11 +10514,11 @@ func (m AssetMultiError) Error() string { } // AllErrors returns a list of validation violation errors. -func (m AssetMultiError) AllErrors() []error { return m } +func (m LineageNodeMultiError) AllErrors() []error { return m } -// AssetValidationError is the validation error returned by Asset.Validate if -// the designated constraints aren't met. -type AssetValidationError struct { +// LineageNodeValidationError is the validation error returned by +// LineageNode.Validate if the designated constraints aren't met. +type LineageNodeValidationError struct { field string reason string cause error @@ -6081,22 +10526,22 @@ type AssetValidationError struct { } // Field function returns field value. -func (e AssetValidationError) Field() string { return e.field } +func (e LineageNodeValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e AssetValidationError) Reason() string { return e.reason } +func (e LineageNodeValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e AssetValidationError) Cause() error { return e.cause } +func (e LineageNodeValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e AssetValidationError) Key() bool { return e.key } +func (e LineageNodeValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e AssetValidationError) ErrorName() string { return "AssetValidationError" } +func (e LineageNodeValidationError) ErrorName() string { return "LineageNodeValidationError" } // Error satisfies the builtin error interface -func (e AssetValidationError) Error() string { +func (e LineageNodeValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -6108,14 +10553,14 @@ func (e AssetValidationError) Error() string { } return fmt.Sprintf( - "invalid %sAsset.%s: %s%s", + "invalid %sLineageNode.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = AssetValidationError{} +var _ error = LineageNodeValidationError{} var _ interface { Field() string @@ -6123,140 +10568,86 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = AssetValidationError{} +} = LineageNodeValidationError{} -// Validate checks the field values on Discussion with the rules defined in the -// proto definition for this message. If any rules are violated, the first -// error encountered is returned, or nil if there are no violations. -func (m *Discussion) Validate() error { +// Validate checks the field values on Tag with the rules defined in the proto +// definition for this message. If any rules are violated, the first error +// encountered is returned, or nil if there are no violations. +func (m *Tag) Validate() error { return m.validate(false) } -// ValidateAll checks the field values on Discussion with the rules defined in -// the proto definition for this message. If any rules are violated, the -// result is a list of violation errors wrapped in DiscussionMultiError, or -// nil if none found. -func (m *Discussion) ValidateAll() error { +// ValidateAll checks the field values on Tag with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in TagMultiError, or nil if none found. +func (m *Tag) ValidateAll() error { return m.validate(true) } -func (m *Discussion) validate(all bool) error { +func (m *Tag) validate(all bool) error { if m == nil { return nil } var errors []error - // no validation rules for Id - - // no validation rules for Title + // no validation rules for RecordType - // no validation rules for Body + // no validation rules for RecordUrn - // no validation rules for Type + // no validation rules for TemplateUrn - // no validation rules for State + for idx, item := range m.GetTagValues() { + _, _ = idx, item - if all { - switch v := interface{}(m.GetOwner()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, DiscussionValidationError{ - field: "Owner", - reason: "embedded message failed validation", - cause: err, - }) + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, TagValidationError{ + field: fmt.Sprintf("TagValues[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, TagValidationError{ + field: fmt.Sprintf("TagValues[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } } - case interface{ Validate() error }: + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - errors = append(errors, DiscussionValidationError{ - field: "Owner", + return TagValidationError{ + field: fmt.Sprintf("TagValues[%v]", idx), reason: "embedded message failed validation", cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetOwner()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return DiscussionValidationError{ - field: "Owner", - reason: "embedded message failed validation", - cause: err, + } } } - } - if all { - switch v := interface{}(m.GetCreatedAt()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, DiscussionValidationError{ - field: "CreatedAt", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, DiscussionValidationError{ - field: "CreatedAt", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetCreatedAt()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return DiscussionValidationError{ - field: "CreatedAt", - reason: "embedded message failed validation", - cause: err, - } - } } - if all { - switch v := interface{}(m.GetUpdatedAt()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, DiscussionValidationError{ - field: "UpdatedAt", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, DiscussionValidationError{ - field: "UpdatedAt", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetUpdatedAt()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return DiscussionValidationError{ - field: "UpdatedAt", - reason: "embedded message failed validation", - cause: err, - } - } - } + // no validation rules for TemplateDisplayName + + // no validation rules for TemplateDescription if len(errors) > 0 { - return DiscussionMultiError(errors) + return TagMultiError(errors) } return nil } -// DiscussionMultiError is an error wrapping multiple validation errors -// returned by Discussion.ValidateAll() if the designated constraints aren't met. -type DiscussionMultiError []error +// TagMultiError is an error wrapping multiple validation errors returned by +// Tag.ValidateAll() if the designated constraints aren't met. +type TagMultiError []error // Error returns a concatenation of all the error messages it wraps. -func (m DiscussionMultiError) Error() string { +func (m TagMultiError) Error() string { var msgs []string for _, err := range m { msgs = append(msgs, err.Error()) @@ -6265,11 +10656,11 @@ func (m DiscussionMultiError) Error() string { } // AllErrors returns a list of validation violation errors. -func (m DiscussionMultiError) AllErrors() []error { return m } +func (m TagMultiError) AllErrors() []error { return m } -// DiscussionValidationError is the validation error returned by -// Discussion.Validate if the designated constraints aren't met. -type DiscussionValidationError struct { +// TagValidationError is the validation error returned by Tag.Validate if the +// designated constraints aren't met. +type TagValidationError struct { field string reason string cause error @@ -6277,22 +10668,22 @@ type DiscussionValidationError struct { } // Field function returns field value. -func (e DiscussionValidationError) Field() string { return e.field } +func (e TagValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e DiscussionValidationError) Reason() string { return e.reason } +func (e TagValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e DiscussionValidationError) Cause() error { return e.cause } +func (e TagValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e DiscussionValidationError) Key() bool { return e.key } +func (e TagValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e DiscussionValidationError) ErrorName() string { return "DiscussionValidationError" } +func (e TagValidationError) ErrorName() string { return "TagValidationError" } // Error satisfies the builtin error interface -func (e DiscussionValidationError) Error() string { +func (e TagValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -6304,14 +10695,14 @@ func (e DiscussionValidationError) Error() string { } return fmt.Sprintf( - "invalid %sDiscussion.%s: %s%s", + "invalid %sTag.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = DiscussionValidationError{} +var _ error = TagValidationError{} var _ interface { Field() string @@ -6319,98 +10710,76 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = DiscussionValidationError{} +} = TagValidationError{} -// Validate checks the field values on Comment with the rules defined in the +// Validate checks the field values on TagValue with the rules defined in the // proto definition for this message. If any rules are violated, the first // error encountered is returned, or nil if there are no violations. -func (m *Comment) Validate() error { +func (m *TagValue) Validate() error { return m.validate(false) } -// ValidateAll checks the field values on Comment with the rules defined in the -// proto definition for this message. If any rules are violated, the result is -// a list of violation errors wrapped in CommentMultiError, or nil if none found. -func (m *Comment) ValidateAll() error { +// ValidateAll checks the field values on TagValue with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in TagValueMultiError, or nil +// if none found. +func (m *TagValue) ValidateAll() error { return m.validate(true) } -func (m *Comment) validate(all bool) error { +func (m *TagValue) validate(all bool) error { if m == nil { return nil } var errors []error - // no validation rules for Id - - // no validation rules for DiscussionId - - // no validation rules for Body + // no validation rules for FieldId if all { - switch v := interface{}(m.GetOwner()).(type) { + switch v := interface{}(m.GetFieldValue()).(type) { case interface{ ValidateAll() error }: if err := v.ValidateAll(); err != nil { - errors = append(errors, CommentValidationError{ - field: "Owner", + errors = append(errors, TagValueValidationError{ + field: "FieldValue", reason: "embedded message failed validation", cause: err, }) } case interface{ Validate() error }: if err := v.Validate(); err != nil { - errors = append(errors, CommentValidationError{ - field: "Owner", + errors = append(errors, TagValueValidationError{ + field: "FieldValue", reason: "embedded message failed validation", cause: err, }) } } - } else if v, ok := interface{}(m.GetOwner()).(interface{ Validate() error }); ok { + } else if v, ok := interface{}(m.GetFieldValue()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return CommentValidationError{ - field: "Owner", + return TagValueValidationError{ + field: "FieldValue", reason: "embedded message failed validation", cause: err, } } } - if all { - switch v := interface{}(m.GetUpdatedBy()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, CommentValidationError{ - field: "UpdatedBy", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, CommentValidationError{ - field: "UpdatedBy", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetUpdatedBy()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return CommentValidationError{ - field: "UpdatedBy", - reason: "embedded message failed validation", - cause: err, - } - } - } + // no validation rules for FieldUrn + + // no validation rules for FieldDisplayName + + // no validation rules for FieldDescription + + // no validation rules for FieldDataType + + // no validation rules for FieldRequired if all { switch v := interface{}(m.GetCreatedAt()).(type) { case interface{ ValidateAll() error }: if err := v.ValidateAll(); err != nil { - errors = append(errors, CommentValidationError{ + errors = append(errors, TagValueValidationError{ field: "CreatedAt", reason: "embedded message failed validation", cause: err, @@ -6418,7 +10787,7 @@ func (m *Comment) validate(all bool) error { } case interface{ Validate() error }: if err := v.Validate(); err != nil { - errors = append(errors, CommentValidationError{ + errors = append(errors, TagValueValidationError{ field: "CreatedAt", reason: "embedded message failed validation", cause: err, @@ -6427,7 +10796,7 @@ func (m *Comment) validate(all bool) error { } } else if v, ok := interface{}(m.GetCreatedAt()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return CommentValidationError{ + return TagValueValidationError{ field: "CreatedAt", reason: "embedded message failed validation", cause: err, @@ -6439,7 +10808,7 @@ func (m *Comment) validate(all bool) error { switch v := interface{}(m.GetUpdatedAt()).(type) { case interface{ ValidateAll() error }: if err := v.ValidateAll(); err != nil { - errors = append(errors, CommentValidationError{ + errors = append(errors, TagValueValidationError{ field: "UpdatedAt", reason: "embedded message failed validation", cause: err, @@ -6447,7 +10816,7 @@ func (m *Comment) validate(all bool) error { } case interface{ Validate() error }: if err := v.Validate(); err != nil { - errors = append(errors, CommentValidationError{ + errors = append(errors, TagValueValidationError{ field: "UpdatedAt", reason: "embedded message failed validation", cause: err, @@ -6456,7 +10825,7 @@ func (m *Comment) validate(all bool) error { } } else if v, ok := interface{}(m.GetUpdatedAt()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return CommentValidationError{ + return TagValueValidationError{ field: "UpdatedAt", reason: "embedded message failed validation", cause: err, @@ -6465,18 +10834,18 @@ func (m *Comment) validate(all bool) error { } if len(errors) > 0 { - return CommentMultiError(errors) + return TagValueMultiError(errors) } return nil } -// CommentMultiError is an error wrapping multiple validation errors returned -// by Comment.ValidateAll() if the designated constraints aren't met. -type CommentMultiError []error +// TagValueMultiError is an error wrapping multiple validation errors returned +// by TagValue.ValidateAll() if the designated constraints aren't met. +type TagValueMultiError []error // Error returns a concatenation of all the error messages it wraps. -func (m CommentMultiError) Error() string { +func (m TagValueMultiError) Error() string { var msgs []string for _, err := range m { msgs = append(msgs, err.Error()) @@ -6485,11 +10854,11 @@ func (m CommentMultiError) Error() string { } // AllErrors returns a list of validation violation errors. -func (m CommentMultiError) AllErrors() []error { return m } +func (m TagValueMultiError) AllErrors() []error { return m } -// CommentValidationError is the validation error returned by Comment.Validate -// if the designated constraints aren't met. -type CommentValidationError struct { +// TagValueValidationError is the validation error returned by +// TagValue.Validate if the designated constraints aren't met. +type TagValueValidationError struct { field string reason string cause error @@ -6497,22 +10866,22 @@ type CommentValidationError struct { } // Field function returns field value. -func (e CommentValidationError) Field() string { return e.field } +func (e TagValueValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e CommentValidationError) Reason() string { return e.reason } +func (e TagValueValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e CommentValidationError) Cause() error { return e.cause } +func (e TagValueValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e CommentValidationError) Key() bool { return e.key } +func (e TagValueValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e CommentValidationError) ErrorName() string { return "CommentValidationError" } +func (e TagValueValidationError) ErrorName() string { return "TagValueValidationError" } // Error satisfies the builtin error interface -func (e CommentValidationError) Error() string { +func (e TagValueValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -6524,14 +10893,14 @@ func (e CommentValidationError) Error() string { } return fmt.Sprintf( - "invalid %sComment.%s: %s%s", + "invalid %sTagValue.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = CommentValidationError{} +var _ error = TagValueValidationError{} var _ interface { Field() string @@ -6539,57 +10908,122 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = CommentValidationError{} +} = TagValueValidationError{} -// Validate checks the field values on LineageEdge with the rules defined in +// Validate checks the field values on TagTemplate with the rules defined in // the proto definition for this message. If any rules are violated, the first // error encountered is returned, or nil if there are no violations. -func (m *LineageEdge) Validate() error { +func (m *TagTemplate) Validate() error { return m.validate(false) } -// ValidateAll checks the field values on LineageEdge with the rules defined in +// ValidateAll checks the field values on TagTemplate with the rules defined in // the proto definition for this message. If any rules are violated, the -// result is a list of violation errors wrapped in LineageEdgeMultiError, or +// result is a list of violation errors wrapped in TagTemplateMultiError, or // nil if none found. -func (m *LineageEdge) ValidateAll() error { +func (m *TagTemplate) ValidateAll() error { return m.validate(true) } -func (m *LineageEdge) validate(all bool) error { +func (m *TagTemplate) validate(all bool) error { if m == nil { return nil } var errors []error - // no validation rules for Source + // no validation rules for Urn - // no validation rules for Target + // no validation rules for DisplayName + + // no validation rules for Description + + for idx, item := range m.GetFields() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, TagTemplateValidationError{ + field: fmt.Sprintf("Fields[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, TagTemplateValidationError{ + field: fmt.Sprintf("Fields[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TagTemplateValidationError{ + field: fmt.Sprintf("Fields[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } if all { - switch v := interface{}(m.GetProp()).(type) { + switch v := interface{}(m.GetCreatedAt()).(type) { case interface{ ValidateAll() error }: if err := v.ValidateAll(); err != nil { - errors = append(errors, LineageEdgeValidationError{ - field: "Prop", + errors = append(errors, TagTemplateValidationError{ + field: "CreatedAt", reason: "embedded message failed validation", cause: err, }) } case interface{ Validate() error }: if err := v.Validate(); err != nil { - errors = append(errors, LineageEdgeValidationError{ - field: "Prop", + errors = append(errors, TagTemplateValidationError{ + field: "CreatedAt", reason: "embedded message failed validation", cause: err, }) } } - } else if v, ok := interface{}(m.GetProp()).(interface{ Validate() error }); ok { + } else if v, ok := interface{}(m.GetCreatedAt()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return LineageEdgeValidationError{ - field: "Prop", + return TagTemplateValidationError{ + field: "CreatedAt", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if all { + switch v := interface{}(m.GetUpdatedAt()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, TagTemplateValidationError{ + field: "UpdatedAt", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, TagTemplateValidationError{ + field: "UpdatedAt", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetUpdatedAt()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TagTemplateValidationError{ + field: "UpdatedAt", reason: "embedded message failed validation", cause: err, } @@ -6597,18 +11031,18 @@ func (m *LineageEdge) validate(all bool) error { } if len(errors) > 0 { - return LineageEdgeMultiError(errors) + return TagTemplateMultiError(errors) } return nil } -// LineageEdgeMultiError is an error wrapping multiple validation errors -// returned by LineageEdge.ValidateAll() if the designated constraints aren't met. -type LineageEdgeMultiError []error +// TagTemplateMultiError is an error wrapping multiple validation errors +// returned by TagTemplate.ValidateAll() if the designated constraints aren't met. +type TagTemplateMultiError []error // Error returns a concatenation of all the error messages it wraps. -func (m LineageEdgeMultiError) Error() string { +func (m TagTemplateMultiError) Error() string { var msgs []string for _, err := range m { msgs = append(msgs, err.Error()) @@ -6617,11 +11051,11 @@ func (m LineageEdgeMultiError) Error() string { } // AllErrors returns a list of validation violation errors. -func (m LineageEdgeMultiError) AllErrors() []error { return m } +func (m TagTemplateMultiError) AllErrors() []error { return m } -// LineageEdgeValidationError is the validation error returned by -// LineageEdge.Validate if the designated constraints aren't met. -type LineageEdgeValidationError struct { +// TagTemplateValidationError is the validation error returned by +// TagTemplate.Validate if the designated constraints aren't met. +type TagTemplateValidationError struct { field string reason string cause error @@ -6629,22 +11063,22 @@ type LineageEdgeValidationError struct { } // Field function returns field value. -func (e LineageEdgeValidationError) Field() string { return e.field } +func (e TagTemplateValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e LineageEdgeValidationError) Reason() string { return e.reason } +func (e TagTemplateValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e LineageEdgeValidationError) Cause() error { return e.cause } +func (e TagTemplateValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e LineageEdgeValidationError) Key() bool { return e.key } +func (e TagTemplateValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e LineageEdgeValidationError) ErrorName() string { return "LineageEdgeValidationError" } +func (e TagTemplateValidationError) ErrorName() string { return "TagTemplateValidationError" } // Error satisfies the builtin error interface -func (e LineageEdgeValidationError) Error() string { +func (e TagTemplateValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -6656,14 +11090,14 @@ func (e LineageEdgeValidationError) Error() string { } return fmt.Sprintf( - "invalid %sLineageEdge.%s: %s%s", + "invalid %sTagTemplate.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = LineageEdgeValidationError{} +var _ error = TagTemplateValidationError{} var _ interface { Field() string @@ -6671,49 +11105,114 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = LineageEdgeValidationError{} +} = TagTemplateValidationError{} -// Validate checks the field values on LineageNode with the rules defined in -// the proto definition for this message. If any rules are violated, the first -// error encountered is returned, or nil if there are no violations. -func (m *LineageNode) Validate() error { +// Validate checks the field values on TagTemplateField with the rules defined +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. +func (m *TagTemplateField) Validate() error { return m.validate(false) } -// ValidateAll checks the field values on LineageNode with the rules defined in -// the proto definition for this message. If any rules are violated, the -// result is a list of violation errors wrapped in LineageNodeMultiError, or -// nil if none found. -func (m *LineageNode) ValidateAll() error { +// ValidateAll checks the field values on TagTemplateField with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// TagTemplateFieldMultiError, or nil if none found. +func (m *TagTemplateField) ValidateAll() error { return m.validate(true) } -func (m *LineageNode) validate(all bool) error { +func (m *TagTemplateField) validate(all bool) error { if m == nil { return nil } var errors []error + // no validation rules for Id + // no validation rules for Urn - // no validation rules for Type + // no validation rules for DisplayName - // no validation rules for Service + // no validation rules for Description + + // no validation rules for DataType + + // no validation rules for Required + + if all { + switch v := interface{}(m.GetCreatedAt()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, TagTemplateFieldValidationError{ + field: "CreatedAt", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, TagTemplateFieldValidationError{ + field: "CreatedAt", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetCreatedAt()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TagTemplateFieldValidationError{ + field: "CreatedAt", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if all { + switch v := interface{}(m.GetUpdatedAt()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, TagTemplateFieldValidationError{ + field: "UpdatedAt", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, TagTemplateFieldValidationError{ + field: "UpdatedAt", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetUpdatedAt()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TagTemplateFieldValidationError{ + field: "UpdatedAt", + reason: "embedded message failed validation", + cause: err, + } + } + } if len(errors) > 0 { - return LineageNodeMultiError(errors) + return TagTemplateFieldMultiError(errors) } return nil } -// LineageNodeMultiError is an error wrapping multiple validation errors -// returned by LineageNode.ValidateAll() if the designated constraints aren't met. -type LineageNodeMultiError []error +// TagTemplateFieldMultiError is an error wrapping multiple validation errors +// returned by TagTemplateField.ValidateAll() if the designated constraints +// aren't met. +type TagTemplateFieldMultiError []error // Error returns a concatenation of all the error messages it wraps. -func (m LineageNodeMultiError) Error() string { +func (m TagTemplateFieldMultiError) Error() string { var msgs []string for _, err := range m { msgs = append(msgs, err.Error()) @@ -6722,11 +11221,11 @@ func (m LineageNodeMultiError) Error() string { } // AllErrors returns a list of validation violation errors. -func (m LineageNodeMultiError) AllErrors() []error { return m } +func (m TagTemplateFieldMultiError) AllErrors() []error { return m } -// LineageNodeValidationError is the validation error returned by -// LineageNode.Validate if the designated constraints aren't met. -type LineageNodeValidationError struct { +// TagTemplateFieldValidationError is the validation error returned by +// TagTemplateField.Validate if the designated constraints aren't met. +type TagTemplateFieldValidationError struct { field string reason string cause error @@ -6734,22 +11233,22 @@ type LineageNodeValidationError struct { } // Field function returns field value. -func (e LineageNodeValidationError) Field() string { return e.field } +func (e TagTemplateFieldValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e LineageNodeValidationError) Reason() string { return e.reason } +func (e TagTemplateFieldValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e LineageNodeValidationError) Cause() error { return e.cause } +func (e TagTemplateFieldValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e LineageNodeValidationError) Key() bool { return e.key } +func (e TagTemplateFieldValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e LineageNodeValidationError) ErrorName() string { return "LineageNodeValidationError" } +func (e TagTemplateFieldValidationError) ErrorName() string { return "TagTemplateFieldValidationError" } // Error satisfies the builtin error interface -func (e LineageNodeValidationError) Error() string { +func (e TagTemplateFieldValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -6761,14 +11260,14 @@ func (e LineageNodeValidationError) Error() string { } return fmt.Sprintf( - "invalid %sLineageNode.%s: %s%s", + "invalid %sTagTemplateField.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = LineageNodeValidationError{} +var _ error = TagTemplateFieldValidationError{} var _ interface { Field() string @@ -6776,7 +11275,7 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = LineageNodeValidationError{} +} = TagTemplateFieldValidationError{} // Validate checks the field values on UpsertAssetRequest_BaseAsset with the // rules defined in the proto definition for this message. If any rules are diff --git a/api/proto/odpf/compass/v1beta1/service_grpc.pb.go b/api/proto/odpf/compass/v1beta1/service_grpc.pb.go index 39e3e0e0..e517228d 100644 --- a/api/proto/odpf/compass/v1beta1/service_grpc.pb.go +++ b/api/proto/odpf/compass/v1beta1/service_grpc.pb.go @@ -32,6 +32,7 @@ type CompassServiceClient interface { GetComment(ctx context.Context, in *GetCommentRequest, opts ...grpc.CallOption) (*GetCommentResponse, error) UpdateComment(ctx context.Context, in *UpdateCommentRequest, opts ...grpc.CallOption) (*UpdateCommentResponse, error) DeleteComment(ctx context.Context, in *DeleteCommentRequest, opts ...grpc.CallOption) (*DeleteCommentResponse, error) + // Domain: Asset SearchAssets(ctx context.Context, in *SearchAssetsRequest, opts ...grpc.CallOption) (*SearchAssetsResponse, error) SuggestAssets(ctx context.Context, in *SuggestAssetsRequest, opts ...grpc.CallOption) (*SuggestAssetsResponse, error) GetGraph(ctx context.Context, in *GetGraphRequest, opts ...grpc.CallOption) (*GetGraphResponse, error) @@ -43,6 +44,24 @@ type CompassServiceClient interface { GetAssetStargazers(ctx context.Context, in *GetAssetStargazersRequest, opts ...grpc.CallOption) (*GetAssetStargazersResponse, error) GetAssetVersionHistory(ctx context.Context, in *GetAssetVersionHistoryRequest, opts ...grpc.CallOption) (*GetAssetVersionHistoryResponse, error) GetAssetByVersion(ctx context.Context, in *GetAssetByVersionRequest, opts ...grpc.CallOption) (*GetAssetByVersionResponse, error) + // Domain: User * Star + GetUserStarredAssets(ctx context.Context, in *GetUserStarredAssetsRequest, opts ...grpc.CallOption) (*GetUserStarredAssetsResponse, error) + GetMyStarredAssets(ctx context.Context, in *GetMyStarredAssetsRequest, opts ...grpc.CallOption) (*GetMyStarredAssetsResponse, error) + GetMyStarredAsset(ctx context.Context, in *GetMyStarredAssetRequest, opts ...grpc.CallOption) (*GetMyStarredAssetResponse, error) + StarAsset(ctx context.Context, in *StarAssetRequest, opts ...grpc.CallOption) (*StarAssetResponse, error) + UnstarAsset(ctx context.Context, in *UnstarAssetRequest, opts ...grpc.CallOption) (*UnstarAssetResponse, error) + GetMyDiscussions(ctx context.Context, in *GetMyDiscussionsRequest, opts ...grpc.CallOption) (*GetMyDiscussionsResponse, error) + // Domain: Tag Templates + CreateTag(ctx context.Context, in *CreateTagRequest, opts ...grpc.CallOption) (*CreateTagResponse, error) + GetTagsByRecordAndTemplate(ctx context.Context, in *GetTagsByRecordAndTemplateRequest, opts ...grpc.CallOption) (*GetTagsByRecordAndTemplateResponse, error) + UpdateTag(ctx context.Context, in *UpdateTagRequest, opts ...grpc.CallOption) (*UpdateTagResponse, error) + DeleteTag(ctx context.Context, in *DeleteTagRequest, opts ...grpc.CallOption) (*DeleteTagResponse, error) + GetTagsByRecord(ctx context.Context, in *GetTagsByRecordRequest, opts ...grpc.CallOption) (*GetTagsByRecordResponse, error) + GetAllTagTemplates(ctx context.Context, in *GetAllTagTemplatesRequest, opts ...grpc.CallOption) (*GetAllTagTemplatesResponse, error) + CreateTagTemplate(ctx context.Context, in *CreateTagTemplateRequest, opts ...grpc.CallOption) (*CreateTagTemplateResponse, error) + GetTagTemplate(ctx context.Context, in *GetTagTemplateRequest, opts ...grpc.CallOption) (*GetTagTemplateResponse, error) + UpdateTagTemplate(ctx context.Context, in *UpdateTagTemplateRequest, opts ...grpc.CallOption) (*UpdateTagTemplateResponse, error) + DeleteTagTemplate(ctx context.Context, in *DeleteTagTemplateRequest, opts ...grpc.CallOption) (*DeleteTagTemplateResponse, error) } type compassServiceClient struct { @@ -233,6 +252,150 @@ func (c *compassServiceClient) GetAssetByVersion(ctx context.Context, in *GetAss return out, nil } +func (c *compassServiceClient) GetUserStarredAssets(ctx context.Context, in *GetUserStarredAssetsRequest, opts ...grpc.CallOption) (*GetUserStarredAssetsResponse, error) { + out := new(GetUserStarredAssetsResponse) + err := c.cc.Invoke(ctx, "/odpf.compass.v1beta1.CompassService/GetUserStarredAssets", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *compassServiceClient) GetMyStarredAssets(ctx context.Context, in *GetMyStarredAssetsRequest, opts ...grpc.CallOption) (*GetMyStarredAssetsResponse, error) { + out := new(GetMyStarredAssetsResponse) + err := c.cc.Invoke(ctx, "/odpf.compass.v1beta1.CompassService/GetMyStarredAssets", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *compassServiceClient) GetMyStarredAsset(ctx context.Context, in *GetMyStarredAssetRequest, opts ...grpc.CallOption) (*GetMyStarredAssetResponse, error) { + out := new(GetMyStarredAssetResponse) + err := c.cc.Invoke(ctx, "/odpf.compass.v1beta1.CompassService/GetMyStarredAsset", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *compassServiceClient) StarAsset(ctx context.Context, in *StarAssetRequest, opts ...grpc.CallOption) (*StarAssetResponse, error) { + out := new(StarAssetResponse) + err := c.cc.Invoke(ctx, "/odpf.compass.v1beta1.CompassService/StarAsset", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *compassServiceClient) UnstarAsset(ctx context.Context, in *UnstarAssetRequest, opts ...grpc.CallOption) (*UnstarAssetResponse, error) { + out := new(UnstarAssetResponse) + err := c.cc.Invoke(ctx, "/odpf.compass.v1beta1.CompassService/UnstarAsset", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *compassServiceClient) GetMyDiscussions(ctx context.Context, in *GetMyDiscussionsRequest, opts ...grpc.CallOption) (*GetMyDiscussionsResponse, error) { + out := new(GetMyDiscussionsResponse) + err := c.cc.Invoke(ctx, "/odpf.compass.v1beta1.CompassService/GetMyDiscussions", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *compassServiceClient) CreateTag(ctx context.Context, in *CreateTagRequest, opts ...grpc.CallOption) (*CreateTagResponse, error) { + out := new(CreateTagResponse) + err := c.cc.Invoke(ctx, "/odpf.compass.v1beta1.CompassService/CreateTag", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *compassServiceClient) GetTagsByRecordAndTemplate(ctx context.Context, in *GetTagsByRecordAndTemplateRequest, opts ...grpc.CallOption) (*GetTagsByRecordAndTemplateResponse, error) { + out := new(GetTagsByRecordAndTemplateResponse) + err := c.cc.Invoke(ctx, "/odpf.compass.v1beta1.CompassService/GetTagsByRecordAndTemplate", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *compassServiceClient) UpdateTag(ctx context.Context, in *UpdateTagRequest, opts ...grpc.CallOption) (*UpdateTagResponse, error) { + out := new(UpdateTagResponse) + err := c.cc.Invoke(ctx, "/odpf.compass.v1beta1.CompassService/UpdateTag", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *compassServiceClient) DeleteTag(ctx context.Context, in *DeleteTagRequest, opts ...grpc.CallOption) (*DeleteTagResponse, error) { + out := new(DeleteTagResponse) + err := c.cc.Invoke(ctx, "/odpf.compass.v1beta1.CompassService/DeleteTag", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *compassServiceClient) GetTagsByRecord(ctx context.Context, in *GetTagsByRecordRequest, opts ...grpc.CallOption) (*GetTagsByRecordResponse, error) { + out := new(GetTagsByRecordResponse) + err := c.cc.Invoke(ctx, "/odpf.compass.v1beta1.CompassService/GetTagsByRecord", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *compassServiceClient) GetAllTagTemplates(ctx context.Context, in *GetAllTagTemplatesRequest, opts ...grpc.CallOption) (*GetAllTagTemplatesResponse, error) { + out := new(GetAllTagTemplatesResponse) + err := c.cc.Invoke(ctx, "/odpf.compass.v1beta1.CompassService/GetAllTagTemplates", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *compassServiceClient) CreateTagTemplate(ctx context.Context, in *CreateTagTemplateRequest, opts ...grpc.CallOption) (*CreateTagTemplateResponse, error) { + out := new(CreateTagTemplateResponse) + err := c.cc.Invoke(ctx, "/odpf.compass.v1beta1.CompassService/CreateTagTemplate", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *compassServiceClient) GetTagTemplate(ctx context.Context, in *GetTagTemplateRequest, opts ...grpc.CallOption) (*GetTagTemplateResponse, error) { + out := new(GetTagTemplateResponse) + err := c.cc.Invoke(ctx, "/odpf.compass.v1beta1.CompassService/GetTagTemplate", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *compassServiceClient) UpdateTagTemplate(ctx context.Context, in *UpdateTagTemplateRequest, opts ...grpc.CallOption) (*UpdateTagTemplateResponse, error) { + out := new(UpdateTagTemplateResponse) + err := c.cc.Invoke(ctx, "/odpf.compass.v1beta1.CompassService/UpdateTagTemplate", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *compassServiceClient) DeleteTagTemplate(ctx context.Context, in *DeleteTagTemplateRequest, opts ...grpc.CallOption) (*DeleteTagTemplateResponse, error) { + out := new(DeleteTagTemplateResponse) + err := c.cc.Invoke(ctx, "/odpf.compass.v1beta1.CompassService/DeleteTagTemplate", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // CompassServiceServer is the server API for CompassService service. // All implementations must embed UnimplementedCompassServiceServer // for forward compatibility @@ -247,6 +410,7 @@ type CompassServiceServer interface { GetComment(context.Context, *GetCommentRequest) (*GetCommentResponse, error) UpdateComment(context.Context, *UpdateCommentRequest) (*UpdateCommentResponse, error) DeleteComment(context.Context, *DeleteCommentRequest) (*DeleteCommentResponse, error) + // Domain: Asset SearchAssets(context.Context, *SearchAssetsRequest) (*SearchAssetsResponse, error) SuggestAssets(context.Context, *SuggestAssetsRequest) (*SuggestAssetsResponse, error) GetGraph(context.Context, *GetGraphRequest) (*GetGraphResponse, error) @@ -258,6 +422,24 @@ type CompassServiceServer interface { GetAssetStargazers(context.Context, *GetAssetStargazersRequest) (*GetAssetStargazersResponse, error) GetAssetVersionHistory(context.Context, *GetAssetVersionHistoryRequest) (*GetAssetVersionHistoryResponse, error) GetAssetByVersion(context.Context, *GetAssetByVersionRequest) (*GetAssetByVersionResponse, error) + // Domain: User * Star + GetUserStarredAssets(context.Context, *GetUserStarredAssetsRequest) (*GetUserStarredAssetsResponse, error) + GetMyStarredAssets(context.Context, *GetMyStarredAssetsRequest) (*GetMyStarredAssetsResponse, error) + GetMyStarredAsset(context.Context, *GetMyStarredAssetRequest) (*GetMyStarredAssetResponse, error) + StarAsset(context.Context, *StarAssetRequest) (*StarAssetResponse, error) + UnstarAsset(context.Context, *UnstarAssetRequest) (*UnstarAssetResponse, error) + GetMyDiscussions(context.Context, *GetMyDiscussionsRequest) (*GetMyDiscussionsResponse, error) + // Domain: Tag Templates + CreateTag(context.Context, *CreateTagRequest) (*CreateTagResponse, error) + GetTagsByRecordAndTemplate(context.Context, *GetTagsByRecordAndTemplateRequest) (*GetTagsByRecordAndTemplateResponse, error) + UpdateTag(context.Context, *UpdateTagRequest) (*UpdateTagResponse, error) + DeleteTag(context.Context, *DeleteTagRequest) (*DeleteTagResponse, error) + GetTagsByRecord(context.Context, *GetTagsByRecordRequest) (*GetTagsByRecordResponse, error) + GetAllTagTemplates(context.Context, *GetAllTagTemplatesRequest) (*GetAllTagTemplatesResponse, error) + CreateTagTemplate(context.Context, *CreateTagTemplateRequest) (*CreateTagTemplateResponse, error) + GetTagTemplate(context.Context, *GetTagTemplateRequest) (*GetTagTemplateResponse, error) + UpdateTagTemplate(context.Context, *UpdateTagTemplateRequest) (*UpdateTagTemplateResponse, error) + DeleteTagTemplate(context.Context, *DeleteTagTemplateRequest) (*DeleteTagTemplateResponse, error) mustEmbedUnimplementedCompassServiceServer() } @@ -325,6 +507,54 @@ func (UnimplementedCompassServiceServer) GetAssetVersionHistory(context.Context, func (UnimplementedCompassServiceServer) GetAssetByVersion(context.Context, *GetAssetByVersionRequest) (*GetAssetByVersionResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetAssetByVersion not implemented") } +func (UnimplementedCompassServiceServer) GetUserStarredAssets(context.Context, *GetUserStarredAssetsRequest) (*GetUserStarredAssetsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetUserStarredAssets not implemented") +} +func (UnimplementedCompassServiceServer) GetMyStarredAssets(context.Context, *GetMyStarredAssetsRequest) (*GetMyStarredAssetsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetMyStarredAssets not implemented") +} +func (UnimplementedCompassServiceServer) GetMyStarredAsset(context.Context, *GetMyStarredAssetRequest) (*GetMyStarredAssetResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetMyStarredAsset not implemented") +} +func (UnimplementedCompassServiceServer) StarAsset(context.Context, *StarAssetRequest) (*StarAssetResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method StarAsset not implemented") +} +func (UnimplementedCompassServiceServer) UnstarAsset(context.Context, *UnstarAssetRequest) (*UnstarAssetResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UnstarAsset not implemented") +} +func (UnimplementedCompassServiceServer) GetMyDiscussions(context.Context, *GetMyDiscussionsRequest) (*GetMyDiscussionsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetMyDiscussions not implemented") +} +func (UnimplementedCompassServiceServer) CreateTag(context.Context, *CreateTagRequest) (*CreateTagResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateTag not implemented") +} +func (UnimplementedCompassServiceServer) GetTagsByRecordAndTemplate(context.Context, *GetTagsByRecordAndTemplateRequest) (*GetTagsByRecordAndTemplateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetTagsByRecordAndTemplate not implemented") +} +func (UnimplementedCompassServiceServer) UpdateTag(context.Context, *UpdateTagRequest) (*UpdateTagResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateTag not implemented") +} +func (UnimplementedCompassServiceServer) DeleteTag(context.Context, *DeleteTagRequest) (*DeleteTagResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DeleteTag not implemented") +} +func (UnimplementedCompassServiceServer) GetTagsByRecord(context.Context, *GetTagsByRecordRequest) (*GetTagsByRecordResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetTagsByRecord not implemented") +} +func (UnimplementedCompassServiceServer) GetAllTagTemplates(context.Context, *GetAllTagTemplatesRequest) (*GetAllTagTemplatesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetAllTagTemplates not implemented") +} +func (UnimplementedCompassServiceServer) CreateTagTemplate(context.Context, *CreateTagTemplateRequest) (*CreateTagTemplateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateTagTemplate not implemented") +} +func (UnimplementedCompassServiceServer) GetTagTemplate(context.Context, *GetTagTemplateRequest) (*GetTagTemplateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetTagTemplate not implemented") +} +func (UnimplementedCompassServiceServer) UpdateTagTemplate(context.Context, *UpdateTagTemplateRequest) (*UpdateTagTemplateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateTagTemplate not implemented") +} +func (UnimplementedCompassServiceServer) DeleteTagTemplate(context.Context, *DeleteTagTemplateRequest) (*DeleteTagTemplateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DeleteTagTemplate not implemented") +} func (UnimplementedCompassServiceServer) mustEmbedUnimplementedCompassServiceServer() {} // UnsafeCompassServiceServer may be embedded to opt out of forward compatibility for this service. @@ -698,6 +928,294 @@ func _CompassService_GetAssetByVersion_Handler(srv interface{}, ctx context.Cont return interceptor(ctx, in, info, handler) } +func _CompassService_GetUserStarredAssets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetUserStarredAssetsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CompassServiceServer).GetUserStarredAssets(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/odpf.compass.v1beta1.CompassService/GetUserStarredAssets", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CompassServiceServer).GetUserStarredAssets(ctx, req.(*GetUserStarredAssetsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CompassService_GetMyStarredAssets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetMyStarredAssetsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CompassServiceServer).GetMyStarredAssets(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/odpf.compass.v1beta1.CompassService/GetMyStarredAssets", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CompassServiceServer).GetMyStarredAssets(ctx, req.(*GetMyStarredAssetsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CompassService_GetMyStarredAsset_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetMyStarredAssetRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CompassServiceServer).GetMyStarredAsset(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/odpf.compass.v1beta1.CompassService/GetMyStarredAsset", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CompassServiceServer).GetMyStarredAsset(ctx, req.(*GetMyStarredAssetRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CompassService_StarAsset_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StarAssetRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CompassServiceServer).StarAsset(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/odpf.compass.v1beta1.CompassService/StarAsset", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CompassServiceServer).StarAsset(ctx, req.(*StarAssetRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CompassService_UnstarAsset_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UnstarAssetRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CompassServiceServer).UnstarAsset(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/odpf.compass.v1beta1.CompassService/UnstarAsset", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CompassServiceServer).UnstarAsset(ctx, req.(*UnstarAssetRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CompassService_GetMyDiscussions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetMyDiscussionsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CompassServiceServer).GetMyDiscussions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/odpf.compass.v1beta1.CompassService/GetMyDiscussions", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CompassServiceServer).GetMyDiscussions(ctx, req.(*GetMyDiscussionsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CompassService_CreateTag_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateTagRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CompassServiceServer).CreateTag(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/odpf.compass.v1beta1.CompassService/CreateTag", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CompassServiceServer).CreateTag(ctx, req.(*CreateTagRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CompassService_GetTagsByRecordAndTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetTagsByRecordAndTemplateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CompassServiceServer).GetTagsByRecordAndTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/odpf.compass.v1beta1.CompassService/GetTagsByRecordAndTemplate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CompassServiceServer).GetTagsByRecordAndTemplate(ctx, req.(*GetTagsByRecordAndTemplateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CompassService_UpdateTag_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateTagRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CompassServiceServer).UpdateTag(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/odpf.compass.v1beta1.CompassService/UpdateTag", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CompassServiceServer).UpdateTag(ctx, req.(*UpdateTagRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CompassService_DeleteTag_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteTagRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CompassServiceServer).DeleteTag(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/odpf.compass.v1beta1.CompassService/DeleteTag", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CompassServiceServer).DeleteTag(ctx, req.(*DeleteTagRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CompassService_GetTagsByRecord_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetTagsByRecordRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CompassServiceServer).GetTagsByRecord(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/odpf.compass.v1beta1.CompassService/GetTagsByRecord", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CompassServiceServer).GetTagsByRecord(ctx, req.(*GetTagsByRecordRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CompassService_GetAllTagTemplates_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetAllTagTemplatesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CompassServiceServer).GetAllTagTemplates(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/odpf.compass.v1beta1.CompassService/GetAllTagTemplates", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CompassServiceServer).GetAllTagTemplates(ctx, req.(*GetAllTagTemplatesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CompassService_CreateTagTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateTagTemplateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CompassServiceServer).CreateTagTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/odpf.compass.v1beta1.CompassService/CreateTagTemplate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CompassServiceServer).CreateTagTemplate(ctx, req.(*CreateTagTemplateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CompassService_GetTagTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetTagTemplateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CompassServiceServer).GetTagTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/odpf.compass.v1beta1.CompassService/GetTagTemplate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CompassServiceServer).GetTagTemplate(ctx, req.(*GetTagTemplateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CompassService_UpdateTagTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateTagTemplateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CompassServiceServer).UpdateTagTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/odpf.compass.v1beta1.CompassService/UpdateTagTemplate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CompassServiceServer).UpdateTagTemplate(ctx, req.(*UpdateTagTemplateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CompassService_DeleteTagTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteTagTemplateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CompassServiceServer).DeleteTagTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/odpf.compass.v1beta1.CompassService/DeleteTagTemplate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CompassServiceServer).DeleteTagTemplate(ctx, req.(*DeleteTagTemplateRequest)) + } + return interceptor(ctx, in, info, handler) +} + // CompassService_ServiceDesc is the grpc.ServiceDesc for CompassService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -785,6 +1303,70 @@ var CompassService_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetAssetByVersion", Handler: _CompassService_GetAssetByVersion_Handler, }, + { + MethodName: "GetUserStarredAssets", + Handler: _CompassService_GetUserStarredAssets_Handler, + }, + { + MethodName: "GetMyStarredAssets", + Handler: _CompassService_GetMyStarredAssets_Handler, + }, + { + MethodName: "GetMyStarredAsset", + Handler: _CompassService_GetMyStarredAsset_Handler, + }, + { + MethodName: "StarAsset", + Handler: _CompassService_StarAsset_Handler, + }, + { + MethodName: "UnstarAsset", + Handler: _CompassService_UnstarAsset_Handler, + }, + { + MethodName: "GetMyDiscussions", + Handler: _CompassService_GetMyDiscussions_Handler, + }, + { + MethodName: "CreateTag", + Handler: _CompassService_CreateTag_Handler, + }, + { + MethodName: "GetTagsByRecordAndTemplate", + Handler: _CompassService_GetTagsByRecordAndTemplate_Handler, + }, + { + MethodName: "UpdateTag", + Handler: _CompassService_UpdateTag_Handler, + }, + { + MethodName: "DeleteTag", + Handler: _CompassService_DeleteTag_Handler, + }, + { + MethodName: "GetTagsByRecord", + Handler: _CompassService_GetTagsByRecord_Handler, + }, + { + MethodName: "GetAllTagTemplates", + Handler: _CompassService_GetAllTagTemplates_Handler, + }, + { + MethodName: "CreateTagTemplate", + Handler: _CompassService_CreateTagTemplate_Handler, + }, + { + MethodName: "GetTagTemplate", + Handler: _CompassService_GetTagTemplate_Handler, + }, + { + MethodName: "UpdateTagTemplate", + Handler: _CompassService_UpdateTagTemplate_Handler, + }, + { + MethodName: "DeleteTagTemplate", + Handler: _CompassService_DeleteTagTemplate_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "odpf/compass/v1beta1/service.proto", diff --git a/api/v1beta1/discussion.go b/api/v1beta1/discussion.go index d69fc89c..92dae38e 100644 --- a/api/v1beta1/discussion.go +++ b/api/v1beta1/discussion.go @@ -59,7 +59,7 @@ func (h *Handler) CreateDiscussion(ctx context.Context, req *compassv1beta1.Crea dsc := discussion.Discussion{ Title: req.Title, Body: req.Body, - Type: discussion.GetTypeEnum(req.Type), + Type: discussion.Type(req.Type), State: discussion.GetStateEnum(req.State), Labels: req.GetLabels(), Assets: req.Assets, diff --git a/api/v1beta1/discussion_test.go b/api/v1beta1/discussion_test.go index 4adaa511..aa5190c7 100644 --- a/api/v1beta1/discussion_test.go +++ b/api/v1beta1/discussion_test.go @@ -147,14 +147,13 @@ func TestCreateDiscussion(t *testing.T) { } var testCases = []testCase{ - { - Description: "should return Invalid Argument if empty object", + Description: "should return invalid argument if empty object", Request: &compassv1beta1.CreateDiscussionRequest{}, ExpectStatus: codes.InvalidArgument, }, { - Description: "should return Invalid Argument if empty title", + Description: "should return invalid argument if empty title", Request: &compassv1beta1.CreateDiscussionRequest{ Body: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.", Type: discussion.TypeQAndA.String(), @@ -162,7 +161,7 @@ func TestCreateDiscussion(t *testing.T) { ExpectStatus: codes.InvalidArgument, }, { - Description: "should return Invalid Argument if no body", + Description: "should return invalid argument if no body", Request: &compassv1beta1.CreateDiscussionRequest{ Title: "Lorem Ipsum", Type: discussion.TypeQAndA.String(), @@ -170,7 +169,7 @@ func TestCreateDiscussion(t *testing.T) { ExpectStatus: codes.InvalidArgument, }, { - Description: "should return Invalid Argument if empty body", + Description: "should return invalid argument if empty body", Request: &compassv1beta1.CreateDiscussionRequest{ Title: "Lorem Ipsum", Body: "", @@ -179,16 +178,7 @@ func TestCreateDiscussion(t *testing.T) { ExpectStatus: codes.InvalidArgument, }, { - Description: "should return Invalid Argument if empty type", - Request: &compassv1beta1.CreateDiscussionRequest{ - Title: "Lorem Ipsum", - Body: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.", - Type: "", - }, - ExpectStatus: codes.InvalidArgument, - }, - { - Description: "should return Invalid Argument if wrong type", + Description: "should return invalid argument if wrong type", Request: &compassv1beta1.CreateDiscussionRequest{ Title: "Lorem Ipsum", Body: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.", @@ -204,6 +194,15 @@ func TestCreateDiscussion(t *testing.T) { dr.EXPECT().Create(ctx, mock.AnythingOfType("*discussion.Discussion")).Return("", errors.New("some error")) }, }, + { + Description: "should return invalid argument if empty type", + Request: &compassv1beta1.CreateDiscussionRequest{ + Title: "Lorem Ipsum", + Body: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.", + Type: "", + }, + ExpectStatus: codes.InvalidArgument, + }, { Description: "should return OK and discussion ID if the discussion is successfully created", Request: validRequest, diff --git a/api/v1beta1/tag.go b/api/v1beta1/tag.go new file mode 100644 index 00000000..6b5815d6 --- /dev/null +++ b/api/v1beta1/tag.go @@ -0,0 +1,226 @@ +package v1beta1 + +import ( + "context" + "errors" + "fmt" + + compassv1beta1 "github.com/odpf/columbus/api/proto/odpf/compass/v1beta1" + "github.com/odpf/columbus/tag" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" +) + +var ( + errEmptyRecordURN = errors.New("record urn is empty") + errEmptyRecordType = errors.New("type is empty") + errNilTagService = errors.New("tag service is nil") + errEmptyTemplateURN = errors.New("template urn is empty") +) + +// GetTagsByRecordAndTemplate handles get tag by record requests +func (h *Handler) GetTagsByRecordAndTemplate(ctx context.Context, req *compassv1beta1.GetTagsByRecordAndTemplateRequest) (*compassv1beta1.GetTagsByRecordAndTemplateResponse, error) { + if h.TagService == nil { + return nil, internalServerError(h.Logger, errNilTagService.Error()) + } + + if req.GetType() == "" { + return nil, status.Error(codes.InvalidArgument, errEmptyRecordType.Error()) + } + if req.GetRecordUrn() == "" { + return nil, status.Error(codes.InvalidArgument, errEmptyRecordURN.Error()) + } + if req.GetTemplateUrn() == "" { + return nil, status.Error(codes.InvalidArgument, errEmptyTemplateURN.Error()) + } + + tg, err := h.TagService.FindByRecordAndTemplate(ctx, req.GetType(), req.GetRecordUrn(), req.GetTemplateUrn()) + if errors.As(err, new(tag.NotFoundError)) || errors.As(err, new(tag.TemplateNotFoundError)) { + return nil, status.Error(codes.NotFound, err.Error()) + } + if err != nil { + return nil, internalServerError(h.Logger, fmt.Sprintf("error finding a tag with record and template: %s", err.Error())) + } + + tagPB, err := tg.ToProto() + if err != nil { + return nil, internalServerError(h.Logger, err.Error()) + } + + return &compassv1beta1.GetTagsByRecordAndTemplateResponse{ + Data: tagPB, + }, nil +} + +// CreateTag handles tag creation requests +func (h *Handler) CreateTag(ctx context.Context, req *compassv1beta1.CreateTagRequest) (*compassv1beta1.CreateTagResponse, error) { + if h.TagService == nil { + return nil, internalServerError(h.Logger, errNilTagService.Error()) + } + + if req.GetRecordType() == "" { + return nil, status.Error(codes.InvalidArgument, errEmptyRecordType.Error()) + } + if req.GetRecordUrn() == "" { + return nil, status.Error(codes.InvalidArgument, errEmptyRecordURN.Error()) + } + if req.GetTemplateUrn() == "" { + return nil, status.Error(codes.InvalidArgument, errEmptyTemplateURN.Error()) + } + if req.GetTagValues() == nil { + return nil, status.Error(codes.InvalidArgument, "empty tag values") + } + + var tagValues []tag.TagValue + for _, tvPB := range req.GetTagValues() { + tagValues = append(tagValues, tag.NewTagValueFromProto(tvPB)) + } + + tagDomain := tag.Tag{ + RecordType: req.GetRecordType(), + RecordURN: req.GetRecordUrn(), + TemplateURN: req.GetTemplateUrn(), + TagValues: tagValues, + TemplateDisplayName: req.GetTemplateDisplayName(), + TemplateDescription: req.GetTemplateDescription(), + } + + err := h.TagService.Create(ctx, &tagDomain) + if errors.As(err, new(tag.DuplicateError)) { + return nil, status.Error(codes.AlreadyExists, err.Error()) + + } + if errors.As(err, new(tag.TemplateNotFoundError)) { + return nil, status.Error(codes.NotFound, err.Error()) + } + if errors.As(err, new(tag.ValidationError)) { + return nil, status.Error(codes.InvalidArgument, err.Error()) + } + if err != nil { + return nil, internalServerError(h.Logger, fmt.Sprintf("error creating tag: %s", err.Error())) + + } + + tagPB, err := tagDomain.ToProto() + if err != nil { + return nil, internalServerError(h.Logger, err.Error()) + } + + return &compassv1beta1.CreateTagResponse{ + Data: tagPB, + }, nil +} + +// UpdateTag handles tag update requests +func (h *Handler) UpdateTag(ctx context.Context, req *compassv1beta1.UpdateTagRequest) (*compassv1beta1.UpdateTagResponse, error) { + if h.TagService == nil { + return nil, internalServerError(h.Logger, errNilTagService.Error()) + } + + if req.GetType() == "" { + return nil, status.Error(codes.InvalidArgument, errEmptyRecordType.Error()) + } + if req.GetRecordUrn() == "" { + return nil, status.Error(codes.InvalidArgument, errEmptyRecordURN.Error()) + } + if req.GetTemplateUrn() == "" { + return nil, status.Error(codes.InvalidArgument, errEmptyTemplateURN.Error()) + } + + if req.GetTagValues() == nil { + return nil, status.Error(codes.InvalidArgument, "empty tag values") + } + + var tagValues []tag.TagValue + for _, tvPB := range req.GetTagValues() { + tagValues = append(tagValues, tag.NewTagValueFromProto(tvPB)) + } + + tagDomain := tag.Tag{ + RecordType: req.GetType(), + RecordURN: req.GetRecordUrn(), + TemplateURN: req.GetTemplateUrn(), + TagValues: tagValues, + TemplateDisplayName: req.GetTemplateDisplayName(), + TemplateDescription: req.GetTemplateDescription(), + } + + err := h.TagService.Update(ctx, &tagDomain) + if errors.As(err, new(tag.NotFoundError)) { + return nil, status.Error(codes.NotFound, err.Error()) + } + if errors.As(err, new(tag.ValidationError)) { + return nil, status.Error(codes.InvalidArgument, err.Error()) + } + if err != nil { + return nil, internalServerError(h.Logger, fmt.Sprintf("error updating a template: %s", err.Error())) + } + + tagPB, err := tagDomain.ToProto() + if err != nil { + return nil, internalServerError(h.Logger, err.Error()) + } + + return &compassv1beta1.UpdateTagResponse{ + Data: tagPB, + }, nil +} + +// DeleteTag handles delete tag by record and template requests +func (h *Handler) DeleteTag(ctx context.Context, req *compassv1beta1.DeleteTagRequest) (*compassv1beta1.DeleteTagResponse, error) { + if h.TagService == nil { + return nil, internalServerError(h.Logger, errNilTagService.Error()) + } + + if req.GetType() == "" { + return nil, status.Error(codes.InvalidArgument, errEmptyRecordType.Error()) + } + if req.GetRecordUrn() == "" { + return nil, status.Error(codes.InvalidArgument, errEmptyRecordURN.Error()) + } + if req.GetTemplateUrn() == "" { + return nil, status.Error(codes.InvalidArgument, errEmptyTemplateURN.Error()) + } + + err := h.TagService.Delete(ctx, req.GetType(), req.GetRecordUrn(), req.GetTemplateUrn()) + if errors.As(err, new(tag.TemplateNotFoundError)) { + return nil, status.Error(codes.NotFound, err.Error()) + } + if err != nil { + return nil, internalServerError(h.Logger, fmt.Sprintf("error deleting a template: %s", err.Error())) + } + + return &compassv1beta1.DeleteTagResponse{}, nil +} + +// GetByRecord handles get tag by record requests +func (h *Handler) GetTagsByRecord(ctx context.Context, req *compassv1beta1.GetTagsByRecordRequest) (*compassv1beta1.GetTagsByRecordResponse, error) { + if h.TagService == nil { + return nil, internalServerError(h.Logger, errNilTagService.Error()) + } + + if req.GetType() == "" { + return nil, status.Error(codes.InvalidArgument, errEmptyRecordType.Error()) + } + if req.GetRecordUrn() == "" { + return nil, status.Error(codes.InvalidArgument, errEmptyRecordURN.Error()) + } + + tags, err := h.TagService.GetByRecord(ctx, req.GetType(), req.GetRecordUrn()) + if err != nil { + return nil, internalServerError(h.Logger, fmt.Sprintf("error getting record tags: %s", err.Error())) + } + + var tagsPB []*compassv1beta1.Tag + for _, tg := range tags { + tgPB, err := tg.ToProto() + if err != nil { + return nil, internalServerError(h.Logger, err.Error()) + } + tagsPB = append(tagsPB, tgPB) + } + + return &compassv1beta1.GetTagsByRecordResponse{ + Data: tagsPB, + }, nil +} diff --git a/api/v1beta1/tag_template.go b/api/v1beta1/tag_template.go new file mode 100644 index 00000000..eb5bc6ab --- /dev/null +++ b/api/v1beta1/tag_template.go @@ -0,0 +1,135 @@ +package v1beta1 + +import ( + "context" + "errors" + "fmt" + + compassv1beta1 "github.com/odpf/columbus/api/proto/odpf/compass/v1beta1" + "github.com/odpf/columbus/tag" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" +) + +// GetAllTagTemplates handles template read requests +func (h *Handler) GetAllTagTemplates(ctx context.Context, req *compassv1beta1.GetAllTagTemplatesRequest) (*compassv1beta1.GetAllTagTemplatesResponse, error) { + listOfDomainTemplate, err := h.TagTemplateService.Index(ctx, req.GetUrn()) + if err != nil { + return nil, internalServerError(h.Logger, fmt.Sprintf("error finding templates: %s", err.Error())) + } + + var templatesPB []*compassv1beta1.TagTemplate + for _, template := range listOfDomainTemplate { + templatesPB = append(templatesPB, template.ToProto()) + } + + return &compassv1beta1.GetAllTagTemplatesResponse{ + Data: templatesPB, + }, nil +} + +// CreateTagTemplate handles template creation requests +func (h *Handler) CreateTagTemplate(ctx context.Context, req *compassv1beta1.CreateTagTemplateRequest) (*compassv1beta1.CreateTagTemplateResponse, error) { + + if req.GetUrn() == "" { + return nil, status.Error(codes.InvalidArgument, "empty urn") + } + if req.GetDisplayName() == "" { + return nil, status.Error(codes.InvalidArgument, "empty display name") + } + if req.GetDescription() == "" { + return nil, status.Error(codes.InvalidArgument, "empty description") + } + if req.GetFields() == nil { + return nil, status.Error(codes.InvalidArgument, "empty fields") + } + + var templateFields []tag.Field + for _, fPB := range req.GetFields() { + templateFields = append(templateFields, tag.NewTemplateFieldFromProto(fPB)) + } + + template := tag.Template{ + URN: req.GetUrn(), + DisplayName: req.GetDisplayName(), + Description: req.GetDescription(), + Fields: templateFields, + } + err := h.TagTemplateService.Create(ctx, &template) + if errors.As(err, new(tag.DuplicateTemplateError)) { + return nil, status.Error(codes.AlreadyExists, err.Error()) + } + if err != nil { + return nil, internalServerError(h.Logger, fmt.Sprintf("error creating tag template: %s", err.Error())) + } + + return &compassv1beta1.CreateTagTemplateResponse{ + Data: template.ToProto(), + }, nil +} + +// GetTagTemplate handles template read requests based on URN +func (h *Handler) GetTagTemplate(ctx context.Context, req *compassv1beta1.GetTagTemplateRequest) (*compassv1beta1.GetTagTemplateResponse, error) { + domainTemplate, err := h.TagTemplateService.Find(ctx, req.GetTemplateUrn()) + if errors.As(err, new(tag.TemplateNotFoundError)) { + return nil, status.Error(codes.NotFound, err.Error()) + } + if err != nil { + return nil, internalServerError(h.Logger, fmt.Sprintf("error finding a template: %s", err.Error())) + } + + return &compassv1beta1.GetTagTemplateResponse{ + Data: domainTemplate.ToProto(), + }, nil +} + +func (h *Handler) UpdateTagTemplate(ctx context.Context, req *compassv1beta1.UpdateTagTemplateRequest) (*compassv1beta1.UpdateTagTemplateResponse, error) { + + if req.GetDisplayName() == "" { + return nil, status.Error(codes.InvalidArgument, "empty display name") + } + if req.GetDescription() == "" { + return nil, status.Error(codes.InvalidArgument, "empty description") + } + if req.GetFields() == nil { + return nil, status.Error(codes.InvalidArgument, "empty fields") + } + + var templateFields []tag.Field + for _, fPB := range req.GetFields() { + templateFields = append(templateFields, tag.NewTemplateFieldFromProto(fPB)) + } + + template := tag.Template{ + URN: req.GetTemplateUrn(), + DisplayName: req.GetDisplayName(), + Description: req.GetDescription(), + Fields: templateFields, + } + err := h.TagTemplateService.Update(ctx, req.TemplateUrn, &template) + if errors.As(err, new(tag.TemplateNotFoundError)) { + return nil, status.Error(codes.NotFound, err.Error()) + } + if errors.As(err, new(tag.ValidationError)) { + return nil, status.Error(codes.InvalidArgument, err.Error()) + } + if err != nil { + return nil, internalServerError(h.Logger, fmt.Sprintf("error updating template: %s", err.Error())) + } + + return &compassv1beta1.UpdateTagTemplateResponse{ + Data: template.ToProto(), + }, nil +} + +// DeleteTagTemplate handles template delete request based on URN +func (h *Handler) DeleteTagTemplate(ctx context.Context, req *compassv1beta1.DeleteTagTemplateRequest) (*compassv1beta1.DeleteTagTemplateResponse, error) { + err := h.TagTemplateService.Delete(ctx, req.GetTemplateUrn()) + if errors.As(err, new(tag.TemplateNotFoundError)) { + return nil, status.Error(codes.NotFound, err.Error()) + } + if err != nil { + return nil, internalServerError(h.Logger, fmt.Sprintf("error deleting a template: %s", err.Error())) + } + return &compassv1beta1.DeleteTagTemplateResponse{}, nil +} diff --git a/api/v1beta1/tag_template_test.go b/api/v1beta1/tag_template_test.go new file mode 100644 index 00000000..1983612a --- /dev/null +++ b/api/v1beta1/tag_template_test.go @@ -0,0 +1,487 @@ +package v1beta1_test + +import ( + "context" + "errors" + "fmt" + "testing" + "time" + + "github.com/google/go-cmp/cmp" + "github.com/odpf/columbus/api" + compassv1beta1 "github.com/odpf/columbus/api/proto/odpf/compass/v1beta1" + "github.com/odpf/columbus/lib/mocks" + "github.com/odpf/columbus/tag" + "github.com/odpf/salt/log" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/testing/protocmp" +) + +var sampleTemplate = tag.Template{ + URN: "governance_policy", + DisplayName: "Governance Policy", + Description: "Template that is mandatory to be used.", + Fields: []tag.Field{ + { + ID: 1, + URN: "classification", + DisplayName: "classification", + Description: "The classification of this record", + DataType: "enumerated", + Required: true, + Options: []string{"Public", "Restricted"}, + }, + { + ID: 2, + URN: "is_encrypted", + DisplayName: "Is Encrypted?", + Description: "Specify whether this record is encrypted or not.", + DataType: "boolean", + Required: true, + }, + }, +} + +var sampleTemplatePB = &compassv1beta1.TagTemplate{ + Urn: sampleTemplate.URN, + DisplayName: sampleTemplate.DisplayName, + Description: sampleTemplate.Description, + Fields: []*compassv1beta1.TagTemplateField{ + { + Id: 1, + Urn: "classification", + DisplayName: "classification", + Description: "The classification of this record", + DataType: "enumerated", + Required: true, + Options: []string{"Public", "Restricted"}, + }, + { + Id: 2, + Urn: "is_encrypted", + DisplayName: "Is Encrypted?", + Description: "Specify whether this record is encrypted or not.", + DataType: "boolean", + Required: true, + }, + }, +} + +func TestGetAllTagTemplates(t *testing.T) { + type testCase struct { + Description string + Request *compassv1beta1.GetAllTagTemplatesRequest + ExpectStatus codes.Code + Setup func(context.Context, *mocks.TagRepository, *mocks.TagTemplateRepository) + PostCheck func(resp *compassv1beta1.GetAllTagTemplatesResponse) error + } + + var testCases = []testCase{ + { + Description: `should return internal server error if found unexpected error`, + Request: &compassv1beta1.GetAllTagTemplatesRequest{ + Urn: sampleTemplate.URN, + }, + ExpectStatus: codes.Internal, + Setup: func(ctx context.Context, tr *mocks.TagRepository, ttr *mocks.TagTemplateRepository) { + ttr.EXPECT().Read(ctx, sampleTemplate.URN).Return(nil, errors.New("unexpected error")) + }, + }, + { + Description: `should return ok and templates if found template based on the query`, + Request: &compassv1beta1.GetAllTagTemplatesRequest{ + Urn: sampleTemplate.URN, + }, + ExpectStatus: codes.OK, + Setup: func(ctx context.Context, tr *mocks.TagRepository, ttr *mocks.TagTemplateRepository) { + ttr.EXPECT().Read(ctx, sampleTemplate.URN).Return([]tag.Template{sampleTemplate}, nil) + }, + PostCheck: func(resp *compassv1beta1.GetAllTagTemplatesResponse) error { + expected := &compassv1beta1.GetAllTagTemplatesResponse{ + Data: []*compassv1beta1.TagTemplate{ + sampleTemplatePB, + }, + } + + if diff := cmp.Diff(resp, expected, protocmp.Transform()); diff != "" { + return fmt.Errorf("expected response to be %+v, was %+v", expected, resp) + } + return nil + }, + }, { + Description: `should return all templates if no urn query params`, + Request: &compassv1beta1.GetAllTagTemplatesRequest{}, + ExpectStatus: codes.OK, + Setup: func(ctx context.Context, tr *mocks.TagRepository, ttr *mocks.TagTemplateRepository) { + ttr.EXPECT().ReadAll(ctx).Return([]tag.Template{sampleTemplate}, nil) + }, + PostCheck: func(resp *compassv1beta1.GetAllTagTemplatesResponse) error { + expected := &compassv1beta1.GetAllTagTemplatesResponse{ + Data: []*compassv1beta1.TagTemplate{ + sampleTemplatePB, + }, + } + + if diff := cmp.Diff(resp, expected, protocmp.Transform()); diff != "" { + return fmt.Errorf("expected response to be %+v, was %+v", expected, resp) + } + return nil + }, + }, + } + for _, tc := range testCases { + t.Run(tc.Description, func(t *testing.T) { + ctx := context.Background() + logger := log.NewNoop() + mockTagRepo := new(mocks.TagRepository) + mockTemplateRepo := new(mocks.TagTemplateRepository) + if tc.Setup != nil { + tc.Setup(ctx, mockTagRepo, mockTemplateRepo) + } + defer mockTemplateRepo.AssertExpectations(t) + defer mockTagRepo.AssertExpectations(t) + + templateService := tag.NewTemplateService(mockTemplateRepo) + service := tag.NewService(mockTagRepo, templateService) + handler := api.NewGRPCHandler(logger, &api.Dependencies{ + TagService: service, + TagTemplateService: templateService, + }) + + got, err := handler.GetAllTagTemplates(ctx, tc.Request) + code := status.Code(err) + if code != tc.ExpectStatus { + t.Errorf("expected handler to return Code %s, returned Code %sinstead", tc.ExpectStatus.String(), code.String()) + return + } + if tc.PostCheck != nil { + if err := tc.PostCheck(got); err != nil { + t.Error(err) + return + } + } + }) + } +} + +func TestCreateTagTemplate(t *testing.T) { + validRequest := &compassv1beta1.CreateTagTemplateRequest{ + Urn: sampleTemplatePB.GetUrn(), + DisplayName: sampleTemplatePB.GetDisplayName(), + Description: sampleTemplatePB.GetDescription(), + Fields: sampleTemplatePB.GetFields(), + } + type testCase struct { + Description string + Request *compassv1beta1.CreateTagTemplateRequest + ExpectStatus codes.Code + Setup func(context.Context, *mocks.TagRepository, *mocks.TagTemplateRepository) + PostCheck func(resp *compassv1beta1.CreateTagTemplateResponse) error + } + + var testCases = []testCase{ + { + Description: `should return already exist if duplicate template`, + Request: validRequest, + ExpectStatus: codes.AlreadyExists, + Setup: func(ctx context.Context, tr *mocks.TagRepository, ttr *mocks.TagTemplateRepository) { + ttr.EXPECT().Read(ctx, sampleTemplate.URN).Return(nil, nil) + ttr.EXPECT().Create(ctx, &sampleTemplate).Return(tag.DuplicateTemplateError{URN: sampleTemplate.URN}) + }, + }, + { + Description: `should return internal server error if found error during insert`, + Request: validRequest, + ExpectStatus: codes.Internal, + Setup: func(ctx context.Context, tr *mocks.TagRepository, ttr *mocks.TagTemplateRepository) { + ttr.EXPECT().Read(ctx, sampleTemplate.URN).Return(nil, nil) + ttr.EXPECT().Create(ctx, &sampleTemplate).Return(errors.New("unexpected error during insert")) + }, + }, + { + Description: `should return ok and domain is inserted if found no error`, + Request: validRequest, + ExpectStatus: codes.OK, + Setup: func(ctx context.Context, tr *mocks.TagRepository, ttr *mocks.TagTemplateRepository) { + ttr.EXPECT().Read(ctx, sampleTemplate.URN).Return(nil, nil) + ttr.EXPECT().Create(ctx, &sampleTemplate).Return(nil) + }, + PostCheck: func(resp *compassv1beta1.CreateTagTemplateResponse) error { + expected := &compassv1beta1.CreateTagTemplateResponse{ + Data: sampleTemplatePB, + } + + if diff := cmp.Diff(resp, expected, protocmp.Transform()); diff != "" { + return fmt.Errorf("expected response to be %+v, was %+v", expected, resp) + } + return nil + }, + }, + } + for _, tc := range testCases { + t.Run(tc.Description, func(t *testing.T) { + ctx := context.Background() + logger := log.NewNoop() + mockTagRepo := new(mocks.TagRepository) + mockTemplateRepo := new(mocks.TagTemplateRepository) + if tc.Setup != nil { + tc.Setup(ctx, mockTagRepo, mockTemplateRepo) + } + defer mockTemplateRepo.AssertExpectations(t) + defer mockTagRepo.AssertExpectations(t) + + templateService := tag.NewTemplateService(mockTemplateRepo) + service := tag.NewService(mockTagRepo, templateService) + handler := api.NewGRPCHandler(logger, &api.Dependencies{ + TagService: service, + TagTemplateService: templateService, + }) + + got, err := handler.CreateTagTemplate(ctx, tc.Request) + code := status.Code(err) + if code != tc.ExpectStatus { + t.Errorf("expected handler to return Code %s, returned Code %sinstead", tc.ExpectStatus.String(), code.String()) + return + } + if tc.PostCheck != nil { + if err := tc.PostCheck(got); err != nil { + t.Error(err) + return + } + } + }) + } +} + +func TestGetTagTemplate(t *testing.T) { + validRequest := &compassv1beta1.GetTagTemplateRequest{ + TemplateUrn: sampleTemplatePB.GetUrn(), + } + type testCase struct { + Description string + Request *compassv1beta1.GetTagTemplateRequest + ExpectStatus codes.Code + Setup func(context.Context, *mocks.TagRepository, *mocks.TagTemplateRepository) + PostCheck func(resp *compassv1beta1.GetTagTemplateResponse) error + } + + var testCases = []testCase{ + { + Description: `should returnnot found if template is not found`, + Request: validRequest, + ExpectStatus: codes.NotFound, + Setup: func(ctx context.Context, tr *mocks.TagRepository, ttr *mocks.TagTemplateRepository) { + ttr.EXPECT().Read(ctx, sampleTemplate.URN).Return([]tag.Template{}, nil) + }, + }, + { + Description: `should return ok and template if domain template is found`, + Request: validRequest, + ExpectStatus: codes.OK, + Setup: func(ctx context.Context, tr *mocks.TagRepository, ttr *mocks.TagTemplateRepository) { + ttr.EXPECT().Read(ctx, sampleTemplate.URN).Return([]tag.Template{sampleTemplate}, nil) + }, + PostCheck: func(resp *compassv1beta1.GetTagTemplateResponse) error { + expected := &compassv1beta1.GetTagTemplateResponse{ + Data: sampleTemplatePB, + } + + if diff := cmp.Diff(resp, expected, protocmp.Transform()); diff != "" { + return fmt.Errorf("expected response to be %+v, was %+v", expected, resp) + } + return nil + }, + }, + } + for _, tc := range testCases { + t.Run(tc.Description, func(t *testing.T) { + ctx := context.Background() + logger := log.NewNoop() + mockTagRepo := new(mocks.TagRepository) + mockTemplateRepo := new(mocks.TagTemplateRepository) + if tc.Setup != nil { + tc.Setup(ctx, mockTagRepo, mockTemplateRepo) + } + defer mockTemplateRepo.AssertExpectations(t) + defer mockTagRepo.AssertExpectations(t) + + templateService := tag.NewTemplateService(mockTemplateRepo) + service := tag.NewService(mockTagRepo, templateService) + handler := api.NewGRPCHandler(logger, &api.Dependencies{ + TagService: service, + TagTemplateService: templateService, + }) + + got, err := handler.GetTagTemplate(ctx, tc.Request) + code := status.Code(err) + if code != tc.ExpectStatus { + t.Errorf("expected handler to return Code %s, returned Code %sinstead", tc.ExpectStatus.String(), code.String()) + return + } + if tc.PostCheck != nil { + if err := tc.PostCheck(got); err != nil { + t.Error(err) + return + } + } + }) + } +} + +func TestUpdateTagTemplate(t *testing.T) { + validRequest := &compassv1beta1.UpdateTagTemplateRequest{ + TemplateUrn: sampleTemplatePB.GetUrn(), + DisplayName: sampleTemplatePB.GetDisplayName(), + Description: sampleTemplatePB.GetDescription(), + Fields: sampleTemplatePB.GetFields(), + } + type testCase struct { + Description string + Request *compassv1beta1.UpdateTagTemplateRequest + ExpectStatus codes.Code + Setup func(context.Context, *mocks.TagRepository, *mocks.TagTemplateRepository) + PostCheck func(resp *compassv1beta1.UpdateTagTemplateResponse) error + } + + var testCases = []testCase{ + { + Description: `should return not found if template is not found`, + Request: validRequest, + ExpectStatus: codes.NotFound, + Setup: func(ctx context.Context, tr *mocks.TagRepository, ttr *mocks.TagTemplateRepository) { + ttr.EXPECT().Read(ctx, sampleTemplate.URN).Return([]tag.Template{}, nil) + }, + }, + { + Description: `should return invalid argument if there is validation error`, + Request: validRequest, + ExpectStatus: codes.InvalidArgument, + Setup: func(ctx context.Context, tr *mocks.TagRepository, ttr *mocks.TagTemplateRepository) { + ttr.EXPECT().Read(ctx, sampleTemplate.URN).Return(nil, tag.ValidationError{Err: errors.New("validation error")}) + }, + }, + { + Description: `should return internal server error if encountered error during update`, + Request: validRequest, + ExpectStatus: codes.Internal, + Setup: func(ctx context.Context, tr *mocks.TagRepository, ttr *mocks.TagTemplateRepository) { + ttr.EXPECT().Read(ctx, sampleTemplate.URN).Return(nil, errors.New("unexpected error")) + }, + }, + { + Description: `should return status ok and its message if successfully updated`, + Request: validRequest, + ExpectStatus: codes.OK, + Setup: func(ctx context.Context, tr *mocks.TagRepository, ttr *mocks.TagTemplateRepository) { + ttr.EXPECT().Read(ctx, sampleTemplate.URN).Return([]tag.Template{sampleTemplate}, nil) + ttr.EXPECT().Update(ctx, sampleTemplate.URN, &sampleTemplate).Run(func(ctx context.Context, templateURN string, template *tag.Template) { + template.UpdatedAt = time.Now() + }).Return(nil) + }, + PostCheck: func(resp *compassv1beta1.UpdateTagTemplateResponse) error { + expectedTemplatePB := sampleTemplatePB + expectedTemplatePB.UpdatedAt = resp.GetData().GetUpdatedAt() + expected := &compassv1beta1.UpdateTagTemplateResponse{ + Data: sampleTemplatePB, + } + + if diff := cmp.Diff(resp, expected, protocmp.Transform()); diff != "" { + return fmt.Errorf("expected response to be %+v, was %+v", expected, resp) + } + return nil + }, + }, + } + for _, tc := range testCases { + t.Run(tc.Description, func(t *testing.T) { + ctx := context.Background() + logger := log.NewNoop() + mockTagRepo := new(mocks.TagRepository) + mockTemplateRepo := new(mocks.TagTemplateRepository) + if tc.Setup != nil { + tc.Setup(ctx, mockTagRepo, mockTemplateRepo) + } + defer mockTemplateRepo.AssertExpectations(t) + defer mockTagRepo.AssertExpectations(t) + + templateService := tag.NewTemplateService(mockTemplateRepo) + service := tag.NewService(mockTagRepo, templateService) + handler := api.NewGRPCHandler(logger, &api.Dependencies{ + TagService: service, + TagTemplateService: templateService, + }) + + got, err := handler.UpdateTagTemplate(ctx, tc.Request) + code := status.Code(err) + if code != tc.ExpectStatus { + t.Errorf("expected handler to return Code %s, returned Code %sinstead", tc.ExpectStatus.String(), code.String()) + return + } + if tc.PostCheck != nil { + if err := tc.PostCheck(got); err != nil { + t.Error(err) + return + } + } + }) + } +} + +func TestDeleteTagTemplate(t *testing.T) { + validRequest := &compassv1beta1.DeleteTagTemplateRequest{ + TemplateUrn: sampleTemplatePB.GetUrn(), + } + type testCase struct { + Description string + Request *compassv1beta1.DeleteTagTemplateRequest + ExpectStatus codes.Code + Setup func(context.Context, *mocks.TagRepository, *mocks.TagTemplateRepository) + } + + var testCases = []testCase{ + { + Description: `should return not found if template is not found`, + Request: validRequest, + ExpectStatus: codes.NotFound, + Setup: func(ctx context.Context, tr *mocks.TagRepository, ttr *mocks.TagTemplateRepository) { + ttr.EXPECT().Delete(ctx, sampleTemplate.URN).Return(tag.TemplateNotFoundError{URN: sampleTemplate.URN}) + }, + }, + { + Description: `should return status ok and template if domain template is found`, + Request: validRequest, + ExpectStatus: codes.OK, + Setup: func(ctx context.Context, tr *mocks.TagRepository, ttr *mocks.TagTemplateRepository) { + ttr.EXPECT().Delete(ctx, sampleTemplate.URN).Return(nil) + }, + }, + } + for _, tc := range testCases { + t.Run(tc.Description, func(t *testing.T) { + ctx := context.Background() + logger := log.NewNoop() + mockTagRepo := new(mocks.TagRepository) + mockTemplateRepo := new(mocks.TagTemplateRepository) + if tc.Setup != nil { + tc.Setup(ctx, mockTagRepo, mockTemplateRepo) + } + defer mockTemplateRepo.AssertExpectations(t) + defer mockTagRepo.AssertExpectations(t) + + templateService := tag.NewTemplateService(mockTemplateRepo) + service := tag.NewService(mockTagRepo, templateService) + handler := api.NewGRPCHandler(logger, &api.Dependencies{ + TagService: service, + TagTemplateService: templateService, + }) + + _, err := handler.DeleteTagTemplate(ctx, tc.Request) + code := status.Code(err) + if code != tc.ExpectStatus { + t.Errorf("expected handler to return Code %s, returned Code %sinstead", tc.ExpectStatus.String(), code.String()) + return + } + }) + } +} diff --git a/api/v1beta1/tag_test.go b/api/v1beta1/tag_test.go new file mode 100644 index 00000000..774cc777 --- /dev/null +++ b/api/v1beta1/tag_test.go @@ -0,0 +1,745 @@ +package v1beta1_test + +import ( + "context" + "errors" + "fmt" + "testing" + + "github.com/google/go-cmp/cmp" + "github.com/odpf/columbus/api" + compassv1beta1 "github.com/odpf/columbus/api/proto/odpf/compass/v1beta1" + "github.com/odpf/columbus/lib/mocks" + "github.com/odpf/columbus/tag" + "github.com/odpf/salt/log" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/testing/protocmp" + "google.golang.org/protobuf/types/known/structpb" +) + +var sampleTag = tag.Tag{ + RecordURN: "sample-urn", + RecordType: "sample-type", + TemplateURN: "governance_policy", + TemplateDisplayName: "Governance Policy", + TemplateDescription: "Template that is mandatory to be used.", + TagValues: []tag.TagValue{ + { + FieldID: 1, + FieldValue: "Public", + FieldURN: "classification", + FieldDisplayName: "classification", + FieldDescription: "The classification of this record", + FieldDataType: "enumerated", + FieldRequired: true, + FieldOptions: []string{"Public", "Restricted"}, + }, + { + FieldID: 2, + FieldValue: true, + FieldURN: "is_encrypted", + FieldDisplayName: "Is Encrypted?", + FieldDescription: "Specify whether this record is encrypted or not.", + FieldDataType: "boolean", + FieldRequired: true, + }, + }, +} + +var sampleTagPB = &compassv1beta1.Tag{ + RecordUrn: "sample-urn", + RecordType: "sample-type", + TemplateUrn: "governance_policy", + TemplateDisplayName: "Governance Policy", + TemplateDescription: "Template that is mandatory to be used.", + TagValues: []*compassv1beta1.TagValue{ + { + FieldId: 1, + FieldValue: structpb.NewStringValue("Public"), + FieldUrn: "classification", + FieldDisplayName: "classification", + FieldDescription: "The classification of this record", + FieldDataType: "enumerated", + FieldRequired: true, + FieldOptions: []string{"Public", "Restricted"}, + }, + { + FieldId: 2, + FieldValue: structpb.NewBoolValue(true), + FieldUrn: "is_encrypted", + FieldDisplayName: "Is Encrypted?", + FieldDescription: "Specify whether this record is encrypted or not.", + FieldDataType: "boolean", + FieldRequired: true, + }, + }, +} + +func TestGetTagsByRecordAndTemplate(t *testing.T) { + type testCase struct { + Description string + Request *compassv1beta1.GetTagsByRecordAndTemplateRequest + ExpectStatus codes.Code + Setup func(context.Context, *mocks.TagRepository, *mocks.TagTemplateRepository) + PostCheck func(resp *compassv1beta1.GetTagsByRecordAndTemplateResponse) error + } + + var testCases = []testCase{ + { + Description: `should return invalid argument if record urn is empty`, + Request: &compassv1beta1.GetTagsByRecordAndTemplateRequest{ + Type: "sample-type", + RecordUrn: "", + TemplateUrn: "sample-template", + }, + ExpectStatus: codes.InvalidArgument, + }, + { + Description: `should return invalid argument if type is empty`, + Request: &compassv1beta1.GetTagsByRecordAndTemplateRequest{ + Type: "", + RecordUrn: "sample-urn", + TemplateUrn: "sample-template", + }, + ExpectStatus: codes.InvalidArgument, + }, + { + Description: `should return invalid argument if template urn is empty`, + Request: &compassv1beta1.GetTagsByRecordAndTemplateRequest{ + Type: "sample-type", + RecordUrn: "sample-urn", + TemplateUrn: "", + }, + ExpectStatus: codes.InvalidArgument, + }, + { + Description: `should return not found if template does not exist`, + Request: &compassv1beta1.GetTagsByRecordAndTemplateRequest{ + Type: "sample-type", + RecordUrn: "sample-urn", + TemplateUrn: sampleTemplate.URN, + }, + ExpectStatus: codes.NotFound, + Setup: func(ctx context.Context, tr *mocks.TagRepository, ttr *mocks.TagTemplateRepository) { + ttr.EXPECT().Read(ctx, sampleTemplate.URN).Return([]tag.Template{}, tag.TemplateNotFoundError{URN: sampleTemplate.URN}) + }, + }, + { + Description: `should return not found if tag does not exist`, + Request: &compassv1beta1.GetTagsByRecordAndTemplateRequest{ + Type: "sample-type", + RecordUrn: "sample-urn", + TemplateUrn: sampleTemplate.URN, + }, + ExpectStatus: codes.NotFound, + Setup: func(ctx context.Context, tr *mocks.TagRepository, ttr *mocks.TagTemplateRepository) { + ttr.EXPECT().Read(ctx, sampleTemplate.URN).Return([]tag.Template{sampleTemplate}, nil) + tr.EXPECT().Read(ctx, tag.Tag{ + RecordType: "sample-type", + RecordURN: "sample-urn", + TemplateURN: sampleTemplate.URN, + }).Return(nil, tag.NotFoundError{ + URN: "sample-urn", + Type: "sample-type", + Template: sampleTemplate.URN, + }) + }, + }, + { + Description: `should return internal server error if found unexpected error`, + Request: &compassv1beta1.GetTagsByRecordAndTemplateRequest{ + Type: "sample-type", + RecordUrn: "sample-urn", + TemplateUrn: sampleTemplate.URN, + }, + ExpectStatus: codes.Internal, + Setup: func(ctx context.Context, tr *mocks.TagRepository, ttr *mocks.TagTemplateRepository) { + ttr.EXPECT().Read(ctx, sampleTemplate.URN).Return([]tag.Template{sampleTemplate}, nil) + tr.EXPECT().Read(ctx, tag.Tag{ + RecordType: "sample-type", + RecordURN: "sample-urn", + TemplateURN: sampleTemplate.URN, + }).Return(nil, errors.New("unexpected error")) + }, + }, + { + Description: `should return ok and tag`, + Request: &compassv1beta1.GetTagsByRecordAndTemplateRequest{ + Type: "sample-type", + RecordUrn: "sample-urn", + TemplateUrn: sampleTemplate.URN, + }, + ExpectStatus: codes.OK, + Setup: func(ctx context.Context, tr *mocks.TagRepository, ttr *mocks.TagTemplateRepository) { + ttr.EXPECT().Read(ctx, sampleTemplate.URN).Return([]tag.Template{sampleTemplate}, nil) + tr.EXPECT().Read(ctx, tag.Tag{ + RecordType: "sample-type", + RecordURN: "sample-urn", + TemplateURN: sampleTemplate.URN, + }).Return([]tag.Tag{sampleTag}, nil) + }, + PostCheck: func(resp *compassv1beta1.GetTagsByRecordAndTemplateResponse) error { + var tagValuesPB []*compassv1beta1.TagValue + for _, tv := range sampleTag.TagValues { + tvPB, err := tv.ToProto() + if err != nil { + return err + } + tagValuesPB = append(tagValuesPB, tvPB) + } + + expected := &compassv1beta1.GetTagsByRecordAndTemplateResponse{ + Data: &compassv1beta1.Tag{ + RecordType: sampleTag.RecordType, + RecordUrn: sampleTag.RecordURN, + TemplateUrn: sampleTag.TemplateURN, + TagValues: tagValuesPB, + TemplateDisplayName: sampleTag.TemplateDisplayName, + TemplateDescription: sampleTag.TemplateDescription, + }, + } + + if diff := cmp.Diff(resp, expected, protocmp.Transform()); diff != "" { + return fmt.Errorf("expected response to be %+v, was %+v", expected, resp) + } + return nil + }, + }, + } + for _, tc := range testCases { + t.Run(tc.Description, func(t *testing.T) { + ctx := context.Background() + logger := log.NewNoop() + mockTagRepo := new(mocks.TagRepository) + mockTemplateRepo := new(mocks.TagTemplateRepository) + if tc.Setup != nil { + tc.Setup(ctx, mockTagRepo, mockTemplateRepo) + } + defer mockTagRepo.AssertExpectations(t) + defer mockTemplateRepo.AssertExpectations(t) + + templateService := tag.NewTemplateService(mockTemplateRepo) + service := tag.NewService(mockTagRepo, templateService) + handler := api.NewGRPCHandler(logger, &api.Dependencies{ + TagService: service, + }) + + got, err := handler.GetTagsByRecordAndTemplate(ctx, tc.Request) + code := status.Code(err) + if code != tc.ExpectStatus { + t.Errorf("expected handler to return Code %s, returned Code %sinstead", tc.ExpectStatus.String(), code.String()) + return + } + if tc.PostCheck != nil { + if err := tc.PostCheck(got); err != nil { + t.Error(err) + return + } + } + }) + } +} + +func TestCreateTag(t *testing.T) { + validRequest := &compassv1beta1.CreateTagRequest{ + RecordType: sampleTagPB.GetRecordType(), + RecordUrn: sampleTagPB.GetRecordUrn(), + TemplateUrn: sampleTagPB.GetTemplateUrn(), + TagValues: sampleTagPB.TagValues, + TemplateDisplayName: sampleTagPB.TemplateDisplayName, + TemplateDescription: sampleTagPB.TemplateDescription, + } + type testCase struct { + Description string + Request *compassv1beta1.CreateTagRequest + ExpectStatus codes.Code + Setup func(context.Context, *mocks.TagRepository, *mocks.TagTemplateRepository) + PostCheck func(resp *compassv1beta1.CreateTagResponse) error + } + + var testCases = []testCase{ + { + Description: `should return invalid argument if record type is empty`, + Request: &compassv1beta1.CreateTagRequest{ + RecordType: "", + RecordUrn: sampleTagPB.GetRecordUrn(), + TemplateUrn: sampleTagPB.GetTemplateUrn(), + TagValues: sampleTagPB.TagValues, + }, + ExpectStatus: codes.InvalidArgument, + }, + { + Description: `should return invalid argument if record urn is empty`, + Request: &compassv1beta1.CreateTagRequest{ + RecordType: sampleTagPB.GetRecordType(), + RecordUrn: "", + TemplateUrn: sampleTagPB.GetTemplateUrn(), + TagValues: sampleTagPB.TagValues, + }, + ExpectStatus: codes.InvalidArgument, + }, + { + Description: `should return invalid argument if template urn is empty`, + Request: &compassv1beta1.CreateTagRequest{ + RecordType: sampleTagPB.GetRecordType(), + RecordUrn: sampleTagPB.GetRecordUrn(), + TemplateUrn: "", + TagValues: sampleTagPB.TagValues, + }, + ExpectStatus: codes.InvalidArgument, + }, + { + Description: `should return invalid argument if tag values is empty`, + Request: &compassv1beta1.CreateTagRequest{ + RecordType: sampleTagPB.GetRecordType(), + RecordUrn: sampleTagPB.GetRecordUrn(), + TemplateUrn: sampleTagPB.GetTemplateUrn(), + }, + ExpectStatus: codes.InvalidArgument, + }, + { + Description: `should return not found if template does not exist`, + Request: validRequest, + ExpectStatus: codes.NotFound, + Setup: func(ctx context.Context, tr *mocks.TagRepository, ttr *mocks.TagTemplateRepository) { + ttr.EXPECT().Read(ctx, sampleTemplate.URN).Return([]tag.Template{sampleTemplate}, nil) + tr.EXPECT().Create(ctx, &sampleTag).Return(tag.TemplateNotFoundError{URN: sampleTemplate.URN}) + }, + }, + { + Description: `should return invalid argument if there is validation error`, + Request: validRequest, + ExpectStatus: codes.InvalidArgument, + Setup: func(ctx context.Context, tr *mocks.TagRepository, ttr *mocks.TagTemplateRepository) { + ttr.EXPECT().Read(ctx, sampleTemplate.URN).Return([]tag.Template{sampleTemplate}, nil) + tr.EXPECT().Create(ctx, &sampleTag).Return(tag.ValidationError{Err: errors.New("validation error")}) + }, + }, + { + Description: `should return internal server error if found error during insert`, + Request: validRequest, + ExpectStatus: codes.Internal, + Setup: func(ctx context.Context, tr *mocks.TagRepository, ttr *mocks.TagTemplateRepository) { + ttr.EXPECT().Read(ctx, sampleTemplate.URN).Return([]tag.Template{sampleTemplate}, nil) + tr.EXPECT().Create(ctx, &sampleTag).Return(errors.New("unexpected error during insert")) + }, + }, + { + Description: `should return already exist if found duplicated record during insert`, + Request: validRequest, + ExpectStatus: codes.AlreadyExists, + Setup: func(ctx context.Context, tr *mocks.TagRepository, ttr *mocks.TagTemplateRepository) { + ttr.EXPECT().Read(ctx, sampleTemplate.URN).Return([]tag.Template{sampleTemplate}, nil) + tr.EXPECT().Create(ctx, &sampleTag).Return(tag.DuplicateError{}) + }, + }, + { + Description: `should return ok and domain is inserted if found no error`, + Request: validRequest, + ExpectStatus: codes.OK, + Setup: func(ctx context.Context, tr *mocks.TagRepository, ttr *mocks.TagTemplateRepository) { + ttr.EXPECT().Read(ctx, sampleTemplate.URN).Return([]tag.Template{sampleTemplate}, nil) + tr.EXPECT().Create(ctx, &sampleTag).Return(nil) + }, + PostCheck: func(resp *compassv1beta1.CreateTagResponse) error { + expected := &compassv1beta1.CreateTagResponse{ + Data: sampleTagPB, + } + + if diff := cmp.Diff(resp, expected, protocmp.Transform()); diff != "" { + return fmt.Errorf("expected response to be %+v, was %+v", expected, resp) + } + return nil + }, + }, + } + for _, tc := range testCases { + t.Run(tc.Description, func(t *testing.T) { + ctx := context.Background() + logger := log.NewNoop() + mockTagRepo := new(mocks.TagRepository) + mockTemplateRepo := new(mocks.TagTemplateRepository) + if tc.Setup != nil { + tc.Setup(ctx, mockTagRepo, mockTemplateRepo) + } + defer mockTagRepo.AssertExpectations(t) + defer mockTemplateRepo.AssertExpectations(t) + + templateService := tag.NewTemplateService(mockTemplateRepo) + service := tag.NewService(mockTagRepo, templateService) + handler := api.NewGRPCHandler(logger, &api.Dependencies{ + TagService: service, + }) + + got, err := handler.CreateTag(ctx, tc.Request) + code := status.Code(err) + if code != tc.ExpectStatus { + t.Errorf("expected handler to return Code %s, returned Code %sinstead", tc.ExpectStatus.String(), code.String()) + return + } + if tc.PostCheck != nil { + if err := tc.PostCheck(got); err != nil { + t.Error(err) + return + } + } + }) + } +} + +func TestUpdateTag(t *testing.T) { + validRequest := &compassv1beta1.UpdateTagRequest{ + Type: sampleTagPB.GetRecordType(), + RecordUrn: sampleTagPB.GetRecordUrn(), + TemplateUrn: sampleTagPB.GetTemplateUrn(), + TagValues: sampleTagPB.TagValues, + TemplateDisplayName: sampleTagPB.TemplateDisplayName, + TemplateDescription: sampleTagPB.TemplateDescription, + } + type testCase struct { + Description string + Request *compassv1beta1.UpdateTagRequest + ExpectStatus codes.Code + Setup func(context.Context, *mocks.TagRepository, *mocks.TagTemplateRepository) + PostCheck func(resp *compassv1beta1.UpdateTagResponse) error + } + + var testCases = []testCase{ + { + Description: `should return invalid argument if type is empty`, + Request: &compassv1beta1.UpdateTagRequest{ + Type: "", + RecordUrn: sampleTagPB.GetRecordUrn(), + TemplateUrn: sampleTagPB.GetTemplateUrn(), + TagValues: sampleTagPB.TagValues, + }, + ExpectStatus: codes.InvalidArgument, + }, + { + Description: `should return invalid argument if record urn is empty`, + Request: &compassv1beta1.UpdateTagRequest{ + Type: sampleTagPB.GetRecordType(), + RecordUrn: "", + TemplateUrn: sampleTagPB.GetTemplateUrn(), + TagValues: sampleTagPB.TagValues, + }, + ExpectStatus: codes.InvalidArgument, + }, + { + Description: `should return invalid argument if template urn is empty`, + Request: &compassv1beta1.UpdateTagRequest{ + Type: sampleTagPB.GetRecordType(), + RecordUrn: sampleTagPB.GetRecordUrn(), + TemplateUrn: "", + TagValues: sampleTagPB.TagValues, + }, + ExpectStatus: codes.InvalidArgument, + }, + { + Description: `should return invalid argument if tag values is empty`, + Request: &compassv1beta1.UpdateTagRequest{ + Type: sampleTagPB.GetRecordType(), + RecordUrn: sampleTagPB.GetRecordUrn(), + TemplateUrn: sampleTagPB.GetTemplateUrn(), + }, + ExpectStatus: codes.InvalidArgument, + }, + { + Description: `should return not found if tag could not be found`, + Request: validRequest, + ExpectStatus: codes.NotFound, + Setup: func(ctx context.Context, tr *mocks.TagRepository, ttr *mocks.TagTemplateRepository) { + ttr.EXPECT().Read(ctx, sampleTemplate.URN).Return([]tag.Template{sampleTemplate}, nil) + tr.EXPECT().Read(ctx, tag.Tag{ + RecordType: sampleTagPB.RecordType, + RecordURN: sampleTagPB.RecordUrn, + TemplateURN: sampleTagPB.TemplateUrn, + }).Return([]tag.Tag{}, nil) + }, + }, + { + Description: `should return internal server error if found error during update`, + Request: validRequest, + ExpectStatus: codes.Internal, + Setup: func(ctx context.Context, tr *mocks.TagRepository, ttr *mocks.TagTemplateRepository) { + ttr.EXPECT().Read(ctx, sampleTemplate.URN).Return([]tag.Template{sampleTemplate}, nil) + tr.EXPECT().Read(ctx, tag.Tag{ + RecordType: sampleTagPB.RecordType, + RecordURN: sampleTagPB.RecordUrn, + TemplateURN: sampleTagPB.TemplateUrn, + }).Return([]tag.Tag{sampleTag}, nil) + tr.EXPECT().Update(ctx, &sampleTag).Return(errors.New("unexpected error during update")) + }, + }, + { + Description: `should return ok and domain is updated if found no error`, + Request: validRequest, + ExpectStatus: codes.OK, + Setup: func(ctx context.Context, tr *mocks.TagRepository, ttr *mocks.TagTemplateRepository) { + ttr.EXPECT().Read(ctx, sampleTemplate.URN).Return([]tag.Template{sampleTemplate}, nil) + tr.EXPECT().Read(ctx, tag.Tag{ + RecordType: sampleTagPB.RecordType, + RecordURN: sampleTagPB.RecordUrn, + TemplateURN: sampleTagPB.TemplateUrn, + }).Return([]tag.Tag{sampleTag}, nil) + tr.EXPECT().Update(ctx, &sampleTag).Return(nil) + }, + PostCheck: func(resp *compassv1beta1.UpdateTagResponse) error { + expected := &compassv1beta1.UpdateTagResponse{ + Data: sampleTagPB, + } + + if diff := cmp.Diff(resp, expected, protocmp.Transform()); diff != "" { + return fmt.Errorf("expected response to be %+v, was %+v", expected, resp) + } + return nil + }, + }, + } + for _, tc := range testCases { + t.Run(tc.Description, func(t *testing.T) { + ctx := context.Background() + logger := log.NewNoop() + mockTagRepo := new(mocks.TagRepository) + mockTemplateRepo := new(mocks.TagTemplateRepository) + if tc.Setup != nil { + tc.Setup(ctx, mockTagRepo, mockTemplateRepo) + } + defer mockTagRepo.AssertExpectations(t) + defer mockTemplateRepo.AssertExpectations(t) + + templateService := tag.NewTemplateService(mockTemplateRepo) + service := tag.NewService(mockTagRepo, templateService) + handler := api.NewGRPCHandler(logger, &api.Dependencies{ + TagService: service, + }) + + got, err := handler.UpdateTag(ctx, tc.Request) + code := status.Code(err) + if code != tc.ExpectStatus { + t.Errorf("expected handler to return Code %s, returned Code %sinstead", tc.ExpectStatus.String(), code.String()) + return + } + if tc.PostCheck != nil { + if err := tc.PostCheck(got); err != nil { + t.Error(err) + return + } + } + }) + } +} + +func TestDeleteTag(t *testing.T) { + type testCase struct { + Description string + Request *compassv1beta1.DeleteTagRequest + ExpectStatus codes.Code + Setup func(context.Context, *mocks.TagRepository, *mocks.TagTemplateRepository) + } + + var testCases = []testCase{ + { + Description: `should return invalid argument if type is empty`, + Request: &compassv1beta1.DeleteTagRequest{ + Type: "", + RecordUrn: sampleTagPB.GetRecordUrn(), + TemplateUrn: sampleTagPB.GetTemplateUrn(), + }, + ExpectStatus: codes.InvalidArgument, + }, + { + Description: `should return invalid argument if record urn is empty`, + Request: &compassv1beta1.DeleteTagRequest{ + Type: sampleTagPB.GetRecordType(), + RecordUrn: "", + TemplateUrn: sampleTagPB.GetTemplateUrn(), + }, + ExpectStatus: codes.InvalidArgument, + }, + { + Description: `should return invalid argument if template urn is empty`, + Request: &compassv1beta1.DeleteTagRequest{ + Type: sampleTagPB.GetRecordType(), + RecordUrn: sampleTagPB.GetRecordUrn(), + TemplateUrn: "", + }, + ExpectStatus: codes.InvalidArgument, + }, + { + Description: `should return not found if template does not exist`, + Request: &compassv1beta1.DeleteTagRequest{ + Type: sampleTagPB.GetRecordType(), + RecordUrn: sampleTagPB.GetRecordUrn(), + TemplateUrn: sampleTagPB.GetTemplateUrn(), + }, + ExpectStatus: codes.NotFound, + Setup: func(ctx context.Context, tr *mocks.TagRepository, ttr *mocks.TagTemplateRepository) { + ttr.EXPECT().Read(ctx, sampleTemplate.URN).Return([]tag.Template{{}}, nil) + tr.EXPECT().Delete(ctx, tag.Tag{ + RecordType: sampleTagPB.RecordType, + RecordURN: sampleTagPB.RecordUrn, + TemplateURN: sampleTagPB.TemplateUrn, + }).Return(tag.TemplateNotFoundError{}) + }, + }, + { + Description: `should return internal server error found unexpected error`, + Request: &compassv1beta1.DeleteTagRequest{ + Type: sampleTagPB.GetRecordType(), + RecordUrn: sampleTagPB.GetRecordUrn(), + TemplateUrn: sampleTagPB.GetTemplateUrn(), + }, + ExpectStatus: codes.Internal, + Setup: func(ctx context.Context, tr *mocks.TagRepository, ttr *mocks.TagTemplateRepository) { + ttr.EXPECT().Read(ctx, sampleTemplate.URN).Return([]tag.Template{{}}, nil) + tr.EXPECT().Delete(ctx, tag.Tag{ + RecordType: sampleTagPB.RecordType, + RecordURN: sampleTagPB.RecordUrn, + TemplateURN: sampleTagPB.TemplateUrn, + }).Return(errors.New("unexpected error")) + }, + }, + { + Description: `should return ok if delete success`, + Request: &compassv1beta1.DeleteTagRequest{ + Type: sampleTagPB.GetRecordType(), + RecordUrn: sampleTagPB.GetRecordUrn(), + TemplateUrn: sampleTagPB.GetTemplateUrn(), + }, + ExpectStatus: codes.OK, + Setup: func(ctx context.Context, tr *mocks.TagRepository, ttr *mocks.TagTemplateRepository) { + ttr.EXPECT().Read(ctx, sampleTemplate.URN).Return([]tag.Template{{}}, nil) + tr.EXPECT().Delete(ctx, tag.Tag{ + RecordType: sampleTagPB.RecordType, + RecordURN: sampleTagPB.RecordUrn, + TemplateURN: sampleTagPB.TemplateUrn, + }).Return(nil) + }, + }, + } + for _, tc := range testCases { + t.Run(tc.Description, func(t *testing.T) { + ctx := context.Background() + logger := log.NewNoop() + mockTagRepo := new(mocks.TagRepository) + mockTemplateRepo := new(mocks.TagTemplateRepository) + if tc.Setup != nil { + tc.Setup(ctx, mockTagRepo, mockTemplateRepo) + } + defer mockTagRepo.AssertExpectations(t) + defer mockTemplateRepo.AssertExpectations(t) + + templateService := tag.NewTemplateService(mockTemplateRepo) + service := tag.NewService(mockTagRepo, templateService) + handler := api.NewGRPCHandler(logger, &api.Dependencies{ + TagService: service, + }) + + _, err := handler.DeleteTag(ctx, tc.Request) + code := status.Code(err) + if code != tc.ExpectStatus { + t.Errorf("expected handler to return Code %s, returned Code %sinstead", tc.ExpectStatus.String(), code.String()) + return + } + }) + } +} + +func TestGetTagsByRecord(t *testing.T) { + validRequest := &compassv1beta1.GetTagsByRecordRequest{ + Type: sampleTagPB.GetRecordType(), + RecordUrn: sampleTagPB.GetRecordUrn(), + } + type testCase struct { + Description string + Request *compassv1beta1.GetTagsByRecordRequest + ExpectStatus codes.Code + Setup func(context.Context, *mocks.TagRepository, *mocks.TagTemplateRepository) + PostCheck func(resp *compassv1beta1.GetTagsByRecordResponse) error + } + + var testCases = []testCase{ + { + Description: `should return invalid argument if type is empty`, + Request: &compassv1beta1.GetTagsByRecordRequest{ + Type: "", + RecordUrn: sampleTagPB.GetRecordUrn(), + }, + ExpectStatus: codes.InvalidArgument, + }, + { + Description: `should return invalid argument if record urn is empty`, + Request: &compassv1beta1.GetTagsByRecordRequest{ + Type: sampleTagPB.GetRecordType(), + RecordUrn: "", + }, + ExpectStatus: codes.InvalidArgument, + }, + { + Description: `should return internal server error if found unexpected error`, + Request: validRequest, + ExpectStatus: codes.Internal, + Setup: func(ctx context.Context, tr *mocks.TagRepository, ttr *mocks.TagTemplateRepository) { + tr.EXPECT().Read(ctx, tag.Tag{ + RecordType: sampleTagPB.RecordType, + RecordURN: sampleTagPB.RecordUrn, + }).Return(nil, errors.New("unexpected error")) + }, + }, + { + Description: `should return ok and tags for the specified record`, + Request: validRequest, + ExpectStatus: codes.OK, + Setup: func(ctx context.Context, tr *mocks.TagRepository, ttr *mocks.TagTemplateRepository) { + tr.EXPECT().Read(ctx, tag.Tag{ + RecordType: sampleTagPB.RecordType, + RecordURN: sampleTagPB.RecordUrn, + }).Return([]tag.Tag{sampleTag}, nil) + }, + PostCheck: func(resp *compassv1beta1.GetTagsByRecordResponse) error { + expected := &compassv1beta1.GetTagsByRecordResponse{ + Data: []*compassv1beta1.Tag{sampleTagPB}, + } + + if diff := cmp.Diff(resp, expected, protocmp.Transform()); diff != "" { + return fmt.Errorf("expected response to be %+v, was %+v", expected, resp) + } + return nil + }, + }, + } + for _, tc := range testCases { + t.Run(tc.Description, func(t *testing.T) { + ctx := context.Background() + logger := log.NewNoop() + mockTagRepo := new(mocks.TagRepository) + mockTemplateRepo := new(mocks.TagTemplateRepository) + if tc.Setup != nil { + tc.Setup(ctx, mockTagRepo, mockTemplateRepo) + } + defer mockTagRepo.AssertExpectations(t) + defer mockTemplateRepo.AssertExpectations(t) + + templateService := tag.NewTemplateService(mockTemplateRepo) + service := tag.NewService(mockTagRepo, templateService) + handler := api.NewGRPCHandler(logger, &api.Dependencies{ + TagService: service, + }) + + got, err := handler.GetTagsByRecord(ctx, tc.Request) + code := status.Code(err) + if code != tc.ExpectStatus { + t.Errorf("expected handler to return Code %s, returned Code %sinstead", tc.ExpectStatus.String(), code.String()) + return + } + if tc.PostCheck != nil { + if err := tc.PostCheck(got); err != nil { + t.Error(err) + return + } + } + }) + } +} diff --git a/api/v1beta1/user.go b/api/v1beta1/user.go new file mode 100644 index 00000000..1ef802fa --- /dev/null +++ b/api/v1beta1/user.go @@ -0,0 +1,236 @@ +package v1beta1 + +import ( + "context" + "errors" + "strings" + + compassv1beta1 "github.com/odpf/columbus/api/proto/odpf/compass/v1beta1" + "github.com/odpf/columbus/discussion" + "github.com/odpf/columbus/star" + "github.com/odpf/columbus/user" + "github.com/odpf/columbus/validator" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" +) + +func (h *Handler) GetUserStarredAssets(ctx context.Context, req *compassv1beta1.GetUserStarredAssetsRequest) (*compassv1beta1.GetUserStarredAssetsResponse, error) { + + starCfg := star.Config{ + Size: int(req.GetSize()), + Offset: int(req.GetOffset()), + } + + starredAssets, err := h.StarRepository.GetAllAssetsByUserID(ctx, starCfg, req.GetUserId()) + + if errors.Is(err, star.ErrEmptyUserID) || errors.As(err, new(star.InvalidError)) { + return nil, status.Error(codes.InvalidArgument, err.Error()) + } + if errors.As(err, new(star.NotFoundError)) { + return nil, status.Error(codes.NotFound, err.Error()) + } + if err != nil { + return nil, internalServerError(h.Logger, err.Error()) + } + + var starredAssetsPB []*compassv1beta1.Asset + for _, ast := range starredAssets { + astPB, err := ast.ToProto() + if err != nil { + return nil, internalServerError(h.Logger, err.Error()) + } + starredAssetsPB = append(starredAssetsPB, astPB) + } + + return &compassv1beta1.GetUserStarredAssetsResponse{ + Data: starredAssetsPB, + }, nil +} + +func (h *Handler) GetMyStarredAssets(ctx context.Context, req *compassv1beta1.GetMyStarredAssetsRequest) (*compassv1beta1.GetMyStarredAssetsResponse, error) { + userID := user.FromContext(ctx) + if userID == "" { + return nil, status.Error(codes.InvalidArgument, errMissingUserInfo.Error()) + } + + starCfg := star.Config{ + Size: int(req.GetSize()), + Offset: int(req.GetOffset()), + } + + starredAssets, err := h.StarRepository.GetAllAssetsByUserID(ctx, starCfg, userID) + + if errors.Is(err, star.ErrEmptyUserID) || errors.As(err, new(star.InvalidError)) { + return nil, status.Error(codes.InvalidArgument, err.Error()) + } + if errors.As(err, new(star.NotFoundError)) { + return nil, status.Error(codes.NotFound, err.Error()) + } + if err != nil { + return nil, internalServerError(h.Logger, err.Error()) + } + + var starredAssetsPB []*compassv1beta1.Asset + for _, ast := range starredAssets { + astPB, err := ast.ToProto() + if err != nil { + return nil, internalServerError(h.Logger, err.Error()) + } + starredAssetsPB = append(starredAssetsPB, astPB) + } + + return &compassv1beta1.GetMyStarredAssetsResponse{ + Data: starredAssetsPB, + }, nil +} + +func (h *Handler) GetMyStarredAsset(ctx context.Context, req *compassv1beta1.GetMyStarredAssetRequest) (*compassv1beta1.GetMyStarredAssetResponse, error) { + userID := user.FromContext(ctx) + if userID == "" { + return nil, status.Error(codes.InvalidArgument, errMissingUserInfo.Error()) + } + + ast, err := h.StarRepository.GetAssetByUserID(ctx, userID, req.GetAssetId()) + if errors.Is(err, star.ErrEmptyAssetID) || errors.Is(err, star.ErrEmptyUserID) || errors.As(err, new(star.InvalidError)) { + return nil, status.Error(codes.InvalidArgument, err.Error()) + } + if errors.As(err, new(star.NotFoundError)) { + return nil, status.Error(codes.NotFound, err.Error()) + } + if err != nil { + return nil, internalServerError(h.Logger, err.Error()) + } + + astPB, err := ast.ToProto() + if err != nil { + return nil, internalServerError(h.Logger, err.Error()) + } + + return &compassv1beta1.GetMyStarredAssetResponse{ + Data: astPB, + }, nil +} + +func (h *Handler) StarAsset(ctx context.Context, req *compassv1beta1.StarAssetRequest) (*compassv1beta1.StarAssetResponse, error) { + userID := user.FromContext(ctx) + if userID == "" { + return nil, status.Error(codes.InvalidArgument, errMissingUserInfo.Error()) + } + + starID, err := h.StarRepository.Create(ctx, userID, req.GetAssetId()) + if errors.Is(err, star.ErrEmptyAssetID) || errors.Is(err, star.ErrEmptyUserID) || errors.As(err, new(star.InvalidError)) { + return nil, status.Error(codes.InvalidArgument, err.Error()) + } + if errors.As(err, new(star.UserNotFoundError)) { + return nil, status.Error(codes.InvalidArgument, err.Error()) + } + if errors.As(err, new(star.DuplicateRecordError)) { + // idempotent + return &compassv1beta1.StarAssetResponse{ + Id: starID, + }, nil + } + if err != nil { + return nil, internalServerError(h.Logger, err.Error()) + } + + return &compassv1beta1.StarAssetResponse{ + Id: starID, + }, nil +} + +func (h *Handler) UnstarAsset(ctx context.Context, req *compassv1beta1.UnstarAssetRequest) (*compassv1beta1.UnstarAssetResponse, error) { + userID := user.FromContext(ctx) + if userID == "" { + return nil, status.Error(codes.InvalidArgument, errMissingUserInfo.Error()) + } + + err := h.StarRepository.Delete(ctx, userID, req.GetAssetId()) + if errors.Is(err, star.ErrEmptyAssetID) || errors.Is(err, star.ErrEmptyUserID) || errors.As(err, new(star.InvalidError)) { + return nil, status.Error(codes.InvalidArgument, err.Error()) + } + if errors.As(err, new(star.NotFoundError)) { + return nil, status.Error(codes.NotFound, err.Error()) + } + if err != nil { + return nil, internalServerError(h.Logger, err.Error()) + } + + return &compassv1beta1.UnstarAssetResponse{}, nil +} + +func (h *Handler) GetMyDiscussions(ctx context.Context, req *compassv1beta1.GetMyDiscussionsRequest) (*compassv1beta1.GetMyDiscussionsResponse, error) { + userID := user.FromContext(ctx) + if userID == "" { + return nil, status.Error(codes.InvalidArgument, errMissingUserInfo.Error()) + } + + flt, err := h.buildGetDiscussionsFilter(req, userID) + if err != nil { + return nil, status.Error(codes.InvalidArgument, err.Error()) + } + + dscs, err := h.DiscussionRepository.GetAll(ctx, flt) + if err != nil { + return nil, internalServerError(h.Logger, err.Error()) + } + + var dscsPB []*compassv1beta1.Discussion + for _, dsc := range dscs { + dscsPB = append(dscsPB, dsc.ToProto()) + } + + return &compassv1beta1.GetMyDiscussionsResponse{ + Data: dscsPB, + }, nil +} + +func (h *Handler) buildGetDiscussionsFilter(req *compassv1beta1.GetMyDiscussionsRequest, userID string) (discussion.Filter, error) { + fl := discussion.Filter{ + Type: req.GetType(), + State: req.GetState(), + SortBy: req.GetSort(), + SortDirection: req.GetDirection(), + Size: int(req.GetSize()), + Offset: int(req.GetOffset()), + } + + filterQuery := req.GetFilter() + if err := validator.ValidateOneOf(filterQuery, "assigned", "created", "all"); err != nil { + return discussion.Filter{}, err + } + + if len(strings.TrimSpace(filterQuery)) > 0 { + if !(filterQuery == "created" || filterQuery == "all") { + filterQuery = "assigned" // default value + } + } + + switch filterQuery { + case "all": + fl.Owner = userID + fl.Assignees = []string{userID} + fl.DisjointAssigneeOwner = true + case "created": + fl.Owner = userID + default: + fl.Assignees = []string{userID} + } + + assets := req.GetAsset() + if assets != "" { + fl.Assets = strings.Split(assets, ",") + } + + labels := req.GetLabels() + if labels != "" { + fl.Labels = strings.Split(labels, ",") + } + + if err := fl.Validate(); err != nil { + return discussion.Filter{}, err + } + + fl.AssignDefault() + return fl, nil +} diff --git a/api/v1beta1/user_test.go b/api/v1beta1/user_test.go new file mode 100644 index 00000000..bbad4282 --- /dev/null +++ b/api/v1beta1/user_test.go @@ -0,0 +1,636 @@ +package v1beta1_test + +import ( + "context" + "errors" + "fmt" + "testing" + + "github.com/google/go-cmp/cmp" + "github.com/google/uuid" + "github.com/odpf/columbus/api" + compassv1beta1 "github.com/odpf/columbus/api/proto/odpf/compass/v1beta1" + "github.com/odpf/columbus/asset" + "github.com/odpf/columbus/discussion" + "github.com/odpf/columbus/lib/mocks" + "github.com/odpf/columbus/star" + "github.com/odpf/columbus/user" + "github.com/odpf/salt/log" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/testing/protocmp" +) + +func TestGetUserStarredAssets(t *testing.T) { + var ( + userID = uuid.NewString() + offset = 2 + size = 10 + ) + type testCase struct { + Description string + ExpectStatus codes.Code + Setup func(context.Context, *mocks.StarRepository) + PostCheck func(resp *compassv1beta1.GetUserStarredAssetsResponse) error + } + + var testCases = []testCase{ + { + Description: "should return internal server error if failed to fetch starred", + ExpectStatus: codes.Internal, + Setup: func(ctx context.Context, er *mocks.StarRepository) { + er.EXPECT().GetAllAssetsByUserID(ctx, star.Config{Offset: offset, Size: size}, userID).Return(nil, errors.New("failed to fetch starred")) + }, + }, + { + Description: "should return invalid argument if star repository return invalid error", + ExpectStatus: codes.InvalidArgument, + Setup: func(ctx context.Context, er *mocks.StarRepository) { + er.EXPECT().GetAllAssetsByUserID(ctx, star.Config{Offset: offset, Size: size}, userID).Return(nil, star.InvalidError{}) + }, + }, + { + Description: "should return not found if starred not found", + ExpectStatus: codes.NotFound, + Setup: func(ctx context.Context, er *mocks.StarRepository) { + er.EXPECT().GetAllAssetsByUserID(ctx, star.Config{Offset: offset, Size: size}, userID).Return(nil, star.NotFoundError{}) + }, + }, + { + Description: "should return starred assets of a user if no error", + ExpectStatus: codes.OK, + Setup: func(ctx context.Context, er *mocks.StarRepository) { + er.EXPECT().GetAllAssetsByUserID(ctx, star.Config{Offset: offset, Size: size}, userID).Return([]asset.Asset{ + {ID: "1", URN: "asset-urn-1", Type: "asset-type"}, + {ID: "2", URN: "asset-urn-2", Type: "asset-type"}, + {ID: "3", URN: "asset-urn-3", Type: "asset-type"}, + }, nil) + }, + PostCheck: func(resp *compassv1beta1.GetUserStarredAssetsResponse) error { + expected := &compassv1beta1.GetUserStarredAssetsResponse{ + Data: []*compassv1beta1.Asset{ + { + Id: "1", + Urn: "asset-urn-1", + Type: "asset-type", + }, + { + Id: "2", + Urn: "asset-urn-2", + Type: "asset-type", + }, + { + Id: "3", + Urn: "asset-urn-3", + Type: "asset-type", + }, + }, + } + + if diff := cmp.Diff(resp, expected, protocmp.Transform()); diff != "" { + return fmt.Errorf("expected response to be %+v, was %+v", expected, resp) + } + return nil + }, + }, + } + for _, tc := range testCases { + t.Run(tc.Description, func(t *testing.T) { + ctx := user.NewContext(context.Background(), userID) + + logger := log.NewNoop() + mockStarRepo := new(mocks.StarRepository) + if tc.Setup != nil { + tc.Setup(ctx, mockStarRepo) + } + defer mockStarRepo.AssertExpectations(t) + + handler := api.NewGRPCHandler(logger, &api.Dependencies{ + StarRepository: mockStarRepo, + }) + + got, err := handler.GetUserStarredAssets(ctx, &compassv1beta1.GetUserStarredAssetsRequest{ + UserId: userID, + Offset: uint32(offset), + Size: uint32(size), + }) + code := status.Code(err) + if code != tc.ExpectStatus { + t.Errorf("expected handler to return Code %s, returned Code %sinstead", tc.ExpectStatus.String(), code.String()) + return + } + if tc.PostCheck != nil { + if err := tc.PostCheck(got); err != nil { + t.Error(err) + return + } + } + }) + } +} + +func TestGetMyStarredAssets(t *testing.T) { + var ( + userID = uuid.NewString() + offset = 2 + size = 10 + ) + type testCase struct { + Description string + ExpectStatus codes.Code + Setup func(context.Context, *mocks.StarRepository) + PostCheck func(resp *compassv1beta1.GetMyStarredAssetsResponse) error + } + + var testCases = []testCase{ + { + Description: "should return internal server error if failed to fetch starred", + ExpectStatus: codes.Internal, + Setup: func(ctx context.Context, er *mocks.StarRepository) { + er.EXPECT().GetAllAssetsByUserID(ctx, star.Config{Offset: offset, Size: size}, userID).Return(nil, errors.New("failed to fetch starred")) + }, + }, + { + Description: "should return invalid argument if star repository return invalid error", + ExpectStatus: codes.InvalidArgument, + Setup: func(ctx context.Context, er *mocks.StarRepository) { + er.EXPECT().GetAllAssetsByUserID(ctx, star.Config{Offset: offset, Size: size}, userID).Return(nil, star.InvalidError{}) + }, + }, + { + Description: "should return not found if starred not found", + ExpectStatus: codes.NotFound, + Setup: func(ctx context.Context, er *mocks.StarRepository) { + er.EXPECT().GetAllAssetsByUserID(ctx, star.Config{Offset: offset, Size: size}, userID).Return(nil, star.NotFoundError{}) + }, + }, + { + Description: "should return starred assets of a user if no error", + ExpectStatus: codes.OK, + Setup: func(ctx context.Context, er *mocks.StarRepository) { + er.EXPECT().GetAllAssetsByUserID(ctx, star.Config{Offset: offset, Size: size}, userID).Return([]asset.Asset{ + {ID: "1", URN: "asset-urn-1", Type: "asset-type"}, + {ID: "2", URN: "asset-urn-2", Type: "asset-type"}, + {ID: "3", URN: "asset-urn-3", Type: "asset-type"}, + }, nil) + }, + PostCheck: func(resp *compassv1beta1.GetMyStarredAssetsResponse) error { + expected := &compassv1beta1.GetMyStarredAssetsResponse{ + Data: []*compassv1beta1.Asset{ + { + Id: "1", + Urn: "asset-urn-1", + Type: "asset-type", + }, + { + Id: "2", + Urn: "asset-urn-2", + Type: "asset-type", + }, + { + Id: "3", + Urn: "asset-urn-3", + Type: "asset-type", + }, + }, + } + + if diff := cmp.Diff(resp, expected, protocmp.Transform()); diff != "" { + return fmt.Errorf("expected response to be %+v, was %+v", expected, resp) + } + return nil + }, + }, + } + for _, tc := range testCases { + t.Run(tc.Description, func(t *testing.T) { + ctx := user.NewContext(context.Background(), userID) + + logger := log.NewNoop() + mockStarRepo := new(mocks.StarRepository) + if tc.Setup != nil { + tc.Setup(ctx, mockStarRepo) + } + defer mockStarRepo.AssertExpectations(t) + handler := api.NewGRPCHandler(logger, &api.Dependencies{ + StarRepository: mockStarRepo, + }) + + got, err := handler.GetMyStarredAssets(ctx, &compassv1beta1.GetMyStarredAssetsRequest{ + Offset: uint32(offset), + Size: uint32(size), + }) + code := status.Code(err) + if code != tc.ExpectStatus { + t.Errorf("expected handler to return Code %s, returned Code %sinstead", tc.ExpectStatus.String(), code.String()) + return + } + if tc.PostCheck != nil { + if err := tc.PostCheck(got); err != nil { + t.Error(err) + return + } + } + }) + } +} + +func TestGetMyStarredAsset(t *testing.T) { + var ( + userID = uuid.NewString() + assetID = uuid.NewString() + assetType = "an-asset-type" + assetURN = "dummy-asset-urn" + ) + type testCase struct { + Description string + ExpectStatus codes.Code + Setup func(context.Context, *mocks.StarRepository) + PostCheck func(resp *compassv1beta1.GetMyStarredAssetResponse) error + } + + var testCases = []testCase{ + { + Description: "should return invalid argument if asset id is empty", + ExpectStatus: codes.InvalidArgument, + Setup: func(ctx context.Context, er *mocks.StarRepository) { + er.EXPECT().GetAssetByUserID(ctx, userID, assetID).Return(asset.Asset{}, star.ErrEmptyAssetID) + }, + }, + { + Description: "should return invalid argument if repository return invalid error", + ExpectStatus: codes.InvalidArgument, + Setup: func(ctx context.Context, er *mocks.StarRepository) { + er.EXPECT().GetAssetByUserID(ctx, userID, assetID).Return(asset.Asset{}, star.InvalidError{}) + }, + }, + { + Description: "should return not found if star not found", + ExpectStatus: codes.NotFound, + Setup: func(ctx context.Context, er *mocks.StarRepository) { + er.EXPECT().GetAssetByUserID(ctx, userID, assetID).Return(asset.Asset{}, star.NotFoundError{}) + }, + }, + { + Description: "should return internal server error if failed to fetch a starred asset", + ExpectStatus: codes.Internal, + Setup: func(ctx context.Context, er *mocks.StarRepository) { + er.EXPECT().GetAssetByUserID(ctx, userID, assetID).Return(asset.Asset{}, errors.New("failed to fetch starred")) + }, + }, + { + Description: "should return a starred assets of a user if no error", + ExpectStatus: codes.OK, + Setup: func(ctx context.Context, er *mocks.StarRepository) { + er.EXPECT().GetAssetByUserID(ctx, userID, assetID).Return(asset.Asset{Type: asset.Type(assetType), URN: assetURN}, nil) + }, + PostCheck: func(resp *compassv1beta1.GetMyStarredAssetResponse) error { + expected := &compassv1beta1.GetMyStarredAssetResponse{ + Data: &compassv1beta1.Asset{ + Urn: assetURN, + Type: assetType, + }, + } + + if diff := cmp.Diff(resp, expected, protocmp.Transform()); diff != "" { + return fmt.Errorf("expected response to be %+v, was %+v", expected, resp) + } + return nil + }, + }, + } + for _, tc := range testCases { + t.Run(tc.Description, func(t *testing.T) { + ctx := user.NewContext(context.Background(), userID) + + logger := log.NewNoop() + mockStarRepo := new(mocks.StarRepository) + if tc.Setup != nil { + tc.Setup(ctx, mockStarRepo) + } + defer mockStarRepo.AssertExpectations(t) + + handler := api.NewGRPCHandler(logger, &api.Dependencies{ + StarRepository: mockStarRepo, + }) + + got, err := handler.GetMyStarredAsset(ctx, &compassv1beta1.GetMyStarredAssetRequest{ + AssetId: assetID, + }) + code := status.Code(err) + if code != tc.ExpectStatus { + t.Errorf("expected handler to return Code %s, returned Code %sinstead", tc.ExpectStatus.String(), code.String()) + return + } + if tc.PostCheck != nil { + if err := tc.PostCheck(got); err != nil { + t.Error(err) + return + } + } + }) + } +} + +func TestStarAsset(t *testing.T) { + var ( + userID = uuid.NewString() + assetID = uuid.NewString() + ) + type testCase struct { + Description string + ExpectStatus codes.Code + Setup func(context.Context, *mocks.StarRepository) + } + + var testCases = []testCase{ + { + Description: "should return invalid argument if asset id in param is invalid", + ExpectStatus: codes.InvalidArgument, + Setup: func(ctx context.Context, er *mocks.StarRepository) { + er.EXPECT().Create(ctx, userID, assetID).Return("", star.ErrEmptyAssetID) + }, + }, + { + Description: "should return invalid argument if star repository return invalid error", + ExpectStatus: codes.InvalidArgument, + Setup: func(ctx context.Context, er *mocks.StarRepository) { + er.EXPECT().Create(ctx, userID, assetID).Return("", star.InvalidError{}) + }, + }, + { + Description: "should return invalid argument if user not found", + ExpectStatus: codes.InvalidArgument, + Setup: func(ctx context.Context, er *mocks.StarRepository) { + er.EXPECT().Create(ctx, userID, assetID).Return("", star.UserNotFoundError{UserID: userID}) + }, + }, + { + Description: "should return internal server error if failed to star an asset", + ExpectStatus: codes.Internal, + Setup: func(ctx context.Context, er *mocks.StarRepository) { + er.EXPECT().Create(ctx, userID, assetID).Return("", errors.New("failed to star an asset")) + }, + }, + { + Description: "should return ok if starring success", + ExpectStatus: codes.OK, + Setup: func(ctx context.Context, er *mocks.StarRepository) { + er.EXPECT().Create(ctx, userID, assetID).Return("1234", nil) + }, + }, + { + Description: "should return ok if asset is already starred", + ExpectStatus: codes.OK, + Setup: func(ctx context.Context, er *mocks.StarRepository) { + er.EXPECT().Create(ctx, userID, assetID).Return("", star.DuplicateRecordError{}) + }, + }, + } + for _, tc := range testCases { + t.Run(tc.Description, func(t *testing.T) { + ctx := user.NewContext(context.Background(), userID) + + logger := log.NewNoop() + mockStarRepo := new(mocks.StarRepository) + if tc.Setup != nil { + tc.Setup(ctx, mockStarRepo) + } + defer mockStarRepo.AssertExpectations(t) + + handler := api.NewGRPCHandler(logger, &api.Dependencies{ + StarRepository: mockStarRepo, + }) + + _, err := handler.StarAsset(ctx, &compassv1beta1.StarAssetRequest{ + AssetId: assetID, + }) + code := status.Code(err) + if code != tc.ExpectStatus { + t.Errorf("expected handler to return Code %s, returned Code %sinstead", tc.ExpectStatus.String(), code.String()) + return + } + }) + } +} + +func TestUnstarAsset(t *testing.T) { + var ( + userID = uuid.NewString() + assetID = uuid.NewString() + ) + type testCase struct { + Description string + ExpectStatus codes.Code + Setup func(context.Context, *mocks.StarRepository) + } + + var testCases = []testCase{ + { + Description: "should return invalid argument if asset id in param is empty", + ExpectStatus: codes.InvalidArgument, + Setup: func(ctx context.Context, er *mocks.StarRepository) { + er.EXPECT().Delete(ctx, userID, assetID).Return(star.ErrEmptyAssetID) + }, + }, + { + Description: "should return invalid argument if star repository return invalid error", + ExpectStatus: codes.InvalidArgument, + Setup: func(ctx context.Context, er *mocks.StarRepository) { + er.EXPECT().Delete(ctx, userID, assetID).Return(star.InvalidError{}) + }, + }, + { + Description: "should return internal server error if failed to unstar an asset", + ExpectStatus: codes.Internal, + Setup: func(ctx context.Context, er *mocks.StarRepository) { + er.EXPECT().Delete(ctx, userID, assetID).Return(errors.New("failed to star an asset")) + }, + }, + { + Description: "should return ok if unstarring success", + ExpectStatus: codes.OK, + Setup: func(ctx context.Context, er *mocks.StarRepository) { + er.EXPECT().Delete(ctx, userID, assetID).Return(nil) + }, + }, + } + for _, tc := range testCases { + t.Run(tc.Description, func(t *testing.T) { + ctx := user.NewContext(context.Background(), userID) + + logger := log.NewNoop() + mockStarRepo := new(mocks.StarRepository) + if tc.Setup != nil { + tc.Setup(ctx, mockStarRepo) + } + defer mockStarRepo.AssertExpectations(t) + + handler := api.NewGRPCHandler(logger, &api.Dependencies{ + StarRepository: mockStarRepo, + }) + + _, err := handler.UnstarAsset(ctx, &compassv1beta1.UnstarAssetRequest{ + AssetId: assetID, + }) + code := status.Code(err) + if code != tc.ExpectStatus { + t.Errorf("expected handler to return Code %s, returned Code %sinstead", tc.ExpectStatus.String(), code.String()) + return + } + }) + } +} + +func TestGetMyDiscussions(t *testing.T) { + var ( + userID = uuid.NewString() + ) + type testCase struct { + Description string + ExpectStatus codes.Code + Request *compassv1beta1.GetMyDiscussionsRequest + Setup func(context.Context, *mocks.DiscussionRepository) + PostCheck func(resp *compassv1beta1.GetMyDiscussionsResponse) error + } + + var testCases = []testCase{ + { + Description: `should return internal server error if fetching fails`, + Request: &compassv1beta1.GetMyDiscussionsRequest{}, + ExpectStatus: codes.Internal, + Setup: func(ctx context.Context, dr *mocks.DiscussionRepository) { + dr.EXPECT().GetAll(ctx, discussion.Filter{ + Type: "all", + State: discussion.StateOpen.String(), + Assignees: []string{userID}, + SortBy: "created_at", + SortDirection: "desc", + DisjointAssigneeOwner: false, + }).Return([]discussion.Discussion{}, errors.New("unknown error")) + }, + }, + { + Description: `should parse querystring to get filter`, + Request: &compassv1beta1.GetMyDiscussionsRequest{ + Type: "issues", + State: "closed", + Labels: "label1,label2,label4", + Asset: "e5d81dcd-3046-4d33-b1ac-efdd221e621d", + Sort: "updated_at", + Direction: "asc", + Size: 30, + Offset: 50, + }, + ExpectStatus: codes.OK, + Setup: func(ctx context.Context, dr *mocks.DiscussionRepository) { + dr.EXPECT().GetAll(ctx, discussion.Filter{ + Type: "issues", + State: "closed", + Assignees: []string{userID}, + Assets: []string{"e5d81dcd-3046-4d33-b1ac-efdd221e621d"}, + Labels: []string{"label1", "label2", "label4"}, + SortBy: "updated_at", + SortDirection: "asc", + Size: 30, + Offset: 50, + DisjointAssigneeOwner: false, + }).Return([]discussion.Discussion{}, nil) + }, + }, { + Description: `should search by assigned or created if filter is all`, + Request: &compassv1beta1.GetMyDiscussionsRequest{ + Filter: "all", + }, + ExpectStatus: codes.OK, + Setup: func(ctx context.Context, dr *mocks.DiscussionRepository) { + dr.EXPECT().GetAll(ctx, discussion.Filter{ + Type: "all", + State: "open", + Assignees: []string{userID}, + Owner: userID, + SortBy: "created_at", + SortDirection: "desc", + DisjointAssigneeOwner: true, + }).Return([]discussion.Discussion{}, nil) + }, + }, + { + Description: `should set filter to default if empty`, + ExpectStatus: codes.OK, + Request: &compassv1beta1.GetMyDiscussionsRequest{}, + Setup: func(ctx context.Context, dr *mocks.DiscussionRepository) { + dr.EXPECT().GetAll(ctx, discussion.Filter{ + Type: "all", + State: "open", + Assignees: []string{userID}, + SortBy: "created_at", + SortDirection: "desc", + Size: 0, + Offset: 0, + DisjointAssigneeOwner: false, + }).Return([]discussion.Discussion{}, nil) + }, + }, + { + Description: "should return ok along with list of discussions", + ExpectStatus: codes.OK, + Request: &compassv1beta1.GetMyDiscussionsRequest{}, + Setup: func(ctx context.Context, dr *mocks.DiscussionRepository) { + dr.EXPECT().GetAll(ctx, discussion.Filter{ + Type: "all", + State: discussion.StateOpen.String(), + Assignees: []string{userID}, + SortBy: "created_at", + SortDirection: "desc", + DisjointAssigneeOwner: false, + }).Return([]discussion.Discussion{ + {ID: "1122"}, + {ID: "2233"}, + }, nil) + }, + PostCheck: func(resp *compassv1beta1.GetMyDiscussionsResponse) error { + expected := &compassv1beta1.GetMyDiscussionsResponse{ + Data: []*compassv1beta1.Discussion{ + {Id: "1122"}, + {Id: "2233"}, + }, + } + + if diff := cmp.Diff(resp, expected, protocmp.Transform()); diff != "" { + return fmt.Errorf("expected response to be %+v, was %+v", expected, resp) + } + return nil + }, + }, + } + for _, tc := range testCases { + t.Run(tc.Description, func(t *testing.T) { + ctx := user.NewContext(context.Background(), userID) + + logger := log.NewNoop() + mockDiscussionRepo := new(mocks.DiscussionRepository) + if tc.Setup != nil { + tc.Setup(ctx, mockDiscussionRepo) + } + defer mockDiscussionRepo.AssertExpectations(t) + + handler := api.NewGRPCHandler(logger, &api.Dependencies{ + DiscussionRepository: mockDiscussionRepo, + }) + + got, err := handler.GetMyDiscussions(ctx, tc.Request) + code := status.Code(err) + if code != tc.ExpectStatus { + t.Errorf("expected handler to return Code %s, returned Code %sinstead", tc.ExpectStatus.String(), code.String()) + return + } + if tc.PostCheck != nil { + if err := tc.PostCheck(got); err != nil { + t.Error(err) + return + } + } + }) + } +} diff --git a/asset/asset_test.go b/asset/asset_test.go index dde99284..7ebca7fc 100644 --- a/asset/asset_test.go +++ b/asset/asset_test.go @@ -583,7 +583,7 @@ func TestNewFromProto(t *testing.T) { got := asset.NewFromProto(tc.AssetPB) if reflect.DeepEqual(got, tc.ExpectAsset) == false { - t.Errorf("expected returned asset to be to be %+v, was %+v", tc.ExpectAsset, got) + t.Errorf("expected returned asset to be %+v, was %+v", tc.ExpectAsset, got) } }) } diff --git a/discussion/comment.go b/discussion/comment.go index 30e5a67e..7e0f2523 100644 --- a/discussion/comment.go +++ b/discussion/comment.go @@ -45,15 +45,35 @@ func (d Comment) ToProto() *compassv1beta1.Comment { } // NewCommentFromProto transforms proto to struct -func NewCommentFromProto(proto *compassv1beta1.Comment) Comment { +func NewCommentFromProto(pb *compassv1beta1.Comment) Comment { + var createdAt time.Time + if pb.GetCreatedAt() != nil { + createdAt = pb.GetCreatedAt().AsTime() + } + + var updatedAt time.Time + if pb.GetUpdatedAt() != nil { + updatedAt = pb.GetUpdatedAt().AsTime() + } + + var owner user.User + if pb.GetOwner() != nil { + owner = user.NewFromProto(pb.GetOwner()) + } + + var updatedBy user.User + if pb.GetUpdatedBy() != nil { + updatedBy = user.NewFromProto(pb.GetUpdatedBy()) + } + return Comment{ - ID: proto.Id, - DiscussionID: proto.DiscussionId, - Body: proto.Body, - Owner: user.NewFromProto(proto.Owner), - UpdatedBy: user.NewFromProto(proto.UpdatedBy), - CreatedAt: proto.CreatedAt.AsTime(), - UpdatedAt: proto.UpdatedAt.AsTime(), + ID: pb.GetId(), + DiscussionID: pb.GetDiscussionId(), + Body: pb.GetBody(), + Owner: owner, + UpdatedBy: updatedBy, + CreatedAt: createdAt, + UpdatedAt: updatedAt, } } diff --git a/discussion/comment_test.go b/discussion/comment_test.go new file mode 100644 index 00000000..9e5825fa --- /dev/null +++ b/discussion/comment_test.go @@ -0,0 +1,76 @@ +package discussion_test + +import ( + "reflect" + "testing" + "time" + + "github.com/google/go-cmp/cmp" + compassv1beta1 "github.com/odpf/columbus/api/proto/odpf/compass/v1beta1" + "github.com/odpf/columbus/discussion" + "github.com/odpf/columbus/user" + "google.golang.org/protobuf/testing/protocmp" + "google.golang.org/protobuf/types/known/timestamppb" +) + +func TestCommentToProto(t *testing.T) { + timeDummy := time.Date(2000, time.January, 7, 0, 0, 0, 0, time.UTC) + type testCase struct { + Title string + Comment *discussion.Comment + ExpectProto *compassv1beta1.Comment + } + + var testCases = []testCase{ + { + Title: "should return no timestamp pb if timestamp is zero", + Comment: &discussion.Comment{ID: "id1"}, + ExpectProto: &compassv1beta1.Comment{Id: "id1"}, + }, + { + Title: "should return timestamp pb if timestamp is not zero", + Comment: &discussion.Comment{ID: "id1", CreatedAt: timeDummy, UpdatedAt: timeDummy}, + ExpectProto: &compassv1beta1.Comment{Id: "id1", CreatedAt: timestamppb.New(timeDummy), UpdatedAt: timestamppb.New(timeDummy)}, + }, + } + for _, tc := range testCases { + t.Run(tc.Title, func(t *testing.T) { + + got := tc.Comment.ToProto() + if diff := cmp.Diff(got, tc.ExpectProto, protocmp.Transform()); diff != "" { + t.Errorf("expected response to be %+v, was %+v", tc.ExpectProto, got) + } + }) + } +} + +func TestNewCommentFromProto(t *testing.T) { + timeDummy := time.Date(2000, time.January, 7, 0, 0, 0, 0, time.UTC) + type testCase struct { + Title string + PB *compassv1beta1.Comment + Expect discussion.Comment + } + + var testCases = []testCase{ + { + Title: "should return non empty time.Time, owner, and updated by if pb is not empty or zero", + PB: &compassv1beta1.Comment{Id: "id1", Owner: &compassv1beta1.User{Id: "uid1"}, UpdatedBy: &compassv1beta1.User{Id: "uid1"}, CreatedAt: timestamppb.New(timeDummy), UpdatedAt: timestamppb.New(timeDummy)}, + Expect: discussion.Comment{ID: "id1", Owner: user.User{ID: "uid1"}, UpdatedBy: user.User{ID: "uid1"}, CreatedAt: timeDummy, UpdatedAt: timeDummy}, + }, + { + Title: "should return empty time.Time, owner, and updated by if pb is empty or zero", + PB: &compassv1beta1.Comment{Id: "id1"}, + Expect: discussion.Comment{ID: "id1"}, + }, + } + for _, tc := range testCases { + t.Run(tc.Title, func(t *testing.T) { + + got := discussion.NewCommentFromProto(tc.PB) + if reflect.DeepEqual(got, tc.Expect) == false { + t.Errorf("expected returned asset to be %+v, was %+v", tc.Expect, got) + } + }) + } +} diff --git a/discussion/discussion.go b/discussion/discussion.go index 63ed5bd4..24f88ff9 100644 --- a/discussion/discussion.go +++ b/discussion/discussion.go @@ -43,6 +43,17 @@ type Discussion struct { // ToProto transforms struct to proto func (d Discussion) ToProto() *compassv1beta1.Discussion { + + var createdAtPB *timestamppb.Timestamp + if !d.CreatedAt.IsZero() { + createdAtPB = timestamppb.New(d.CreatedAt) + } + + var updatedAtPB *timestamppb.Timestamp + if !d.UpdatedAt.IsZero() { + updatedAtPB = timestamppb.New(d.UpdatedAt) + } + return &compassv1beta1.Discussion{ Id: d.ID, Title: d.Title, @@ -53,25 +64,40 @@ func (d Discussion) ToProto() *compassv1beta1.Discussion { Assets: d.Assets, Assignees: d.Assignees, Owner: d.Owner.ToProto(), - CreatedAt: timestamppb.New(d.CreatedAt), - UpdatedAt: timestamppb.New(d.UpdatedAt), + CreatedAt: createdAtPB, + UpdatedAt: updatedAtPB, } } // NewFromProto transforms proto to struct -func NewFromProto(proto *compassv1beta1.Discussion) Discussion { +func NewFromProto(pb *compassv1beta1.Discussion) Discussion { + var createdAt time.Time + if pb.GetCreatedAt() != nil { + createdAt = pb.GetCreatedAt().AsTime() + } + + var updatedAt time.Time + if pb.GetUpdatedAt() != nil { + updatedAt = pb.GetUpdatedAt().AsTime() + } + + var owner user.User + if pb.GetOwner() != nil { + owner = user.NewFromProto(pb.GetOwner()) + } + return Discussion{ - ID: proto.Id, - Title: proto.Title, - Body: proto.Body, - Type: GetTypeEnum(proto.Type), - State: GetStateEnum(proto.State), - Labels: proto.Labels, - Assets: proto.Assets, - Assignees: proto.Assignees, - Owner: user.NewFromProto(proto.Owner), - CreatedAt: proto.CreatedAt.AsTime(), - UpdatedAt: proto.UpdatedAt.AsTime(), + ID: pb.GetId(), + Title: pb.GetTitle(), + Body: pb.GetBody(), + Type: GetTypeEnum(pb.GetType()), + State: GetStateEnum(pb.GetState()), + Labels: pb.GetLabels(), + Assets: pb.GetAssets(), + Assignees: pb.GetAssignees(), + Owner: owner, + CreatedAt: createdAt, + UpdatedAt: updatedAt, } } diff --git a/discussion/discussion_test.go b/discussion/discussion_test.go index b740108d..3f3bcc0b 100644 --- a/discussion/discussion_test.go +++ b/discussion/discussion_test.go @@ -2,11 +2,17 @@ package discussion_test import ( "errors" + "reflect" "testing" "time" + "github.com/google/go-cmp/cmp" + compassv1beta1 "github.com/odpf/columbus/api/proto/odpf/compass/v1beta1" "github.com/odpf/columbus/discussion" + "github.com/odpf/columbus/user" "github.com/stretchr/testify/assert" + "google.golang.org/protobuf/testing/protocmp" + "google.golang.org/protobuf/types/known/timestamppb" ) func TestIsEmpty(t *testing.T) { @@ -121,3 +127,65 @@ func TestValidateDiscussion(t *testing.T) { }) } } + +func TestToProto(t *testing.T) { + timeDummy := time.Date(2000, time.January, 7, 0, 0, 0, 0, time.UTC) + type testCase struct { + Title string + Discussion *discussion.Discussion + ExpectProto *compassv1beta1.Discussion + } + + var testCases = []testCase{ + { + Title: "should return no timestamp pb if timestamp is zero", + Discussion: &discussion.Discussion{ID: "id1"}, + ExpectProto: &compassv1beta1.Discussion{Id: "id1"}, + }, + { + Title: "should return timestamp pb if timestamp is not zero", + Discussion: &discussion.Discussion{ID: "id1", CreatedAt: timeDummy, UpdatedAt: timeDummy}, + ExpectProto: &compassv1beta1.Discussion{Id: "id1", CreatedAt: timestamppb.New(timeDummy), UpdatedAt: timestamppb.New(timeDummy)}, + }, + } + for _, tc := range testCases { + t.Run(tc.Title, func(t *testing.T) { + + got := tc.Discussion.ToProto() + if diff := cmp.Diff(got, tc.ExpectProto, protocmp.Transform()); diff != "" { + t.Errorf("expected response to be %+v, was %+v", tc.ExpectProto, got) + } + }) + } +} + +func TestNewFromProto(t *testing.T) { + timeDummy := time.Date(2000, time.January, 7, 0, 0, 0, 0, time.UTC) + type testCase struct { + Title string + DiscussionPB *compassv1beta1.Discussion + ExpectDiscussion discussion.Discussion + } + + var testCases = []testCase{ + { + Title: "should return non empty time.Time and owner if pb is not empty or zero", + DiscussionPB: &compassv1beta1.Discussion{Id: "id1", Owner: &compassv1beta1.User{Id: "uid1"}, CreatedAt: timestamppb.New(timeDummy), UpdatedAt: timestamppb.New(timeDummy)}, + ExpectDiscussion: discussion.Discussion{ID: "id1", Owner: user.User{ID: "uid1"}, Type: "openended", State: "open", CreatedAt: timeDummy, UpdatedAt: timeDummy}, + }, + { + Title: "should return empty time.Time and owner if pb is empty or zero", + DiscussionPB: &compassv1beta1.Discussion{Id: "id1"}, + ExpectDiscussion: discussion.Discussion{ID: "id1", Type: "openended", State: "open"}, + }, + } + for _, tc := range testCases { + t.Run(tc.Title, func(t *testing.T) { + + got := discussion.NewFromProto(tc.DiscussionPB) + if reflect.DeepEqual(got, tc.ExpectDiscussion) == false { + t.Errorf("expected returned asset to be %+v, was %+v", tc.ExpectDiscussion, got) + } + }) + } +} diff --git a/tag/tag.go b/tag/tag.go index 37c8bbf5..a5e6a137 100644 --- a/tag/tag.go +++ b/tag/tag.go @@ -1,12 +1,23 @@ package tag //go:generate mockery --name TagRepository --outpkg mocks --output ../lib/mocks/ --with-expecter --structname TagRepository --filename tag_repository.go - import ( "context" "time" + + compassv1beta1 "github.com/odpf/columbus/api/proto/odpf/compass/v1beta1" + "google.golang.org/protobuf/types/known/structpb" + "google.golang.org/protobuf/types/known/timestamppb" ) +// TagRepository is a contract to communicate with the primary store +type TagRepository interface { + Create(ctx context.Context, tag *Tag) error + Read(ctx context.Context, filter Tag) ([]Tag, error) + Update(ctx context.Context, tag *Tag) error + Delete(ctx context.Context, filter Tag) error +} + // Tag is the tag to be managed type Tag struct { RecordType string `json:"record_type" validate:"required"` @@ -17,6 +28,47 @@ type Tag struct { TemplateDescription string `json:"template_description"` } +// ToProto convert domain to protobuf +func (t Tag) ToProto() (*compassv1beta1.Tag, error) { + var tagValuesPB []*compassv1beta1.TagValue + for _, tv := range t.TagValues { + tvPB, err := tv.ToProto() + if err != nil { + return nil, err + } + tagValuesPB = append(tagValuesPB, tvPB) + } + + return &compassv1beta1.Tag{ + RecordType: t.RecordType, + RecordUrn: t.RecordURN, + TemplateUrn: t.TemplateURN, + TagValues: tagValuesPB, + TemplateDisplayName: t.TemplateDisplayName, + TemplateDescription: t.TemplateDescription, + }, nil +} + +// NewFromProto converts proto to tag.Tag +func NewFromProto(pb *compassv1beta1.Tag) Tag { + var tagValues []TagValue + if pb.GetTagValues() != nil { + for _, tvPB := range pb.GetTagValues() { + tv := NewTagValueFromProto(tvPB) + tagValues = append(tagValues, tv) + } + } + + return Tag{ + RecordType: pb.GetRecordType(), + RecordURN: pb.GetRecordUrn(), + TemplateURN: pb.GetTemplateUrn(), + TagValues: tagValues, + TemplateDisplayName: pb.GetTemplateDisplayName(), + TemplateDescription: pb.GetTemplateDescription(), + } +} + // TagValue is one of the value for a tag type TagValue struct { FieldID uint `json:"field_id" validate:"required"` @@ -31,10 +83,68 @@ type TagValue struct { UpdatedAt time.Time `json:"updated_at"` } -// TagRepository is a contract to communicate with the primary store -type TagRepository interface { - Create(ctx context.Context, tag *Tag) error - Read(ctx context.Context, filter Tag) ([]Tag, error) - Update(ctx context.Context, tag *Tag) error - Delete(ctx context.Context, filter Tag) error +// ToProto convert domain to protobuf +func (tv TagValue) ToProto() (*compassv1beta1.TagValue, error) { + var err error + var createdAtPB *timestamppb.Timestamp + if !tv.CreatedAt.IsZero() { + createdAtPB = timestamppb.New(tv.CreatedAt) + } + + var updatedAtPB *timestamppb.Timestamp + if !tv.UpdatedAt.IsZero() { + updatedAtPB = timestamppb.New(tv.UpdatedAt) + } + + var fieldValuePB *structpb.Value + if tv.FieldValue != nil { + fieldValuePB, err = structpb.NewValue(tv.FieldValue) + if err != nil { + return nil, err + } + } + + return &compassv1beta1.TagValue{ + FieldId: uint32(tv.FieldID), + FieldValue: fieldValuePB, + FieldUrn: tv.FieldURN, + FieldDisplayName: tv.FieldDisplayName, + FieldDescription: tv.FieldDescription, + FieldDataType: tv.FieldDataType, + FieldOptions: tv.FieldOptions, + FieldRequired: tv.FieldRequired, + CreatedAt: createdAtPB, + UpdatedAt: updatedAtPB, + }, nil +} + +// NewTagValueFromProto converts proto to tag.TagValue +func NewTagValueFromProto(pb *compassv1beta1.TagValue) TagValue { + var createdAt time.Time + if pb.GetCreatedAt() != nil { + createdAt = pb.GetCreatedAt().AsTime() + } + + var updatedAt time.Time + if pb.GetUpdatedAt() != nil { + updatedAt = pb.GetUpdatedAt().AsTime() + } + + var fieldValue interface{} + if pb.GetFieldValue() != nil { + fieldValue = pb.GetFieldValue().AsInterface() + } + + return TagValue{ + FieldID: uint(pb.GetFieldId()), + FieldValue: fieldValue, + FieldURN: pb.GetFieldUrn(), + FieldDisplayName: pb.GetFieldDisplayName(), + FieldDescription: pb.GetFieldDescription(), + FieldDataType: pb.GetFieldDataType(), + FieldOptions: pb.GetFieldOptions(), + FieldRequired: pb.GetFieldRequired(), + CreatedAt: createdAt, + UpdatedAt: updatedAt, + } } diff --git a/tag/tag_template.go b/tag/tag_template.go index 3dbadc8f..8dc634f7 100644 --- a/tag/tag_template.go +++ b/tag/tag_template.go @@ -5,8 +5,20 @@ package tag import ( "context" "time" + + compassv1beta1 "github.com/odpf/columbus/api/proto/odpf/compass/v1beta1" + "google.golang.org/protobuf/types/known/timestamppb" ) +// TagTemplateRepository is a contract to communicate with the primary store +type TagTemplateRepository interface { + Create(ctx context.Context, template *Template) error + Read(ctx context.Context, templateURN string) ([]Template, error) + ReadAll(ctx context.Context) ([]Template, error) + Update(ctx context.Context, templateURN string, template *Template) error + Delete(ctx context.Context, templateURN string) error +} + // Template is a template of a tag for a resource type Template struct { URN string `json:"urn" validate:"required"` @@ -17,6 +29,62 @@ type Template struct { UpdatedAt time.Time `json:"updated_at"` } +// ToProto convert domain to protobuf +func (t Template) ToProto() *compassv1beta1.TagTemplate { + var templateFieldsPB []*compassv1beta1.TagTemplateField + for _, tf := range t.Fields { + templateFieldsPB = append(templateFieldsPB, tf.ToProto()) + } + + var createdAtPB *timestamppb.Timestamp + if !t.CreatedAt.IsZero() { + createdAtPB = timestamppb.New(t.CreatedAt) + } + + var updatedAtPB *timestamppb.Timestamp + if !t.UpdatedAt.IsZero() { + updatedAtPB = timestamppb.New(t.UpdatedAt) + } + + return &compassv1beta1.TagTemplate{ + Urn: t.URN, + DisplayName: t.DisplayName, + Description: t.Description, + Fields: templateFieldsPB, + CreatedAt: createdAtPB, + UpdatedAt: updatedAtPB, + } +} + +// NewTemplateFromProto converts proto to tag.Template +func NewTemplateFromProto(pb *compassv1beta1.TagTemplate) Template { + var createdAt time.Time + if pb.GetCreatedAt() != nil { + createdAt = pb.GetCreatedAt().AsTime() + } + + var updatedAt time.Time + if pb.GetUpdatedAt() != nil { + updatedAt = pb.GetUpdatedAt().AsTime() + } + + var fields []Field + if pb.GetFields() != nil { + for _, tfPB := range pb.GetFields() { + fields = append(fields, NewTemplateFieldFromProto(tfPB)) + } + } + + return Template{ + URN: pb.GetUrn(), + DisplayName: pb.GetDisplayName(), + Description: pb.GetDescription(), + Fields: fields, + CreatedAt: createdAt, + UpdatedAt: updatedAt, + } +} + // Field is a field for a single template type Field struct { ID uint `json:"id"` @@ -30,11 +98,52 @@ type Field struct { UpdatedAt time.Time `json:"updated_at"` } -// TagTemplateRepository is a contract to communicate with the primary store -type TagTemplateRepository interface { - Create(ctx context.Context, template *Template) error - Read(ctx context.Context, templateURN string) ([]Template, error) - ReadAll(ctx context.Context) ([]Template, error) - Update(ctx context.Context, templateURN string, template *Template) error - Delete(ctx context.Context, templateURN string) error +// ToProto convert domain to protobuf +func (f Field) ToProto() *compassv1beta1.TagTemplateField { + var createdAtPB *timestamppb.Timestamp + if !f.CreatedAt.IsZero() { + createdAtPB = timestamppb.New(f.CreatedAt) + } + + var updatedAtPB *timestamppb.Timestamp + if !f.UpdatedAt.IsZero() { + updatedAtPB = timestamppb.New(f.UpdatedAt) + } + + return &compassv1beta1.TagTemplateField{ + Id: uint32(f.ID), + Urn: f.URN, + DisplayName: f.DisplayName, + Description: f.Description, + DataType: f.DataType, + Options: f.Options, + Required: f.Required, + CreatedAt: createdAtPB, + UpdatedAt: updatedAtPB, + } +} + +// NewTemplateFieldFromProto converts proto to tag.Field +func NewTemplateFieldFromProto(pb *compassv1beta1.TagTemplateField) Field { + var createdAt time.Time + if pb.GetCreatedAt() != nil { + createdAt = pb.GetCreatedAt().AsTime() + } + + var updatedAt time.Time + if pb.GetUpdatedAt() != nil { + updatedAt = pb.GetUpdatedAt().AsTime() + } + + return Field{ + ID: uint(pb.GetId()), + URN: pb.GetUrn(), + DisplayName: pb.GetDisplayName(), + Description: pb.GetDescription(), + DataType: pb.GetDataType(), + Options: pb.GetOptions(), + Required: pb.GetRequired(), + CreatedAt: createdAt, + UpdatedAt: updatedAt, + } } diff --git a/tag/tag_template_test.go b/tag/tag_template_test.go new file mode 100644 index 00000000..9b89582f --- /dev/null +++ b/tag/tag_template_test.go @@ -0,0 +1,137 @@ +package tag_test + +import ( + "reflect" + "testing" + "time" + + "github.com/google/go-cmp/cmp" + compassv1beta1 "github.com/odpf/columbus/api/proto/odpf/compass/v1beta1" + "github.com/odpf/columbus/tag" + "google.golang.org/protobuf/testing/protocmp" + "google.golang.org/protobuf/types/known/timestamppb" +) + +func TestTemplateToProto(t *testing.T) { + timeDummy := time.Date(2000, time.January, 7, 0, 0, 0, 0, time.UTC) + type testCase struct { + Title string + Template tag.Template + ExpectProto *compassv1beta1.TagTemplate + } + + var testCases = []testCase{ + { + Title: "should return no timestamp pb and empty template field pb if timestamp and template field are empty", + Template: tag.Template{URN: "urn", DisplayName: "display-name", Description: "description"}, + ExpectProto: &compassv1beta1.TagTemplate{Urn: "urn", DisplayName: "display-name", Description: "description"}, + }, + { + Title: "should return timestamp pb and template field pb if timestamp and template field are not empty", + Template: tag.Template{URN: "urn", DisplayName: "display-name", Description: "description", Fields: []tag.Field{{ID: 12, URN: "urn1"}}, CreatedAt: timeDummy, UpdatedAt: timeDummy}, + ExpectProto: &compassv1beta1.TagTemplate{Urn: "urn", DisplayName: "display-name", Description: "description", Fields: []*compassv1beta1.TagTemplateField{{Id: 12, Urn: "urn1"}}, CreatedAt: timestamppb.New(timeDummy), UpdatedAt: timestamppb.New(timeDummy)}, + }, + } + for _, tc := range testCases { + t.Run(tc.Title, func(t *testing.T) { + + got := tc.Template.ToProto() + if diff := cmp.Diff(got, tc.ExpectProto, protocmp.Transform()); diff != "" { + t.Errorf("expected response to be %+v, was %+v", tc.ExpectProto, got) + } + }) + } +} + +func TestNewTemplateFromProto(t *testing.T) { + timeDummy := time.Date(2000, time.January, 7, 0, 0, 0, 0, time.UTC) + type testCase struct { + Title string + PB *compassv1beta1.TagTemplate + Expect tag.Template + } + + var testCases = []testCase{ + { + Title: "should return non empty time.Time and field if timestamp pb and field pb are not empty or zero", + PB: &compassv1beta1.TagTemplate{Urn: "urn", DisplayName: "display-name", Description: "description", Fields: []*compassv1beta1.TagTemplateField{{Id: 12, Urn: "urn1"}}, CreatedAt: timestamppb.New(timeDummy), UpdatedAt: timestamppb.New(timeDummy)}, + Expect: tag.Template{URN: "urn", DisplayName: "display-name", Description: "description", Fields: []tag.Field{{ID: 12, URN: "urn1"}}, CreatedAt: timeDummy, UpdatedAt: timeDummy}, + }, + { + Title: "should return empty time.Time and empty field if timestamp pb and field pb are empty or zero", + PB: &compassv1beta1.TagTemplate{Urn: "urn", DisplayName: "display-name", Description: "description"}, + Expect: tag.Template{URN: "urn", DisplayName: "display-name", Description: "description"}, + }, + } + for _, tc := range testCases { + t.Run(tc.Title, func(t *testing.T) { + + got := tag.NewTemplateFromProto(tc.PB) + if reflect.DeepEqual(got, tc.Expect) == false { + t.Errorf("expected returned asset to be %+v, was %+v", tc.Expect, got) + } + }) + } +} + +func TestTemplateFieldToProto(t *testing.T) { + timeDummy := time.Date(2000, time.January, 7, 0, 0, 0, 0, time.UTC) + type testCase struct { + Title string + Field tag.Field + ExpectProto *compassv1beta1.TagTemplateField + } + + var testCases = []testCase{ + { + Title: "should return no timestamp pb if timestamp is empty", + Field: tag.Field{ID: 123, URN: "urn"}, + ExpectProto: &compassv1beta1.TagTemplateField{Id: 123, Urn: "urn"}, + }, + { + Title: "should return timestamp pb if timestamp is not empty or zero", + Field: tag.Field{ID: 123, URN: "urn", CreatedAt: timeDummy, UpdatedAt: timeDummy}, + ExpectProto: &compassv1beta1.TagTemplateField{Id: 123, Urn: "urn", CreatedAt: timestamppb.New(timeDummy), UpdatedAt: timestamppb.New(timeDummy)}, + }, + } + for _, tc := range testCases { + t.Run(tc.Title, func(t *testing.T) { + + got := tc.Field.ToProto() + if diff := cmp.Diff(got, tc.ExpectProto, protocmp.Transform()); diff != "" { + t.Errorf("expected response to be %+v, was %+v", tc.ExpectProto, got) + } + }) + } +} + +func TestNewTemplateFieldFromProto(t *testing.T) { + timeDummy := time.Date(2000, time.January, 7, 0, 0, 0, 0, time.UTC) + type testCase struct { + Title string + PB *compassv1beta1.TagTemplateField + Expect tag.Field + } + + var testCases = []testCase{ + { + Title: "should return non empty time.Time if timestamp pb is not empty", + PB: &compassv1beta1.TagTemplateField{Id: 123, Urn: "urn", CreatedAt: timestamppb.New(timeDummy), UpdatedAt: timestamppb.New(timeDummy)}, + Expect: tag.Field{ID: 123, URN: "urn", CreatedAt: timeDummy, UpdatedAt: timeDummy}, + }, + { + Title: "should return empty time.Time if timestamp pb is empty or zero", + PB: &compassv1beta1.TagTemplateField{Id: 123, Urn: "urn"}, + Expect: tag.Field{ID: 123, URN: "urn"}, + }, + } + for _, tc := range testCases { + t.Run(tc.Title, func(t *testing.T) { + + got := tag.NewTemplateFieldFromProto(tc.PB) + if reflect.DeepEqual(got, tc.Expect) == false { + t.Errorf("expected returned asset to be %+v, was %+v", tc.Expect, got) + } + }) + } +} diff --git a/tag/tag_test.go b/tag/tag_test.go new file mode 100644 index 00000000..e75e8f18 --- /dev/null +++ b/tag/tag_test.go @@ -0,0 +1,142 @@ +package tag_test + +import ( + "reflect" + "testing" + "time" + + "github.com/google/go-cmp/cmp" + compassv1beta1 "github.com/odpf/columbus/api/proto/odpf/compass/v1beta1" + "github.com/odpf/columbus/tag" + "google.golang.org/protobuf/testing/protocmp" + "google.golang.org/protobuf/types/known/structpb" + "google.golang.org/protobuf/types/known/timestamppb" +) + +func TestTagToProto(t *testing.T) { + type testCase struct { + Title string + Tag tag.Tag + ExpectProto *compassv1beta1.Tag + } + + var testCases = []testCase{ + { + Title: "should return empty field value pb if tag values is empty", + Tag: tag.Tag{RecordType: "type", RecordURN: "urn"}, + ExpectProto: &compassv1beta1.Tag{RecordType: "type", RecordUrn: "urn"}, + }, + { + Title: "should return tag value pb if tag values is not empty", + Tag: tag.Tag{RecordType: "type", RecordURN: "urn", TagValues: []tag.TagValue{{FieldID: 123, FieldURN: "urn"}}}, + ExpectProto: &compassv1beta1.Tag{RecordType: "type", RecordUrn: "urn", TagValues: []*compassv1beta1.TagValue{{FieldId: 123, FieldUrn: "urn"}}}, + }, + } + for _, tc := range testCases { + t.Run(tc.Title, func(t *testing.T) { + + got, err := tc.Tag.ToProto() + if err != nil { + t.Fatal(err) + } + if diff := cmp.Diff(got, tc.ExpectProto, protocmp.Transform()); diff != "" { + t.Errorf("expected response to be %+v, was %+v", tc.ExpectProto, got) + } + }) + } +} + +func TestNewTagFromProto(t *testing.T) { + type testCase struct { + Title string + PB *compassv1beta1.Tag + Expect tag.Tag + } + + var testCases = []testCase{ + { + Title: "should return non empty tag values if tag values pb are not empty", + PB: &compassv1beta1.Tag{RecordType: "type", RecordUrn: "urn", TagValues: []*compassv1beta1.TagValue{{FieldId: 123, FieldUrn: "urn"}}}, + Expect: tag.Tag{RecordType: "type", RecordURN: "urn", TagValues: []tag.TagValue{{FieldID: 123, FieldURN: "urn"}}}, + }, + { + Title: "should return empty tag values if tag values pb are empty", + PB: &compassv1beta1.Tag{RecordType: "type", RecordUrn: "urn"}, + Expect: tag.Tag{RecordType: "type", RecordURN: "urn"}, + }, + } + for _, tc := range testCases { + t.Run(tc.Title, func(t *testing.T) { + + got := tag.NewFromProto(tc.PB) + if reflect.DeepEqual(got, tc.Expect) == false { + t.Errorf("expected returned asset to be %+v, was %+v", tc.Expect, got) + } + }) + } +} + +func TestTagValueToProto(t *testing.T) { + timeDummy := time.Date(2000, time.January, 7, 0, 0, 0, 0, time.UTC) + type testCase struct { + Title string + TagValue tag.TagValue + ExpectProto *compassv1beta1.TagValue + } + + var testCases = []testCase{ + { + Title: "should return no timestamp pb and empty field value pb if timestamp and field value are empty or zero", + TagValue: tag.TagValue{FieldID: 123, FieldURN: "urn"}, + ExpectProto: &compassv1beta1.TagValue{FieldId: 123, FieldUrn: "urn"}, + }, + { + Title: "should return timestamp pb and field value pb if timestamp and field value are not empty or zero", + TagValue: tag.TagValue{FieldID: 123, FieldURN: "urn", FieldValue: "a value", CreatedAt: timeDummy, UpdatedAt: timeDummy}, + ExpectProto: &compassv1beta1.TagValue{FieldId: 123, FieldUrn: "urn", FieldValue: structpb.NewStringValue("a value"), CreatedAt: timestamppb.New(timeDummy), UpdatedAt: timestamppb.New(timeDummy)}, + }, + } + for _, tc := range testCases { + t.Run(tc.Title, func(t *testing.T) { + + got, err := tc.TagValue.ToProto() + if err != nil { + t.Fatal(err) + } + if diff := cmp.Diff(got, tc.ExpectProto, protocmp.Transform()); diff != "" { + t.Errorf("expected response to be %+v, was %+v", tc.ExpectProto, got) + } + }) + } +} + +func TestNewTagValueFromProto(t *testing.T) { + timeDummy := time.Date(2000, time.January, 7, 0, 0, 0, 0, time.UTC) + type testCase struct { + Title string + PB *compassv1beta1.TagValue + Expect tag.TagValue + } + + var testCases = []testCase{ + { + Title: "should return non empty time.Time and field value if timestamp pb and field value pb are not empty or zero", + PB: &compassv1beta1.TagValue{FieldId: 123, FieldUrn: "urn", FieldValue: structpb.NewStringValue("a value"), CreatedAt: timestamppb.New(timeDummy), UpdatedAt: timestamppb.New(timeDummy)}, + Expect: tag.TagValue{FieldID: 123, FieldURN: "urn", FieldValue: "a value", CreatedAt: timeDummy, UpdatedAt: timeDummy}, + }, + { + Title: "should return empty time.Time and empty field value if timestamp pb and field value pb are empty or zero", + PB: &compassv1beta1.TagValue{FieldId: 123, FieldUrn: "urn"}, + Expect: tag.TagValue{FieldID: 123, FieldURN: "urn"}, + }, + } + for _, tc := range testCases { + t.Run(tc.Title, func(t *testing.T) { + + got := tag.NewTagValueFromProto(tc.PB) + if reflect.DeepEqual(got, tc.Expect) == false { + t.Errorf("expected returned asset to be %+v, was %+v", tc.Expect, got) + } + }) + } +} diff --git a/third_party/OpenAPI/compass.swagger.json b/third_party/OpenAPI/compass.swagger.json index 370203d4..99422f1b 100644 --- a/third_party/OpenAPI/compass.swagger.json +++ b/third_party/OpenAPI/compass.swagger.json @@ -15,7 +15,8 @@ } ], "schemes": [ - "http" + "http", + "https" ], "consumes": [ "application/json" @@ -36,6 +37,30 @@ "$ref": "#/definitions/v1beta1GetAllAssetsResponse" } }, + "400": { + "description": "Returned when the data that user input is wrong.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "409": { + "description": "Returned when the resource already exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "500": { + "description": "Returned when theres is something wrong on the server side.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -104,6 +129,30 @@ "$ref": "#/definitions/v1beta1UpsertAssetResponse" } }, + "400": { + "description": "Returned when the data that user input is wrong.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "409": { + "description": "Returned when the resource already exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "500": { + "description": "Returned when theres is something wrong on the server side.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -136,6 +185,30 @@ "$ref": "#/definitions/v1beta1UpsertPatchAssetResponse" } }, + "400": { + "description": "Returned when the data that user input is wrong.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "409": { + "description": "Returned when the resource already exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "500": { + "description": "Returned when theres is something wrong on the server side.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -170,6 +243,30 @@ "$ref": "#/definitions/v1beta1GetAssetByIDResponse" } }, + "400": { + "description": "Returned when the data that user input is wrong.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "409": { + "description": "Returned when the resource already exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "500": { + "description": "Returned when theres is something wrong on the server side.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -200,6 +297,30 @@ "$ref": "#/definitions/v1beta1DeleteAssetResponse" } }, + "400": { + "description": "Returned when the data that user input is wrong.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "409": { + "description": "Returned when the resource already exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "500": { + "description": "Returned when theres is something wrong on the server side.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -232,6 +353,30 @@ "$ref": "#/definitions/v1beta1GetAssetStargazersResponse" } }, + "400": { + "description": "Returned when the data that user input is wrong.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "409": { + "description": "Returned when the resource already exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "500": { + "description": "Returned when theres is something wrong on the server side.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -278,6 +423,30 @@ "$ref": "#/definitions/v1beta1GetAssetVersionHistoryResponse" } }, + "400": { + "description": "Returned when the data that user input is wrong.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "409": { + "description": "Returned when the resource already exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "500": { + "description": "Returned when theres is something wrong on the server side.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -324,6 +493,30 @@ "$ref": "#/definitions/v1beta1GetAssetByVersionResponse" } }, + "400": { + "description": "Returned when the data that user input is wrong.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "409": { + "description": "Returned when the resource already exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "500": { + "description": "Returned when theres is something wrong on the server side.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -361,6 +554,30 @@ "$ref": "#/definitions/v1beta1GetAllDiscussionsResponse" } }, + "400": { + "description": "Returned when the data that user input is wrong.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "409": { + "description": "Returned when the resource already exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "500": { + "description": "Returned when theres is something wrong on the server side.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -446,6 +663,30 @@ "$ref": "#/definitions/v1beta1CreateDiscussionResponse" } }, + "400": { + "description": "Returned when the data that user input is wrong.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "409": { + "description": "Returned when the resource already exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "500": { + "description": "Returned when theres is something wrong on the server side.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -479,6 +720,30 @@ "$ref": "#/definitions/v1beta1GetAllCommentsResponse" } }, + "400": { + "description": "Returned when the data that user input is wrong.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "409": { + "description": "Returned when the resource already exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "500": { + "description": "Returned when theres is something wrong on the server side.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -535,6 +800,30 @@ "$ref": "#/definitions/v1beta1CreateCommentResponse" } }, + "400": { + "description": "Returned when the data that user input is wrong.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "409": { + "description": "Returned when the resource already exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "500": { + "description": "Returned when theres is something wrong on the server side.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -559,12 +848,7 @@ "body": { "type": "string" } - }, - "description": "Request to be sent to create a comment", - "title": "CreateCommentRequest", - "required": [ - "body" - ] + } } } ], @@ -585,6 +869,30 @@ "$ref": "#/definitions/v1beta1GetCommentResponse" } }, + "400": { + "description": "Returned when the data that user input is wrong.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "409": { + "description": "Returned when the resource already exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "500": { + "description": "Returned when theres is something wrong on the server side.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -621,6 +929,30 @@ "$ref": "#/definitions/v1beta1DeleteCommentResponse" } }, + "400": { + "description": "Returned when the data that user input is wrong.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "409": { + "description": "Returned when the resource already exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "500": { + "description": "Returned when theres is something wrong on the server side.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -657,6 +989,30 @@ "$ref": "#/definitions/v1beta1UpdateCommentResponse" } }, + "400": { + "description": "Returned when the data that user input is wrong.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "409": { + "description": "Returned when the resource already exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "500": { + "description": "Returned when theres is something wrong on the server side.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -687,8 +1043,7 @@ "body": { "type": "string" } - }, - "title": "UpdateCommentRequest" + } } } ], @@ -709,21 +1064,45 @@ "$ref": "#/definitions/v1beta1GetDiscussionResponse" } }, - "default": { - "description": "An unexpected error response.", + "400": { + "description": "Returned when the data that user input is wrong.", "schema": { "$ref": "#/definitions/rpcStatus" } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - } - ], + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "409": { + "description": "Returned when the resource already exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "500": { + "description": "Returned when theres is something wrong on the server side.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + } + ], "tags": [ "Discussion" ] @@ -738,6 +1117,30 @@ "$ref": "#/definitions/v1beta1PatchDiscussionResponse" } }, + "400": { + "description": "Returned when the data that user input is wrong.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "409": { + "description": "Returned when the resource already exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "500": { + "description": "Returned when theres is something wrong on the server side.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -789,8 +1192,7 @@ "type": "string" } } - }, - "title": "PatchDiscussionRequest" + } } } ], @@ -811,6 +1213,30 @@ "$ref": "#/definitions/v1beta1GetGraphResponse" } }, + "400": { + "description": "Returned when the data that user input is wrong.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "409": { + "description": "Returned when the resource already exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "500": { + "description": "Returned when theres is something wrong on the server side.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -832,16 +1258,40 @@ ] } }, - "/v1beta1/search": { + "/v1beta1/me/discussions": { "get": { - "summary": "Search for an asset", - "description": "API for querying documents. 'text' is fuzzy matched against all the available datasets, and matched results are returned. You can specify additional match criteria using 'filter.*' query parameters. You can specify each filter multiple times to specify a set of values for those filters. For instance, to specify two landscape 'vn' and 'th', the query could be `/search/?text=\u003ctext\u003e\u0026filter.environment=integration\u0026filter.landscape=vn\u0026filter.landscape=th`", - "operationId": "CompassService_SearchAssets", + "summary": "Get all discussions of a user", + "description": "Returns all discussions given possible filters of a user", + "operationId": "CompassService_GetMyDiscussions", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/v1beta1SearchAssetsResponse" + "$ref": "#/definitions/v1beta1GetMyDiscussionsResponse" + } + }, + "400": { + "description": "Returned when the data that user input is wrong.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "409": { + "description": "Returned when the resource already exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "500": { + "description": "Returned when theres is something wrong on the server side.", + "schema": { + "$ref": "#/definitions/rpcStatus" } }, "default": { @@ -853,29 +1303,56 @@ }, "parameters": [ { - "name": "text", - "description": "text to search for (fuzzy)", + "name": "filter", "in": "query", "required": false, "type": "string" }, { - "name": "rankby", - "description": "descendingly sort based on a numeric field in the record. the nested field is written with period separated field name. eg, \"data.profile.usage_count\"", + "name": "type", "in": "query", "required": false, "type": "string" }, { - "name": "searchby", - "description": "search on a specific records field. the nested field is written with period separated field name. eg, \"data.schema.columns.name\"", + "name": "state", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "asset", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "labels", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "direction", "in": "query", "required": false, "type": "string" }, { "name": "size", - "description": "number of results to return", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "offset", "in": "query", "required": false, "type": "integer", @@ -883,20 +1360,45 @@ } ], "tags": [ - "Search", - "Asset" + "User", + "Discussion" ] } }, - "/v1beta1/search/suggest": { + "/v1beta1/me/starred": { "get": { - "summary": "Suggest an asset", - "operationId": "CompassService_SuggestAssets", + "summary": "Get my starred assets", + "description": "Get all assets starred by me", + "operationId": "CompassService_GetMyStarredAssets", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/v1beta1SuggestAssetsResponse" + "$ref": "#/definitions/v1beta1GetMyStarredAssetsResponse" + } + }, + "400": { + "description": "Returned when the data that user input is wrong.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "409": { + "description": "Returned when the resource already exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "500": { + "description": "Returned when theres is something wrong on the server side.", + "schema": { + "$ref": "#/definitions/rpcStatus" } }, "default": { @@ -908,43 +1410,1105 @@ }, "parameters": [ { - "name": "text", - "description": "text to search for (fuzzy)", + "name": "size", "in": "query", "required": false, - "type": "string" + "type": "integer", + "format": "int64" }, { - "name": "rankby", - "description": "descendingly sort based on a numeric field in the record. the nested field is written with period separated field name. eg, \"data.profile.usage_count\"", + "name": "offset", "in": "query", "required": false, - "type": "string" + "type": "integer", + "format": "int64" + } + ], + "tags": [ + "User", + "Star" + ] + } + }, + "/v1beta1/me/starred/{assetId}": { + "get": { + "summary": "Get my starred asset", + "description": "Get an asset starred by me", + "operationId": "CompassService_GetMyStarredAsset", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1beta1GetMyStarredAssetResponse" + } + }, + "400": { + "description": "Returned when the data that user input is wrong.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "409": { + "description": "Returned when the resource already exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "500": { + "description": "Returned when theres is something wrong on the server side.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ { - "name": "searchby", - "description": "search on a specific records field. the nested field is written with period separated field name. eg, \"data.schema.columns.name\"", - "in": "query", - "required": false, + "name": "assetId", + "in": "path", + "required": true, "type": "string" + } + ], + "tags": [ + "User", + "Star" + ] + }, + "delete": { + "summary": "Unstar an asset", + "description": "Unmark my starred asset", + "operationId": "CompassService_UnstarAsset", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1beta1UnstarAssetResponse" + } + }, + "400": { + "description": "Returned when the data that user input is wrong.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "409": { + "description": "Returned when the resource already exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "500": { + "description": "Returned when theres is something wrong on the server side.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ { - "name": "size", - "description": "number of results to return", - "in": "query", - "required": false, - "type": "integer", - "format": "int64" + "name": "assetId", + "in": "path", + "required": true, + "type": "string" } ], "tags": [ - "Search", - "Asset" + "User", + "Star" ] - } - } - }, - "definitions": { + }, + "put": { + "summary": "Star an asset", + "description": "Mark an asset by me with a star", + "operationId": "CompassService_StarAsset", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1beta1StarAssetResponse" + } + }, + "400": { + "description": "Returned when the data that user input is wrong.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "409": { + "description": "Returned when the resource already exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "500": { + "description": "Returned when theres is something wrong on the server side.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "assetId", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "User", + "Star" + ] + } + }, + "/v1beta1/search": { + "get": { + "summary": "Search for an asset", + "description": "API for querying documents. 'text' is fuzzy matched against all the available datasets, and matched results are returned. You can specify additional match criteria using 'filter.*' query parameters. You can specify each filter multiple times to specify a set of values for those filters. For instance, to specify two landscape 'vn' and 'th', the query could be `/search/?text=\u003ctext\u003e\u0026filter.environment=integration\u0026filter.landscape=vn\u0026filter.landscape=th`", + "operationId": "CompassService_SearchAssets", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1beta1SearchAssetsResponse" + } + }, + "400": { + "description": "Returned when the data that user input is wrong.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "409": { + "description": "Returned when the resource already exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "500": { + "description": "Returned when theres is something wrong on the server side.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "text", + "description": "text to search for (fuzzy)", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "rankby", + "description": "descendingly sort based on a numeric field in the record. the nested field is written with period separated field name. eg, \"rankby[data.profile.usage_count]\"", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchby", + "description": "search on a specific records field. the nested field is written with period separated field name. eg, \"searchby[data.schema.columns.name]\"", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "size", + "description": "number of results to return", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + } + ], + "tags": [ + "Search", + "Asset" + ] + } + }, + "/v1beta1/search/suggest": { + "get": { + "summary": "Suggest an asset", + "operationId": "CompassService_SuggestAssets", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1beta1SuggestAssetsResponse" + } + }, + "400": { + "description": "Returned when the data that user input is wrong.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "409": { + "description": "Returned when the resource already exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "500": { + "description": "Returned when theres is something wrong on the server side.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "text", + "description": "text to search for (fuzzy)", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "rankby", + "description": "descendingly sort based on a numeric field in the record. the nested field is written with period separated field name. eg, \"rankby[data.profile.usage_count]\"", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchby", + "description": "search on a specific records field. the nested field is written with period separated field name. eg, \"searchby[data.schema.columns.name]\"", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "size", + "description": "number of results to return", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + } + ], + "tags": [ + "Search", + "Asset" + ] + } + }, + "/v1beta1/tags": { + "post": { + "summary": "Tag a record", + "description": "Tag a record in a type with a tag template", + "operationId": "CompassService_CreateTag", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1beta1CreateTagResponse" + } + }, + "400": { + "description": "Returned when the data that user input is wrong.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "409": { + "description": "Returned when the resource already exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "500": { + "description": "Returned when theres is something wrong on the server side.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1beta1CreateTagRequest" + } + } + ], + "tags": [ + "Tag" + ] + } + }, + "/v1beta1/tags/templates": { + "get": { + "summary": "Get all tag templates", + "description": "Get all available tag templates", + "operationId": "CompassService_GetAllTagTemplates", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1beta1GetAllTagTemplatesResponse" + } + }, + "400": { + "description": "Returned when the data that user input is wrong.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "409": { + "description": "Returned when the resource already exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "500": { + "description": "Returned when theres is something wrong on the server side.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "urn", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Tag" + ] + }, + "post": { + "summary": "Create a template", + "description": "Create a new tag template", + "operationId": "CompassService_CreateTagTemplate", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1beta1CreateTagTemplateResponse" + } + }, + "400": { + "description": "Returned when the data that user input is wrong.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "409": { + "description": "Returned when the resource already exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "500": { + "description": "Returned when theres is something wrong on the server side.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1beta1CreateTagTemplateRequest" + } + } + ], + "tags": [ + "Tag" + ] + } + }, + "/v1beta1/tags/templates/{templateUrn}": { + "get": { + "summary": "Get a tag template", + "description": "Get a single tag template", + "operationId": "CompassService_GetTagTemplate", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1beta1GetTagTemplateResponse" + } + }, + "400": { + "description": "Returned when the data that user input is wrong.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "409": { + "description": "Returned when the resource already exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "500": { + "description": "Returned when theres is something wrong on the server side.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "templateUrn", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Tag" + ] + }, + "delete": { + "summary": "Delete a tag template", + "description": "Delete a single tag template", + "operationId": "CompassService_DeleteTagTemplate", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1beta1DeleteTagTemplateResponse" + } + }, + "400": { + "description": "Returned when the data that user input is wrong.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "409": { + "description": "Returned when the resource already exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "500": { + "description": "Returned when theres is something wrong on the server side.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "templateUrn", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Tag" + ] + }, + "put": { + "summary": "Update a template", + "description": "Update an existing tag template", + "operationId": "CompassService_UpdateTagTemplate", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1beta1UpdateTagTemplateResponse" + } + }, + "400": { + "description": "Returned when the data that user input is wrong.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "409": { + "description": "Returned when the resource already exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "500": { + "description": "Returned when theres is something wrong on the server side.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "templateUrn", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "displayName": { + "type": "string" + }, + "description": { + "type": "string" + }, + "fields": { + "type": "array", + "items": { + "$ref": "#/definitions/v1beta1TagTemplateField" + } + } + }, + "description": "Request to be sent to update a tag's template", + "title": "UpdateTagTemplateRequest", + "required": [ + "templateUrn", + "displayName", + "description", + "fields" + ] + } + } + ], + "tags": [ + "Tag" + ] + } + }, + "/v1beta1/tags/types/{type}/records/{recordUrn}": { + "get": { + "summary": "Get a record's tags", + "description": "Get all tags for a record in a type", + "operationId": "CompassService_GetTagsByRecord", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1beta1GetTagsByRecordResponse" + } + }, + "400": { + "description": "Returned when the data that user input is wrong.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "409": { + "description": "Returned when the resource already exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "500": { + "description": "Returned when theres is something wrong on the server side.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "type", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "recordUrn", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Tag" + ] + } + }, + "/v1beta1/tags/types/{type}/records/{recordUrn}/templates/{templateUrn}": { + "get": { + "summary": "Find a tag by record and template", + "description": "Find a single tag using record urn and template urn", + "operationId": "CompassService_GetTagsByRecordAndTemplate", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1beta1GetTagsByRecordAndTemplateResponse" + } + }, + "400": { + "description": "Returned when the data that user input is wrong.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "409": { + "description": "Returned when the resource already exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "500": { + "description": "Returned when theres is something wrong on the server side.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "type", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "recordUrn", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "templateUrn", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Tag" + ] + }, + "delete": { + "summary": "Remove a tag on a record", + "description": "Remove a tag on a record in a type", + "operationId": "CompassService_DeleteTag", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1beta1DeleteTagResponse" + } + }, + "400": { + "description": "Returned when the data that user input is wrong.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "409": { + "description": "Returned when the resource already exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "500": { + "description": "Returned when theres is something wrong on the server side.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "type", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "recordUrn", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "templateUrn", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Tag" + ] + }, + "put": { + "summary": "Update a tag on a record", + "description": "Update a tag on a record in a type", + "operationId": "CompassService_UpdateTag", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1beta1UpdateTagResponse" + } + }, + "400": { + "description": "Returned when the data that user input is wrong.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "409": { + "description": "Returned when the resource already exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "500": { + "description": "Returned when theres is something wrong on the server side.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "type", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "recordUrn", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "templateUrn", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "tagValues": { + "type": "array", + "items": { + "$ref": "#/definitions/v1beta1TagValue" + } + }, + "templateDisplayName": { + "type": "string" + }, + "templateDescription": { + "type": "string" + } + }, + "description": "Request to be sent to update a tag", + "title": "UpdateTagRequest", + "required": [ + "tagValues" + ] + } + } + ], + "tags": [ + "Tag" + ] + } + }, + "/v1beta1/users/{userId}/starred": { + "get": { + "summary": "Get assets starred by a user", + "description": "Get all assets starred by a user", + "operationId": "CompassService_GetUserStarredAssets", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1beta1GetUserStarredAssetsResponse" + } + }, + "400": { + "description": "Returned when the data that user input is wrong.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "409": { + "description": "Returned when the resource already exist.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "500": { + "description": "Returned when theres is something wrong on the server side.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "size", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "offset", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + } + ], + "tags": [ + "User", + "Star" + ] + } + } + }, + "definitions": { + "compassv1beta1Tag": { + "type": "object", + "properties": { + "recordType": { + "type": "string" + }, + "recordUrn": { + "type": "string" + }, + "templateUrn": { + "type": "string" + }, + "tagValues": { + "type": "array", + "items": { + "$ref": "#/definitions/v1beta1TagValue" + } + }, + "templateDisplayName": { + "type": "string" + }, + "templateDescription": { + "type": "string" + } + }, + "title": "Tag" + }, "protobufAny": { "type": "object", "properties": { @@ -1101,8 +2665,7 @@ "id": { "type": "string" } - }, - "title": "CreateCommentResponse" + } }, "v1beta1CreateDiscussionRequest": { "type": "object", @@ -1139,11 +2702,9 @@ } }, "description": "Request to be sent to create a discussion", - "title": "CreateDiscussionRequest", "required": [ "title", - "body", - "type" + "body" ] }, "v1beta1CreateDiscussionResponse": { @@ -1152,8 +2713,84 @@ "id": { "type": "string" } + } + }, + "v1beta1CreateTagRequest": { + "type": "object", + "properties": { + "recordType": { + "type": "string" + }, + "recordUrn": { + "type": "string" + }, + "templateUrn": { + "type": "string" + }, + "tagValues": { + "type": "array", + "items": { + "$ref": "#/definitions/v1beta1TagValue" + } + }, + "templateDisplayName": { + "type": "string" + }, + "templateDescription": { + "type": "string" + } + }, + "description": "Request to be sent to create a tag", + "title": "CreateTagRequest", + "required": [ + "recordUrn", + "templateUrn", + "tagValues" + ] + }, + "v1beta1CreateTagResponse": { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/compassv1beta1Tag" + } + } + }, + "v1beta1CreateTagTemplateRequest": { + "type": "object", + "properties": { + "urn": { + "type": "string" + }, + "displayName": { + "type": "string" + }, + "description": { + "type": "string" + }, + "fields": { + "type": "array", + "items": { + "$ref": "#/definitions/v1beta1TagTemplateField" + } + } }, - "title": "CreateDiscussionResponse" + "description": "Request to be sent to create a tag's template", + "title": "CreateTagTemplateRequest", + "required": [ + "urn", + "displayName", + "description", + "tagValues" + ] + }, + "v1beta1CreateTagTemplateResponse": { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/v1beta1TagTemplate" + } + } }, "v1beta1DeleteAssetResponse": { "type": "object" @@ -1161,6 +2798,12 @@ "v1beta1DeleteCommentResponse": { "type": "object" }, + "v1beta1DeleteTagResponse": { + "type": "object" + }, + "v1beta1DeleteTagTemplateResponse": { + "type": "object" + }, "v1beta1Discussion": { "type": "object", "properties": { @@ -1235,8 +2878,7 @@ "$ref": "#/definitions/v1beta1Comment" } } - }, - "title": "GetAllCommentsResponse" + } }, "v1beta1GetAllDiscussionsResponse": { "type": "object", @@ -1247,8 +2889,18 @@ "$ref": "#/definitions/v1beta1Discussion" } } - }, - "title": "GetAllDiscussionsResponse" + } + }, + "v1beta1GetAllTagTemplatesResponse": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/v1beta1TagTemplate" + } + } + } }, "v1beta1GetAssetByIDResponse": { "type": "object", @@ -1294,8 +2946,7 @@ "data": { "$ref": "#/definitions/v1beta1Comment" } - }, - "title": "GetCommentResponse" + } }, "v1beta1GetDiscussionResponse": { "type": "object", @@ -1303,8 +2954,7 @@ "data": { "$ref": "#/definitions/v1beta1Discussion" } - }, - "title": "GetDiscussionResponse" + } }, "v1beta1GetGraphResponse": { "type": "object", @@ -1317,6 +2967,74 @@ } } }, + "v1beta1GetMyDiscussionsResponse": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/v1beta1Discussion" + } + } + } + }, + "v1beta1GetMyStarredAssetResponse": { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/v1beta1Asset" + } + } + }, + "v1beta1GetMyStarredAssetsResponse": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/v1beta1Asset" + } + } + } + }, + "v1beta1GetTagTemplateResponse": { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/v1beta1TagTemplate" + } + } + }, + "v1beta1GetTagsByRecordAndTemplateResponse": { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/compassv1beta1Tag" + } + } + }, + "v1beta1GetTagsByRecordResponse": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/compassv1beta1Tag" + } + } + } + }, + "v1beta1GetUserStarredAssetsResponse": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/v1beta1Asset" + } + } + } + }, "v1beta1LineageEdge": { "type": "object", "properties": { @@ -1329,7 +3047,8 @@ "prop": { "type": "object" } - } + }, + "title": "LineageEdge" }, "v1beta1LineageNode": { "type": "object", @@ -1343,7 +3062,8 @@ "service": { "type": "string" } - } + }, + "title": "LineageNode" }, "v1beta1PatchDiscussionResponse": { "type": "object" @@ -1359,6 +3079,14 @@ } } }, + "v1beta1StarAssetResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + } + }, "v1beta1SuggestAssetsResponse": { "type": "object", "properties": { @@ -1370,9 +3098,138 @@ } } }, + "v1beta1TagTemplate": { + "type": "object", + "properties": { + "urn": { + "type": "string" + }, + "displayName": { + "type": "string" + }, + "description": { + "type": "string" + }, + "fields": { + "type": "array", + "items": { + "$ref": "#/definitions/v1beta1TagTemplateField" + } + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + } + }, + "title": "TagTemplate" + }, + "v1beta1TagTemplateField": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "urn": { + "type": "string" + }, + "displayName": { + "type": "string" + }, + "description": { + "type": "string" + }, + "dataType": { + "type": "string" + }, + "options": { + "type": "array", + "items": { + "type": "string" + } + }, + "required": { + "type": "boolean" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + } + }, + "title": "TagTemplateField" + }, + "v1beta1TagValue": { + "type": "object", + "properties": { + "fieldId": { + "type": "integer", + "format": "int64" + }, + "fieldValue": { + "type": "object" + }, + "fieldUrn": { + "type": "string" + }, + "fieldDisplayName": { + "type": "string" + }, + "fieldDescription": { + "type": "string" + }, + "fieldDataType": { + "type": "string" + }, + "fieldOptions": { + "type": "array", + "items": { + "type": "string" + } + }, + "fieldRequired": { + "type": "boolean" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + } + }, + "title": "TagValue" + }, + "v1beta1UnstarAssetResponse": { + "type": "object" + }, "v1beta1UpdateCommentResponse": { "type": "object" }, + "v1beta1UpdateTagResponse": { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/compassv1beta1Tag" + } + } + }, + "v1beta1UpdateTagTemplateResponse": { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/v1beta1TagTemplate" + } + } + }, "v1beta1UpsertAssetRequest": { "type": "object", "properties": { diff --git a/user/user.go b/user/user.go index e6c0455f..dbcceb6d 100644 --- a/user/user.go +++ b/user/user.go @@ -18,12 +18,24 @@ type User struct { UpdatedAt time.Time `json:"-" diff:"-" db:"updated_at"` } -// ToProto transforms struct to proto +// ToProto transforms struct with some fields only to proto func (d User) ToProto() *compassv1beta1.User { if d.ID == "" { return nil } + return &compassv1beta1.User{ + Id: d.ID, + Email: d.Email, + } +} + +// ToFullProto transforms struct with all fields to proto +func (d User) ToFullProto() *compassv1beta1.User { + if d.ID == "" { + return nil + } + var createdAtPB *timestamppb.Timestamp if !d.CreatedAt.IsZero() { createdAtPB = timestamppb.New(d.CreatedAt) diff --git a/user/user_test.go b/user/user_test.go index 95983568..1d8838db 100644 --- a/user/user_test.go +++ b/user/user_test.go @@ -53,6 +53,37 @@ func TestToProto(t *testing.T) { ExpectProto *compassv1beta1.User } + var testCases = []testCase{ + { + Title: "should return nil if ID is empty", + User: &User{}, + ExpectProto: nil, + }, + { + Title: "should return some field only", + User: &User{ID: "id1", Email: "email@email.com", Provider: "provider", CreatedAt: timeDummy, UpdatedAt: timeDummy}, + ExpectProto: &compassv1beta1.User{Id: "id1", Email: "email@email.com"}, + }, + } + for _, tc := range testCases { + t.Run(tc.Title, func(t *testing.T) { + + got := tc.User.ToProto() + if diff := cmp.Diff(got, tc.ExpectProto, protocmp.Transform()); diff != "" { + t.Errorf("expected response to be %+v, was %+v", tc.ExpectProto, got) + } + }) + } +} + +func TestToFullProto(t *testing.T) { + timeDummy := time.Date(2000, time.January, 7, 0, 0, 0, 0, time.UTC) + type testCase struct { + Title string + User *User + ExpectProto *compassv1beta1.User + } + var testCases = []testCase{ { Title: "should return nil if ID is empty", @@ -73,7 +104,7 @@ func TestToProto(t *testing.T) { for _, tc := range testCases { t.Run(tc.Title, func(t *testing.T) { - got := tc.User.ToProto() + got := tc.User.ToFullProto() if diff := cmp.Diff(got, tc.ExpectProto, protocmp.Transform()); diff != "" { t.Errorf("expected response to be %+v, was %+v", tc.ExpectProto, got) } @@ -106,7 +137,7 @@ func TestNewFromProto(t *testing.T) { got := NewFromProto(tc.UserPB) if reflect.DeepEqual(got, tc.ExpectUser) == false { - t.Errorf("expected returned asset to be to be %+v, was %+v", tc.ExpectUser, got) + t.Errorf("expected returned asset to be %+v, was %+v", tc.ExpectUser, got) } }) }