diff --git a/docs/grpc/index.html b/docs/grpc/index.html
index e6a236c077..fa7c80304e 100644
--- a/docs/grpc/index.html
+++ b/docs/grpc/index.html
@@ -1532,6 +1532,10 @@
Table of Contents
MUpdateObligationValueResponse
+
+ MValueTriggerRequest
+
+
@@ -12466,6 +12470,14 @@ CreateObligationValueRe
|
+
+ triggers |
+ ValueTriggerRequest |
+ repeated |
+ Optional
+Combination of action and attribute_value that will trigger this obligation value policy decisioning. |
+
+
metadata |
common.MetadataMutable |
@@ -13093,6 +13105,14 @@ UpdateObligationValueRe
Optional |
+
+ triggers |
+ ValueTriggerRequest |
+ repeated |
+ Optional
+Obligation Triggers provided here will replace all existing records in the database. |
+
+
metadata |
common.MetadataMutable |
@@ -13138,6 +13158,37 @@ UpdateObligationValueR
+ ValueTriggerRequest
+
+
+
+
+
+ Field | Type | Label | Description |
+
+
+
+
+ action |
+ common.IdNameIdentifier |
+ |
+ Required. The ID of the action that will trigger this obligation value policy decisioning. |
+
+
+
+ attribute_value |
+ common.IdFqnIdentifier |
+ |
+ Required. The attribute value ID that will trigger this obligation value policy decisioning. |
+
+
+
+
+
+
+
+
+
diff --git a/docs/openapi/policy/obligations/obligations.openapi.yaml b/docs/openapi/policy/obligations/obligations.openapi.yaml
index 2b697845be..090992e1b1 100644
--- a/docs/openapi/policy/obligations/obligations.openapi.yaml
+++ b/docs/openapi/policy/obligations/obligations.openapi.yaml
@@ -1411,6 +1411,14 @@ components:
value:
type: string
title: value
+ triggers:
+ type: array
+ items:
+ $ref: '#/components/schemas/policy.obligations.ValueTriggerRequest'
+ title: triggers
+ description: |-
+ Optional
+ Combination of action and attribute_value that will trigger this obligation value policy decisioning.
metadata:
title: metadata
description: |-
@@ -1694,6 +1702,14 @@ components:
type: string
title: value
description: Optional
+ triggers:
+ type: array
+ items:
+ $ref: '#/components/schemas/policy.obligations.ValueTriggerRequest'
+ title: triggers
+ description: |-
+ Optional
+ Obligation Triggers provided here will replace all existing records in the database.
metadata:
title: metadata
$ref: '#/components/schemas/common.MetadataMutable'
@@ -1710,6 +1726,22 @@ components:
$ref: '#/components/schemas/policy.ObligationValue'
title: UpdateObligationValueResponse
additionalProperties: false
+ policy.obligations.ValueTriggerRequest:
+ type: object
+ properties:
+ action:
+ title: action
+ description: Required. The ID of the action that will trigger this obligation value policy decisioning.
+ $ref: '#/components/schemas/common.IdNameIdentifier'
+ attributeValue:
+ title: attribute_value
+ description: Required. The attribute value ID that will trigger this obligation value policy decisioning.
+ $ref: '#/components/schemas/common.IdFqnIdentifier'
+ title: ValueTriggerRequest
+ required:
+ - action
+ - attributeValue
+ additionalProperties: false
connect-protocol-version:
type: number
title: Connect-Protocol-Version
diff --git a/protocol/go/policy/obligations/obligations.pb.go b/protocol/go/policy/obligations/obligations.pb.go
index 43152a2acf..03cf0403ad 100644
--- a/protocol/go/policy/obligations/obligations.pb.go
+++ b/protocol/go/policy/obligations/obligations.pb.go
@@ -105,6 +105,63 @@ func (*GetObligationRequest_Id) isGetObligationRequest_Identifier() {}
func (*GetObligationRequest_Fqn) isGetObligationRequest_Identifier() {}
+type ValueTriggerRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Required. The ID of the action that will trigger this obligation value policy decisioning.
+ Action *common.IdNameIdentifier `protobuf:"bytes,1,opt,name=action,proto3" json:"action,omitempty"`
+ // Required. The attribute value ID that will trigger this obligation value policy decisioning.
+ AttributeValue *common.IdFqnIdentifier `protobuf:"bytes,2,opt,name=attribute_value,json=attributeValue,proto3" json:"attribute_value,omitempty"`
+}
+
+func (x *ValueTriggerRequest) Reset() {
+ *x = ValueTriggerRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_policy_obligations_obligations_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ValueTriggerRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ValueTriggerRequest) ProtoMessage() {}
+
+func (x *ValueTriggerRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_policy_obligations_obligations_proto_msgTypes[1]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ValueTriggerRequest.ProtoReflect.Descriptor instead.
+func (*ValueTriggerRequest) Descriptor() ([]byte, []int) {
+ return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *ValueTriggerRequest) GetAction() *common.IdNameIdentifier {
+ if x != nil {
+ return x.Action
+ }
+ return nil
+}
+
+func (x *ValueTriggerRequest) GetAttributeValue() *common.IdFqnIdentifier {
+ if x != nil {
+ return x.AttributeValue
+ }
+ return nil
+}
+
type GetObligationResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -116,7 +173,7 @@ type GetObligationResponse struct {
func (x *GetObligationResponse) Reset() {
*x = GetObligationResponse{}
if protoimpl.UnsafeEnabled {
- mi := &file_policy_obligations_obligations_proto_msgTypes[1]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -129,7 +186,7 @@ func (x *GetObligationResponse) String() string {
func (*GetObligationResponse) ProtoMessage() {}
func (x *GetObligationResponse) ProtoReflect() protoreflect.Message {
- mi := &file_policy_obligations_obligations_proto_msgTypes[1]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[2]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -142,7 +199,7 @@ func (x *GetObligationResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetObligationResponse.ProtoReflect.Descriptor instead.
func (*GetObligationResponse) Descriptor() ([]byte, []int) {
- return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{1}
+ return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{2}
}
func (x *GetObligationResponse) GetObligation() *policy.Obligation {
@@ -163,7 +220,7 @@ type GetObligationsByFQNsRequest struct {
func (x *GetObligationsByFQNsRequest) Reset() {
*x = GetObligationsByFQNsRequest{}
if protoimpl.UnsafeEnabled {
- mi := &file_policy_obligations_obligations_proto_msgTypes[2]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -176,7 +233,7 @@ func (x *GetObligationsByFQNsRequest) String() string {
func (*GetObligationsByFQNsRequest) ProtoMessage() {}
func (x *GetObligationsByFQNsRequest) ProtoReflect() protoreflect.Message {
- mi := &file_policy_obligations_obligations_proto_msgTypes[2]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[3]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -189,7 +246,7 @@ func (x *GetObligationsByFQNsRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetObligationsByFQNsRequest.ProtoReflect.Descriptor instead.
func (*GetObligationsByFQNsRequest) Descriptor() ([]byte, []int) {
- return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{2}
+ return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{3}
}
func (x *GetObligationsByFQNsRequest) GetFqns() []string {
@@ -210,7 +267,7 @@ type GetObligationsByFQNsResponse struct {
func (x *GetObligationsByFQNsResponse) Reset() {
*x = GetObligationsByFQNsResponse{}
if protoimpl.UnsafeEnabled {
- mi := &file_policy_obligations_obligations_proto_msgTypes[3]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -223,7 +280,7 @@ func (x *GetObligationsByFQNsResponse) String() string {
func (*GetObligationsByFQNsResponse) ProtoMessage() {}
func (x *GetObligationsByFQNsResponse) ProtoReflect() protoreflect.Message {
- mi := &file_policy_obligations_obligations_proto_msgTypes[3]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[4]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -236,7 +293,7 @@ func (x *GetObligationsByFQNsResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetObligationsByFQNsResponse.ProtoReflect.Descriptor instead.
func (*GetObligationsByFQNsResponse) Descriptor() ([]byte, []int) {
- return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{3}
+ return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{4}
}
func (x *GetObligationsByFQNsResponse) GetFqnObligationMap() map[string]*policy.Obligation {
@@ -269,7 +326,7 @@ type CreateObligationRequest struct {
func (x *CreateObligationRequest) Reset() {
*x = CreateObligationRequest{}
if protoimpl.UnsafeEnabled {
- mi := &file_policy_obligations_obligations_proto_msgTypes[4]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -282,7 +339,7 @@ func (x *CreateObligationRequest) String() string {
func (*CreateObligationRequest) ProtoMessage() {}
func (x *CreateObligationRequest) ProtoReflect() protoreflect.Message {
- mi := &file_policy_obligations_obligations_proto_msgTypes[4]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[5]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -295,7 +352,7 @@ func (x *CreateObligationRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use CreateObligationRequest.ProtoReflect.Descriptor instead.
func (*CreateObligationRequest) Descriptor() ([]byte, []int) {
- return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{4}
+ return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{5}
}
func (m *CreateObligationRequest) GetNamespaceIdentifier() isCreateObligationRequest_NamespaceIdentifier {
@@ -367,7 +424,7 @@ type CreateObligationResponse struct {
func (x *CreateObligationResponse) Reset() {
*x = CreateObligationResponse{}
if protoimpl.UnsafeEnabled {
- mi := &file_policy_obligations_obligations_proto_msgTypes[5]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -380,7 +437,7 @@ func (x *CreateObligationResponse) String() string {
func (*CreateObligationResponse) ProtoMessage() {}
func (x *CreateObligationResponse) ProtoReflect() protoreflect.Message {
- mi := &file_policy_obligations_obligations_proto_msgTypes[5]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[6]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -393,7 +450,7 @@ func (x *CreateObligationResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use CreateObligationResponse.ProtoReflect.Descriptor instead.
func (*CreateObligationResponse) Descriptor() ([]byte, []int) {
- return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{5}
+ return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{6}
}
func (x *CreateObligationResponse) GetObligation() *policy.Obligation {
@@ -419,7 +476,7 @@ type UpdateObligationRequest struct {
func (x *UpdateObligationRequest) Reset() {
*x = UpdateObligationRequest{}
if protoimpl.UnsafeEnabled {
- mi := &file_policy_obligations_obligations_proto_msgTypes[6]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -432,7 +489,7 @@ func (x *UpdateObligationRequest) String() string {
func (*UpdateObligationRequest) ProtoMessage() {}
func (x *UpdateObligationRequest) ProtoReflect() protoreflect.Message {
- mi := &file_policy_obligations_obligations_proto_msgTypes[6]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[7]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -445,7 +502,7 @@ func (x *UpdateObligationRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use UpdateObligationRequest.ProtoReflect.Descriptor instead.
func (*UpdateObligationRequest) Descriptor() ([]byte, []int) {
- return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{6}
+ return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{7}
}
func (x *UpdateObligationRequest) GetId() string {
@@ -487,7 +544,7 @@ type UpdateObligationResponse struct {
func (x *UpdateObligationResponse) Reset() {
*x = UpdateObligationResponse{}
if protoimpl.UnsafeEnabled {
- mi := &file_policy_obligations_obligations_proto_msgTypes[7]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -500,7 +557,7 @@ func (x *UpdateObligationResponse) String() string {
func (*UpdateObligationResponse) ProtoMessage() {}
func (x *UpdateObligationResponse) ProtoReflect() protoreflect.Message {
- mi := &file_policy_obligations_obligations_proto_msgTypes[7]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[8]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -513,7 +570,7 @@ func (x *UpdateObligationResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use UpdateObligationResponse.ProtoReflect.Descriptor instead.
func (*UpdateObligationResponse) Descriptor() ([]byte, []int) {
- return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{7}
+ return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{8}
}
func (x *UpdateObligationResponse) GetObligation() *policy.Obligation {
@@ -538,7 +595,7 @@ type DeleteObligationRequest struct {
func (x *DeleteObligationRequest) Reset() {
*x = DeleteObligationRequest{}
if protoimpl.UnsafeEnabled {
- mi := &file_policy_obligations_obligations_proto_msgTypes[8]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[9]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -551,7 +608,7 @@ func (x *DeleteObligationRequest) String() string {
func (*DeleteObligationRequest) ProtoMessage() {}
func (x *DeleteObligationRequest) ProtoReflect() protoreflect.Message {
- mi := &file_policy_obligations_obligations_proto_msgTypes[8]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[9]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -564,7 +621,7 @@ func (x *DeleteObligationRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use DeleteObligationRequest.ProtoReflect.Descriptor instead.
func (*DeleteObligationRequest) Descriptor() ([]byte, []int) {
- return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{8}
+ return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{9}
}
func (m *DeleteObligationRequest) GetIdentifier() isDeleteObligationRequest_Identifier {
@@ -615,7 +672,7 @@ type DeleteObligationResponse struct {
func (x *DeleteObligationResponse) Reset() {
*x = DeleteObligationResponse{}
if protoimpl.UnsafeEnabled {
- mi := &file_policy_obligations_obligations_proto_msgTypes[9]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -628,7 +685,7 @@ func (x *DeleteObligationResponse) String() string {
func (*DeleteObligationResponse) ProtoMessage() {}
func (x *DeleteObligationResponse) ProtoReflect() protoreflect.Message {
- mi := &file_policy_obligations_obligations_proto_msgTypes[9]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[10]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -641,7 +698,7 @@ func (x *DeleteObligationResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use DeleteObligationResponse.ProtoReflect.Descriptor instead.
func (*DeleteObligationResponse) Descriptor() ([]byte, []int) {
- return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{9}
+ return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{10}
}
func (x *DeleteObligationResponse) GetObligation() *policy.Obligation {
@@ -671,7 +728,7 @@ type ListObligationsRequest struct {
func (x *ListObligationsRequest) Reset() {
*x = ListObligationsRequest{}
if protoimpl.UnsafeEnabled {
- mi := &file_policy_obligations_obligations_proto_msgTypes[10]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[11]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -684,7 +741,7 @@ func (x *ListObligationsRequest) String() string {
func (*ListObligationsRequest) ProtoMessage() {}
func (x *ListObligationsRequest) ProtoReflect() protoreflect.Message {
- mi := &file_policy_obligations_obligations_proto_msgTypes[10]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[11]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -697,7 +754,7 @@ func (x *ListObligationsRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ListObligationsRequest.ProtoReflect.Descriptor instead.
func (*ListObligationsRequest) Descriptor() ([]byte, []int) {
- return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{10}
+ return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{11}
}
func (m *ListObligationsRequest) GetNamespaceIdentifier() isListObligationsRequest_NamespaceIdentifier {
@@ -756,7 +813,7 @@ type ListObligationsResponse struct {
func (x *ListObligationsResponse) Reset() {
*x = ListObligationsResponse{}
if protoimpl.UnsafeEnabled {
- mi := &file_policy_obligations_obligations_proto_msgTypes[11]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[12]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -769,7 +826,7 @@ func (x *ListObligationsResponse) String() string {
func (*ListObligationsResponse) ProtoMessage() {}
func (x *ListObligationsResponse) ProtoReflect() protoreflect.Message {
- mi := &file_policy_obligations_obligations_proto_msgTypes[11]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[12]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -782,7 +839,7 @@ func (x *ListObligationsResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ListObligationsResponse.ProtoReflect.Descriptor instead.
func (*ListObligationsResponse) Descriptor() ([]byte, []int) {
- return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{11}
+ return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{12}
}
func (x *ListObligationsResponse) GetObligations() []*policy.Obligation {
@@ -815,7 +872,7 @@ type GetObligationValueRequest struct {
func (x *GetObligationValueRequest) Reset() {
*x = GetObligationValueRequest{}
if protoimpl.UnsafeEnabled {
- mi := &file_policy_obligations_obligations_proto_msgTypes[12]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[13]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -828,7 +885,7 @@ func (x *GetObligationValueRequest) String() string {
func (*GetObligationValueRequest) ProtoMessage() {}
func (x *GetObligationValueRequest) ProtoReflect() protoreflect.Message {
- mi := &file_policy_obligations_obligations_proto_msgTypes[12]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[13]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -841,7 +898,7 @@ func (x *GetObligationValueRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetObligationValueRequest.ProtoReflect.Descriptor instead.
func (*GetObligationValueRequest) Descriptor() ([]byte, []int) {
- return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{12}
+ return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{13}
}
func (m *GetObligationValueRequest) GetIdentifier() isGetObligationValueRequest_Identifier {
@@ -892,7 +949,7 @@ type GetObligationValueResponse struct {
func (x *GetObligationValueResponse) Reset() {
*x = GetObligationValueResponse{}
if protoimpl.UnsafeEnabled {
- mi := &file_policy_obligations_obligations_proto_msgTypes[13]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[14]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -905,7 +962,7 @@ func (x *GetObligationValueResponse) String() string {
func (*GetObligationValueResponse) ProtoMessage() {}
func (x *GetObligationValueResponse) ProtoReflect() protoreflect.Message {
- mi := &file_policy_obligations_obligations_proto_msgTypes[13]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[14]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -918,7 +975,7 @@ func (x *GetObligationValueResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetObligationValueResponse.ProtoReflect.Descriptor instead.
func (*GetObligationValueResponse) Descriptor() ([]byte, []int) {
- return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{13}
+ return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{14}
}
func (x *GetObligationValueResponse) GetValue() *policy.ObligationValue {
@@ -939,7 +996,7 @@ type GetObligationValuesByFQNsRequest struct {
func (x *GetObligationValuesByFQNsRequest) Reset() {
*x = GetObligationValuesByFQNsRequest{}
if protoimpl.UnsafeEnabled {
- mi := &file_policy_obligations_obligations_proto_msgTypes[14]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[15]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -952,7 +1009,7 @@ func (x *GetObligationValuesByFQNsRequest) String() string {
func (*GetObligationValuesByFQNsRequest) ProtoMessage() {}
func (x *GetObligationValuesByFQNsRequest) ProtoReflect() protoreflect.Message {
- mi := &file_policy_obligations_obligations_proto_msgTypes[14]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[15]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -965,7 +1022,7 @@ func (x *GetObligationValuesByFQNsRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetObligationValuesByFQNsRequest.ProtoReflect.Descriptor instead.
func (*GetObligationValuesByFQNsRequest) Descriptor() ([]byte, []int) {
- return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{14}
+ return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{15}
}
func (x *GetObligationValuesByFQNsRequest) GetFqns() []string {
@@ -986,7 +1043,7 @@ type GetObligationValuesByFQNsResponse struct {
func (x *GetObligationValuesByFQNsResponse) Reset() {
*x = GetObligationValuesByFQNsResponse{}
if protoimpl.UnsafeEnabled {
- mi := &file_policy_obligations_obligations_proto_msgTypes[15]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[16]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -999,7 +1056,7 @@ func (x *GetObligationValuesByFQNsResponse) String() string {
func (*GetObligationValuesByFQNsResponse) ProtoMessage() {}
func (x *GetObligationValuesByFQNsResponse) ProtoReflect() protoreflect.Message {
- mi := &file_policy_obligations_obligations_proto_msgTypes[15]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[16]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1012,7 +1069,7 @@ func (x *GetObligationValuesByFQNsResponse) ProtoReflect() protoreflect.Message
// Deprecated: Use GetObligationValuesByFQNsResponse.ProtoReflect.Descriptor instead.
func (*GetObligationValuesByFQNsResponse) Descriptor() ([]byte, []int) {
- return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{15}
+ return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{16}
}
func (x *GetObligationValuesByFQNsResponse) GetFqnValueMap() map[string]*policy.ObligationValue {
@@ -1036,6 +1093,9 @@ type CreateObligationValueRequest struct {
ObligationIdentifier isCreateObligationValueRequest_ObligationIdentifier `protobuf_oneof:"obligation_identifier"`
Value string `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"`
// Optional
+ // Combination of action and attribute_value that will trigger this obligation value policy decisioning.
+ Triggers []*ValueTriggerRequest `protobuf:"bytes,4,rep,name=triggers,proto3" json:"triggers,omitempty"`
+ // Optional
// Common metadata
Metadata *common.MetadataMutable `protobuf:"bytes,100,opt,name=metadata,proto3" json:"metadata,omitempty"`
}
@@ -1043,7 +1103,7 @@ type CreateObligationValueRequest struct {
func (x *CreateObligationValueRequest) Reset() {
*x = CreateObligationValueRequest{}
if protoimpl.UnsafeEnabled {
- mi := &file_policy_obligations_obligations_proto_msgTypes[16]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[17]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1056,7 +1116,7 @@ func (x *CreateObligationValueRequest) String() string {
func (*CreateObligationValueRequest) ProtoMessage() {}
func (x *CreateObligationValueRequest) ProtoReflect() protoreflect.Message {
- mi := &file_policy_obligations_obligations_proto_msgTypes[16]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[17]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1069,7 +1129,7 @@ func (x *CreateObligationValueRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use CreateObligationValueRequest.ProtoReflect.Descriptor instead.
func (*CreateObligationValueRequest) Descriptor() ([]byte, []int) {
- return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{16}
+ return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{17}
}
func (m *CreateObligationValueRequest) GetObligationIdentifier() isCreateObligationValueRequest_ObligationIdentifier {
@@ -1100,6 +1160,13 @@ func (x *CreateObligationValueRequest) GetValue() string {
return ""
}
+func (x *CreateObligationValueRequest) GetTriggers() []*ValueTriggerRequest {
+ if x != nil {
+ return x.Triggers
+ }
+ return nil
+}
+
func (x *CreateObligationValueRequest) GetMetadata() *common.MetadataMutable {
if x != nil {
return x.Metadata
@@ -1134,7 +1201,7 @@ type CreateObligationValueResponse struct {
func (x *CreateObligationValueResponse) Reset() {
*x = CreateObligationValueResponse{}
if protoimpl.UnsafeEnabled {
- mi := &file_policy_obligations_obligations_proto_msgTypes[17]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[18]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1147,7 +1214,7 @@ func (x *CreateObligationValueResponse) String() string {
func (*CreateObligationValueResponse) ProtoMessage() {}
func (x *CreateObligationValueResponse) ProtoReflect() protoreflect.Message {
- mi := &file_policy_obligations_obligations_proto_msgTypes[17]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[18]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1160,7 +1227,7 @@ func (x *CreateObligationValueResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use CreateObligationValueResponse.ProtoReflect.Descriptor instead.
func (*CreateObligationValueResponse) Descriptor() ([]byte, []int) {
- return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{17}
+ return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{18}
}
func (x *CreateObligationValueResponse) GetValue() *policy.ObligationValue {
@@ -1178,7 +1245,10 @@ type UpdateObligationValueRequest struct {
// Required
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
// Optional
- Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
+ Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
+ // Optional
+ // Obligation Triggers provided here will replace all existing records in the database.
+ Triggers []*ValueTriggerRequest `protobuf:"bytes,3,rep,name=triggers,proto3" json:"triggers,omitempty"`
Metadata *common.MetadataMutable `protobuf:"bytes,100,opt,name=metadata,proto3" json:"metadata,omitempty"`
MetadataUpdateBehavior common.MetadataUpdateEnum `protobuf:"varint,101,opt,name=metadata_update_behavior,json=metadataUpdateBehavior,proto3,enum=common.MetadataUpdateEnum" json:"metadata_update_behavior,omitempty"`
}
@@ -1186,7 +1256,7 @@ type UpdateObligationValueRequest struct {
func (x *UpdateObligationValueRequest) Reset() {
*x = UpdateObligationValueRequest{}
if protoimpl.UnsafeEnabled {
- mi := &file_policy_obligations_obligations_proto_msgTypes[18]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[19]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1199,7 +1269,7 @@ func (x *UpdateObligationValueRequest) String() string {
func (*UpdateObligationValueRequest) ProtoMessage() {}
func (x *UpdateObligationValueRequest) ProtoReflect() protoreflect.Message {
- mi := &file_policy_obligations_obligations_proto_msgTypes[18]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[19]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1212,7 +1282,7 @@ func (x *UpdateObligationValueRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use UpdateObligationValueRequest.ProtoReflect.Descriptor instead.
func (*UpdateObligationValueRequest) Descriptor() ([]byte, []int) {
- return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{18}
+ return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{19}
}
func (x *UpdateObligationValueRequest) GetId() string {
@@ -1229,6 +1299,13 @@ func (x *UpdateObligationValueRequest) GetValue() string {
return ""
}
+func (x *UpdateObligationValueRequest) GetTriggers() []*ValueTriggerRequest {
+ if x != nil {
+ return x.Triggers
+ }
+ return nil
+}
+
func (x *UpdateObligationValueRequest) GetMetadata() *common.MetadataMutable {
if x != nil {
return x.Metadata
@@ -1254,7 +1331,7 @@ type UpdateObligationValueResponse struct {
func (x *UpdateObligationValueResponse) Reset() {
*x = UpdateObligationValueResponse{}
if protoimpl.UnsafeEnabled {
- mi := &file_policy_obligations_obligations_proto_msgTypes[19]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[20]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1267,7 +1344,7 @@ func (x *UpdateObligationValueResponse) String() string {
func (*UpdateObligationValueResponse) ProtoMessage() {}
func (x *UpdateObligationValueResponse) ProtoReflect() protoreflect.Message {
- mi := &file_policy_obligations_obligations_proto_msgTypes[19]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[20]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1280,7 +1357,7 @@ func (x *UpdateObligationValueResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use UpdateObligationValueResponse.ProtoReflect.Descriptor instead.
func (*UpdateObligationValueResponse) Descriptor() ([]byte, []int) {
- return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{19}
+ return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{20}
}
func (x *UpdateObligationValueResponse) GetValue() *policy.ObligationValue {
@@ -1305,7 +1382,7 @@ type DeleteObligationValueRequest struct {
func (x *DeleteObligationValueRequest) Reset() {
*x = DeleteObligationValueRequest{}
if protoimpl.UnsafeEnabled {
- mi := &file_policy_obligations_obligations_proto_msgTypes[20]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[21]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1318,7 +1395,7 @@ func (x *DeleteObligationValueRequest) String() string {
func (*DeleteObligationValueRequest) ProtoMessage() {}
func (x *DeleteObligationValueRequest) ProtoReflect() protoreflect.Message {
- mi := &file_policy_obligations_obligations_proto_msgTypes[20]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[21]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1331,7 +1408,7 @@ func (x *DeleteObligationValueRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use DeleteObligationValueRequest.ProtoReflect.Descriptor instead.
func (*DeleteObligationValueRequest) Descriptor() ([]byte, []int) {
- return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{20}
+ return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{21}
}
func (m *DeleteObligationValueRequest) GetIdentifier() isDeleteObligationValueRequest_Identifier {
@@ -1382,7 +1459,7 @@ type DeleteObligationValueResponse struct {
func (x *DeleteObligationValueResponse) Reset() {
*x = DeleteObligationValueResponse{}
if protoimpl.UnsafeEnabled {
- mi := &file_policy_obligations_obligations_proto_msgTypes[21]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[22]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1395,7 +1472,7 @@ func (x *DeleteObligationValueResponse) String() string {
func (*DeleteObligationValueResponse) ProtoMessage() {}
func (x *DeleteObligationValueResponse) ProtoReflect() protoreflect.Message {
- mi := &file_policy_obligations_obligations_proto_msgTypes[21]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[22]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1408,7 +1485,7 @@ func (x *DeleteObligationValueResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use DeleteObligationValueResponse.ProtoReflect.Descriptor instead.
func (*DeleteObligationValueResponse) Descriptor() ([]byte, []int) {
- return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{21}
+ return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{22}
}
func (x *DeleteObligationValueResponse) GetValue() *policy.ObligationValue {
@@ -1438,7 +1515,7 @@ type AddObligationTriggerRequest struct {
func (x *AddObligationTriggerRequest) Reset() {
*x = AddObligationTriggerRequest{}
if protoimpl.UnsafeEnabled {
- mi := &file_policy_obligations_obligations_proto_msgTypes[22]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[23]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1451,7 +1528,7 @@ func (x *AddObligationTriggerRequest) String() string {
func (*AddObligationTriggerRequest) ProtoMessage() {}
func (x *AddObligationTriggerRequest) ProtoReflect() protoreflect.Message {
- mi := &file_policy_obligations_obligations_proto_msgTypes[22]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[23]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1464,7 +1541,7 @@ func (x *AddObligationTriggerRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use AddObligationTriggerRequest.ProtoReflect.Descriptor instead.
func (*AddObligationTriggerRequest) Descriptor() ([]byte, []int) {
- return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{22}
+ return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{23}
}
func (x *AddObligationTriggerRequest) GetObligationValue() *common.IdFqnIdentifier {
@@ -1506,7 +1583,7 @@ type AddObligationTriggerResponse struct {
func (x *AddObligationTriggerResponse) Reset() {
*x = AddObligationTriggerResponse{}
if protoimpl.UnsafeEnabled {
- mi := &file_policy_obligations_obligations_proto_msgTypes[23]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[24]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1519,7 +1596,7 @@ func (x *AddObligationTriggerResponse) String() string {
func (*AddObligationTriggerResponse) ProtoMessage() {}
func (x *AddObligationTriggerResponse) ProtoReflect() protoreflect.Message {
- mi := &file_policy_obligations_obligations_proto_msgTypes[23]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[24]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1532,7 +1609,7 @@ func (x *AddObligationTriggerResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use AddObligationTriggerResponse.ProtoReflect.Descriptor instead.
func (*AddObligationTriggerResponse) Descriptor() ([]byte, []int) {
- return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{23}
+ return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{24}
}
func (x *AddObligationTriggerResponse) GetTrigger() *policy.ObligationTrigger {
@@ -1554,7 +1631,7 @@ type RemoveObligationTriggerRequest struct {
func (x *RemoveObligationTriggerRequest) Reset() {
*x = RemoveObligationTriggerRequest{}
if protoimpl.UnsafeEnabled {
- mi := &file_policy_obligations_obligations_proto_msgTypes[24]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[25]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1567,7 +1644,7 @@ func (x *RemoveObligationTriggerRequest) String() string {
func (*RemoveObligationTriggerRequest) ProtoMessage() {}
func (x *RemoveObligationTriggerRequest) ProtoReflect() protoreflect.Message {
- mi := &file_policy_obligations_obligations_proto_msgTypes[24]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[25]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1580,7 +1657,7 @@ func (x *RemoveObligationTriggerRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use RemoveObligationTriggerRequest.ProtoReflect.Descriptor instead.
func (*RemoveObligationTriggerRequest) Descriptor() ([]byte, []int) {
- return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{24}
+ return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{25}
}
func (x *RemoveObligationTriggerRequest) GetId() string {
@@ -1601,7 +1678,7 @@ type RemoveObligationTriggerResponse struct {
func (x *RemoveObligationTriggerResponse) Reset() {
*x = RemoveObligationTriggerResponse{}
if protoimpl.UnsafeEnabled {
- mi := &file_policy_obligations_obligations_proto_msgTypes[25]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[26]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1614,7 +1691,7 @@ func (x *RemoveObligationTriggerResponse) String() string {
func (*RemoveObligationTriggerResponse) ProtoMessage() {}
func (x *RemoveObligationTriggerResponse) ProtoReflect() protoreflect.Message {
- mi := &file_policy_obligations_obligations_proto_msgTypes[25]
+ mi := &file_policy_obligations_obligations_proto_msgTypes[26]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1627,7 +1704,7 @@ func (x *RemoveObligationTriggerResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use RemoveObligationTriggerResponse.ProtoReflect.Descriptor instead.
func (*RemoveObligationTriggerResponse) Descriptor() ([]byte, []int) {
- return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{25}
+ return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{26}
}
func (x *RemoveObligationTriggerResponse) GetTrigger() *policy.ObligationTrigger {
@@ -1654,311 +1731,329 @@ var file_policy_obligations_obligations_proto_rawDesc = []byte{
0x73, 0x74, 0x12, 0x10, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00,
0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28,
0x09, 0x48, 0x00, 0x52, 0x03, 0x66, 0x71, 0x6e, 0x42, 0x0c, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e,
- 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x22, 0x4b, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c,
- 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
- 0x32, 0x0a, 0x0a, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20,
+ 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x22, 0x99, 0x01, 0x0a, 0x13, 0x56, 0x61, 0x6c, 0x75, 0x65,
+ 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38,
+ 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18,
+ 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x49, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x64,
+ 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01,
+ 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x48, 0x0a, 0x0f, 0x61, 0x74, 0x74, 0x72,
+ 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x49, 0x64, 0x46, 0x71, 0x6e,
+ 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8,
+ 0x01, 0x01, 0x52, 0x0e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c,
+ 0x75, 0x65, 0x22, 0x4b, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x0a, 0x6f,
+ 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x12, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22,
+ 0x31, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12,
+ 0x0a, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71,
+ 0x6e, 0x73, 0x22, 0xed, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x12, 0x66, 0x71, 0x6e, 0x5f, 0x6f, 0x62, 0x6c, 0x69, 0x67,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x70, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
+ 0x46, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x2e, 0x46, 0x71, 0x6e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d,
+ 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x66, 0x71, 0x6e, 0x4f, 0x62, 0x6c, 0x69,
+ 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x70, 0x1a, 0x57, 0x0a, 0x15, 0x46, 0x71, 0x6e,
+ 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74,
+ 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x03, 0x6b, 0x65, 0x79, 0x12, 0x28, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c,
- 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x22, 0x31, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09,
- 0x52, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x22, 0xed, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x4f, 0x62,
- 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x12, 0x66, 0x71, 0x6e, 0x5f, 0x6f,
- 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x70, 0x18, 0x01, 0x20,
- 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c,
- 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69,
- 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52, 0x65, 0x73,
- 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x46, 0x71, 0x6e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x66, 0x71, 0x6e,
- 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x70, 0x1a, 0x57, 0x0a,
- 0x15, 0x46, 0x71, 0x6e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61,
- 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x28, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75,
- 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
- 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c,
- 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xb8, 0x01, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74,
- 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x12, 0x10, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00,
- 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28,
- 0x09, 0x48, 0x00, 0x52, 0x03, 0x66, 0x71, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
- 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06,
- 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x76, 0x61,
- 0x6c, 0x75, 0x65, 0x73, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
- 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e,
- 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52,
- 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x16, 0x0a, 0x14, 0x6e, 0x61, 0x6d,
- 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65,
- 0x72, 0x22, 0x4e, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a,
- 0x0a, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x22, 0xc8, 0x01, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69,
- 0x67, 0x61, 0x74, 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, 0x12, 0x0a,
- 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d,
- 0x65, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74,
- 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x6d, 0x65,
- 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x54, 0x0a, 0x18, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61,
- 0x74, 0x61, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69,
- 0x6f, 0x72, 0x18, 0x65, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
- 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
- 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x16, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x55, 0x70,
- 0x64, 0x61, 0x74, 0x65, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x22, 0x4e, 0x0a, 0x18,
- 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x0a, 0x6f, 0x62, 0x6c, 0x69,
- 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70,
- 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x52, 0x0a, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x4d, 0x0a, 0x17,
- 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x03, 0x66, 0x71, 0x6e,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x66, 0x71, 0x6e, 0x42, 0x0c, 0x0a,
- 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x22, 0x4e, 0x0a, 0x18, 0x44,
- 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x0a, 0x6f, 0x62, 0x6c, 0x69, 0x67,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x6f,
- 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
- 0x0a, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x8b, 0x01, 0x0a, 0x16,
- 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x09, 0x48, 0x00, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x18,
- 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x66, 0x71, 0x6e, 0x12, 0x33, 0x0a, 0x0a,
- 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b,
- 0x32, 0x13, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x42, 0x16, 0x0a, 0x14, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69,
- 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x22, 0x85, 0x01, 0x0a, 0x17, 0x4c, 0x69,
- 0x73, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73,
- 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x0b, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x6f, 0x6c,
- 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b,
- 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x34, 0x0a, 0x0a, 0x70,
- 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73,
- 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x22, 0x4f, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10,
+ 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02,
+ 0x38, 0x01, 0x22, 0xb8, 0x01, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c,
+ 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10,
0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x02, 0x69, 0x64,
0x12, 0x12, 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52,
- 0x03, 0x66, 0x71, 0x6e, 0x42, 0x0c, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69,
- 0x65, 0x72, 0x22, 0x4b, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22,
- 0x36, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
- 0x09, 0x52, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x22, 0xe8, 0x01, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x4f,
- 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42,
- 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6a, 0x0a,
- 0x0d, 0x66, 0x71, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x18, 0x01,
- 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62,
- 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c,
- 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79, 0x46,
- 0x51, 0x4e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x46, 0x71, 0x6e, 0x56,
- 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x66, 0x71,
- 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x1a, 0x57, 0x0a, 0x10, 0x46, 0x71, 0x6e,
- 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,
- 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
- 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17,
- 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02,
- 0x38, 0x01, 0x22, 0xa8, 0x01, 0x0a, 0x1c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c,
- 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75,
+ 0x03, 0x66, 0x71, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73,
+ 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61,
+ 0x64, 0x61, 0x74, 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x74,
+ 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x16, 0x0a, 0x14, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x22, 0x4e, 0x0a,
+ 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x0a, 0x6f, 0x62, 0x6c,
+ 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e,
+ 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x52, 0x0a, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xc8, 0x01,
+ 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 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, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d,
+ 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x33, 0x0a,
+ 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
+ 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61,
+ 0x74, 0x61, 0x12, 0x54, 0x0a, 0x18, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x75,
+ 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x18, 0x65,
+ 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65,
+ 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x75, 0x6d,
+ 0x52, 0x16, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
+ 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x22, 0x4e, 0x0a, 0x18, 0x55, 0x70, 0x64, 0x61,
+ 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x0a, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63,
+ 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6f, 0x62,
+ 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x4d, 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65,
+ 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48,
0x00, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x01,
- 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x66, 0x71, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c,
- 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12,
- 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64,
- 0x61, 0x74, 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61,
- 0x64, 0x61, 0x74, 0x61, 0x42, 0x17, 0x0a, 0x15, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x22, 0x4e, 0x0a,
- 0x1d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d,
- 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e,
- 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xcf, 0x01,
- 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e,
- 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14,
- 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76,
- 0x61, 0x6c, 0x75, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
- 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e,
- 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52,
- 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x54, 0x0a, 0x18, 0x6d, 0x65, 0x74,
- 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x65, 0x68,
- 0x61, 0x76, 0x69, 0x6f, 0x72, 0x18, 0x65, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x63, 0x6f,
- 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x55, 0x70, 0x64,
- 0x61, 0x74, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x16, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
- 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x22,
- 0x4e, 0x0a, 0x1d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22,
- 0x52, 0x0a, 0x1c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
+ 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x66, 0x71, 0x6e, 0x42, 0x0c, 0x0a, 0x0a, 0x69, 0x64, 0x65,
+ 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x22, 0x4e, 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74,
+ 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x0a, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
+ 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6f, 0x62, 0x6c,
+ 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x8b, 0x01, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74,
+ 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x12, 0x10, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00,
+ 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x09, 0x48, 0x00, 0x52, 0x03, 0x66, 0x71, 0x6e, 0x12, 0x33, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69,
+ 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70,
+ 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x16, 0x0a,
+ 0x14, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74,
+ 0x69, 0x66, 0x69, 0x65, 0x72, 0x22, 0x85, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62,
+ 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x12, 0x34, 0x0a, 0x0b, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+ 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e,
+ 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x6f, 0x62, 0x6c, 0x69,
+ 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x34, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f,
+ 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x4f, 0x0a,
+ 0x19, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61,
+ 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x02, 0x69, 0x64,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x03,
+ 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x66, 0x71, 0x6e,
+ 0x42, 0x0c, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x22, 0x4b,
+ 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56,
+ 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x05,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f,
+ 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56,
+ 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x36, 0x0a, 0x20, 0x47,
+ 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75,
+ 0x65, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+ 0x12, 0x0a, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x66,
+ 0x71, 0x6e, 0x73, 0x22, 0xe8, 0x01, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e,
+ 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6a, 0x0a, 0x0d, 0x66, 0x71, 0x6e,
+ 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
+ 0x32, 0x46, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x46, 0x71, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65,
+ 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x66, 0x71, 0x6e, 0x56, 0x61, 0x6c,
+ 0x75, 0x65, 0x4d, 0x61, 0x70, 0x1a, 0x57, 0x0a, 0x10, 0x46, 0x71, 0x6e, 0x56, 0x61, 0x6c, 0x75,
+ 0x65, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f, 0x6c,
+ 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61,
+ 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xed,
+ 0x01, 0x0a, 0x1c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
0x10, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x02, 0x69,
0x64, 0x12, 0x12, 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00,
- 0x52, 0x03, 0x66, 0x71, 0x6e, 0x42, 0x0c, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66,
- 0x69, 0x65, 0x72, 0x22, 0x4e, 0x0a, 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6c,
- 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c,
- 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61,
- 0x6c, 0x75, 0x65, 0x22, 0xa2, 0x02, 0x0a, 0x1b, 0x41, 0x64, 0x64, 0x4f, 0x62, 0x6c, 0x69, 0x67,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x12, 0x4a, 0x0a, 0x10, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e,
- 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x49, 0x64, 0x46, 0x71, 0x6e, 0x49, 0x64, 0x65, 0x6e,
- 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0f,
- 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12,
- 0x38, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x18, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x49, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x49,
- 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01,
- 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x48, 0x0a, 0x0f, 0x61, 0x74, 0x74,
- 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x49, 0x64, 0x46, 0x71,
- 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03,
- 0xc8, 0x01, 0x01, 0x52, 0x0e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61,
- 0x6c, 0x75, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18,
- 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d,
- 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08,
- 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x53, 0x0a, 0x1c, 0x41, 0x64, 0x64, 0x4f,
- 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x74, 0x72, 0x69, 0x67,
- 0x67, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
- 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69,
- 0x67, 0x67, 0x65, 0x72, 0x52, 0x07, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x22, 0x3a, 0x0a,
- 0x1e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
- 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05,
- 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x56, 0x0a, 0x1f, 0x52, 0x65, 0x6d,
- 0x6f, 0x76, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69,
- 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x07,
- 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e,
- 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x07, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65,
- 0x72, 0x32, 0xc6, 0x0c, 0x0a, 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6f, 0x0a,
- 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
- 0x12, 0x2a, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x70,
- 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x69,
- 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12,
- 0x28, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
+ 0x52, 0x03, 0x66, 0x71, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x74,
+ 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e,
+ 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x08, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x73,
+ 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61,
+ 0x64, 0x61, 0x74, 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x74,
+ 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x17, 0x0a, 0x15, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x22, 0x4e,
+ 0x0a, 0x1d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
+ 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17,
+ 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x94,
+ 0x02, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+ 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12,
+ 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72,
+ 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
+ 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x56, 0x61, 0x6c,
+ 0x75, 0x65, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x52, 0x08, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x73, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65,
+ 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63,
+ 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x75,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12,
+ 0x54, 0x0a, 0x18, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x75, 0x70, 0x64, 0x61,
+ 0x74, 0x65, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x18, 0x65, 0x20, 0x01, 0x28,
+ 0x0e, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64,
+ 0x61, 0x74, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x16, 0x6d,
+ 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x65, 0x68,
+ 0x61, 0x76, 0x69, 0x6f, 0x72, 0x22, 0x4e, 0x0a, 0x1d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f,
+ 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f,
+ 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x52, 0x0a, 0x1c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f,
+ 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x09, 0x48, 0x00, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x66, 0x71, 0x6e, 0x42, 0x0c, 0x0a, 0x0a, 0x69,
+ 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x22, 0x4e, 0x0a, 0x1d, 0x44, 0x65, 0x6c,
+ 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c,
+ 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
+ 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c,
+ 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xa2, 0x02, 0x0a, 0x1b, 0x41, 0x64,
+ 0x64, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67,
+ 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4a, 0x0a, 0x10, 0x6f, 0x62, 0x6c,
+ 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x49, 0x64, 0x46,
+ 0x71, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48,
+ 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0f, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x38, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x49,
+ 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42,
+ 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12,
+ 0x48, 0x0a, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
+ 0x6e, 0x2e, 0x49, 0x64, 0x46, 0x71, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65,
+ 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0e, 0x61, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74,
+ 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f,
+ 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x75, 0x74,
+ 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x53,
+ 0x0a, 0x1c, 0x41, 0x64, 0x64, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54,
+ 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33,
+ 0x0a, 0x07, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x19, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x07, 0x74, 0x72, 0x69, 0x67,
+ 0x67, 0x65, 0x72, 0x22, 0x3a, 0x0a, 0x1e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4f, 0x62, 0x6c,
+ 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22,
+ 0x56, 0x0a, 0x1f, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c,
+ 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x07,
+ 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x32, 0xc6, 0x0c, 0x0a, 0x07, 0x53, 0x65, 0x72, 0x76,
+ 0x69, 0x63, 0x65, 0x12, 0x6f, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e,
+ 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74,
+ 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69,
+ 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6c, 0x69,
+ 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+ 0x03, 0x90, 0x02, 0x01, 0x12, 0x69, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f,
+ 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62,
+ 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x29, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
- 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x47,
- 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x7e, 0x0a, 0x14, 0x47, 0x65, 0x74,
+ 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12,
+ 0x7e, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x12, 0x2f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
+ 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74,
0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e,
- 0x73, 0x12, 0x2f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69,
- 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x6f, 0x0a, 0x10, 0x43, 0x72, 0x65,
- 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x2e,
- 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x70, 0x6f, 0x6c,
- 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e,
- 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6f, 0x0a, 0x10, 0x55, 0x70,
- 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b,
- 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x70, 0x6f,
- 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
- 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6f, 0x0a, 0x10, 0x44,
- 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12,
- 0x2b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x70,
- 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x78, 0x0a, 0x12,
- 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c,
- 0x75, 0x65, 0x12, 0x2d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69,
- 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x8d, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x4f, 0x62,
- 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79,
- 0x46, 0x51, 0x4e, 0x73, 0x12, 0x34, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62,
- 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c,
- 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79, 0x46,
- 0x51, 0x4e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x70, 0x6f, 0x6c,
+ 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63,
+ 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65,
+ 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x46, 0x51,
+ 0x4e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12,
+ 0x6f, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c,
+ 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f,
+ 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x2c, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69,
+ 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
+ 0x12, 0x6f, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62,
+ 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
+ 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x1a, 0x2c, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c,
+ 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+ 0x00, 0x12, 0x6f, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f,
+ 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74,
+ 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69,
+ 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62,
+ 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x22, 0x00, 0x12, 0x78, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63,
+ 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65,
+ 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
+ 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74,
+ 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x8d, 0x01, 0x0a,
+ 0x19, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61,
+ 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x12, 0x34, 0x2e, 0x70, 0x6f, 0x6c,
0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e,
0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c,
- 0x75, 0x65, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x7e, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
- 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12,
- 0x30, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x1a, 0x31, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c,
- 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7e, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
- 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12,
- 0x30, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x1a, 0x31, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c,
- 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7e, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
- 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12,
- 0x30, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x1a, 0x31, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6c,
- 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7b, 0x0a, 0x14, 0x41, 0x64, 0x64, 0x4f, 0x62, 0x6c,
- 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x2f,
- 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
- 0x30, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x22, 0x00, 0x12, 0x84, 0x01, 0x0a, 0x17, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4f, 0x62,
- 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12,
- 0x32, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c,
- 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4f,
- 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xcf, 0x01, 0x0a, 0x16, 0x63,
- 0x6f, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x10, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75,
- 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c,
- 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f,
- 0x67, 0x6f, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2f, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xa2, 0x02, 0x03, 0x50, 0x4f, 0x58, 0xaa, 0x02, 0x12, 0x50, 0x6f,
- 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
- 0xca, 0x02, 0x12, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5c, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xe2, 0x02, 0x1e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5c, 0x4f,
- 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65,
- 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x3a,
- 0x3a, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x62, 0x06, 0x70, 0x72,
- 0x6f, 0x74, 0x6f, 0x33,
+ 0x75, 0x65, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x35, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x7e, 0x0a, 0x15,
+ 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x30, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f,
+ 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74,
+ 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
+ 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x72, 0x65,
+ 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c,
+ 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7e, 0x0a, 0x15,
+ 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x30, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f,
+ 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74,
+ 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
+ 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x55, 0x70, 0x64,
+ 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c,
+ 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7e, 0x0a, 0x15,
+ 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x30, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f,
+ 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74,
+ 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
+ 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x44, 0x65, 0x6c,
+ 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c,
+ 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7b, 0x0a, 0x14,
+ 0x41, 0x64, 0x64, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69,
+ 0x67, 0x67, 0x65, 0x72, 0x12, 0x2f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62,
+ 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x4f, 0x62, 0x6c,
+ 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f,
+ 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x4f, 0x62,
+ 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x84, 0x01, 0x0a, 0x17, 0x52, 0x65,
+ 0x6d, 0x6f, 0x76, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72,
+ 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x32, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f,
+ 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76,
+ 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67,
+ 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
+ 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x52,
+ 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54,
+ 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
+ 0x42, 0xcf, 0x01, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e,
+ 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x10, 0x4f, 0x62, 0x6c,
+ 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a,
+ 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e,
+ 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f,
+ 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2f,
+ 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xa2, 0x02, 0x03, 0x50, 0x4f,
+ 0x58, 0xaa, 0x02, 0x12, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xca, 0x02, 0x12, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5c,
+ 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xe2, 0x02, 0x1e, 0x50, 0x6f,
+ 0x6c, 0x69, 0x63, 0x79, 0x5c, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+ 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, 0x50,
+ 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x3a, 0x3a, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@@ -1973,105 +2068,110 @@ func file_policy_obligations_obligations_proto_rawDescGZIP() []byte {
return file_policy_obligations_obligations_proto_rawDescData
}
-var file_policy_obligations_obligations_proto_msgTypes = make([]protoimpl.MessageInfo, 28)
+var file_policy_obligations_obligations_proto_msgTypes = make([]protoimpl.MessageInfo, 29)
var file_policy_obligations_obligations_proto_goTypes = []interface{}{
(*GetObligationRequest)(nil), // 0: policy.obligations.GetObligationRequest
- (*GetObligationResponse)(nil), // 1: policy.obligations.GetObligationResponse
- (*GetObligationsByFQNsRequest)(nil), // 2: policy.obligations.GetObligationsByFQNsRequest
- (*GetObligationsByFQNsResponse)(nil), // 3: policy.obligations.GetObligationsByFQNsResponse
- (*CreateObligationRequest)(nil), // 4: policy.obligations.CreateObligationRequest
- (*CreateObligationResponse)(nil), // 5: policy.obligations.CreateObligationResponse
- (*UpdateObligationRequest)(nil), // 6: policy.obligations.UpdateObligationRequest
- (*UpdateObligationResponse)(nil), // 7: policy.obligations.UpdateObligationResponse
- (*DeleteObligationRequest)(nil), // 8: policy.obligations.DeleteObligationRequest
- (*DeleteObligationResponse)(nil), // 9: policy.obligations.DeleteObligationResponse
- (*ListObligationsRequest)(nil), // 10: policy.obligations.ListObligationsRequest
- (*ListObligationsResponse)(nil), // 11: policy.obligations.ListObligationsResponse
- (*GetObligationValueRequest)(nil), // 12: policy.obligations.GetObligationValueRequest
- (*GetObligationValueResponse)(nil), // 13: policy.obligations.GetObligationValueResponse
- (*GetObligationValuesByFQNsRequest)(nil), // 14: policy.obligations.GetObligationValuesByFQNsRequest
- (*GetObligationValuesByFQNsResponse)(nil), // 15: policy.obligations.GetObligationValuesByFQNsResponse
- (*CreateObligationValueRequest)(nil), // 16: policy.obligations.CreateObligationValueRequest
- (*CreateObligationValueResponse)(nil), // 17: policy.obligations.CreateObligationValueResponse
- (*UpdateObligationValueRequest)(nil), // 18: policy.obligations.UpdateObligationValueRequest
- (*UpdateObligationValueResponse)(nil), // 19: policy.obligations.UpdateObligationValueResponse
- (*DeleteObligationValueRequest)(nil), // 20: policy.obligations.DeleteObligationValueRequest
- (*DeleteObligationValueResponse)(nil), // 21: policy.obligations.DeleteObligationValueResponse
- (*AddObligationTriggerRequest)(nil), // 22: policy.obligations.AddObligationTriggerRequest
- (*AddObligationTriggerResponse)(nil), // 23: policy.obligations.AddObligationTriggerResponse
- (*RemoveObligationTriggerRequest)(nil), // 24: policy.obligations.RemoveObligationTriggerRequest
- (*RemoveObligationTriggerResponse)(nil), // 25: policy.obligations.RemoveObligationTriggerResponse
- nil, // 26: policy.obligations.GetObligationsByFQNsResponse.FqnObligationMapEntry
- nil, // 27: policy.obligations.GetObligationValuesByFQNsResponse.FqnValueMapEntry
- (*policy.Obligation)(nil), // 28: policy.Obligation
- (*common.MetadataMutable)(nil), // 29: common.MetadataMutable
- (common.MetadataUpdateEnum)(0), // 30: common.MetadataUpdateEnum
- (*policy.PageRequest)(nil), // 31: policy.PageRequest
- (*policy.PageResponse)(nil), // 32: policy.PageResponse
- (*policy.ObligationValue)(nil), // 33: policy.ObligationValue
- (*common.IdFqnIdentifier)(nil), // 34: common.IdFqnIdentifier
- (*common.IdNameIdentifier)(nil), // 35: common.IdNameIdentifier
- (*policy.ObligationTrigger)(nil), // 36: policy.ObligationTrigger
+ (*ValueTriggerRequest)(nil), // 1: policy.obligations.ValueTriggerRequest
+ (*GetObligationResponse)(nil), // 2: policy.obligations.GetObligationResponse
+ (*GetObligationsByFQNsRequest)(nil), // 3: policy.obligations.GetObligationsByFQNsRequest
+ (*GetObligationsByFQNsResponse)(nil), // 4: policy.obligations.GetObligationsByFQNsResponse
+ (*CreateObligationRequest)(nil), // 5: policy.obligations.CreateObligationRequest
+ (*CreateObligationResponse)(nil), // 6: policy.obligations.CreateObligationResponse
+ (*UpdateObligationRequest)(nil), // 7: policy.obligations.UpdateObligationRequest
+ (*UpdateObligationResponse)(nil), // 8: policy.obligations.UpdateObligationResponse
+ (*DeleteObligationRequest)(nil), // 9: policy.obligations.DeleteObligationRequest
+ (*DeleteObligationResponse)(nil), // 10: policy.obligations.DeleteObligationResponse
+ (*ListObligationsRequest)(nil), // 11: policy.obligations.ListObligationsRequest
+ (*ListObligationsResponse)(nil), // 12: policy.obligations.ListObligationsResponse
+ (*GetObligationValueRequest)(nil), // 13: policy.obligations.GetObligationValueRequest
+ (*GetObligationValueResponse)(nil), // 14: policy.obligations.GetObligationValueResponse
+ (*GetObligationValuesByFQNsRequest)(nil), // 15: policy.obligations.GetObligationValuesByFQNsRequest
+ (*GetObligationValuesByFQNsResponse)(nil), // 16: policy.obligations.GetObligationValuesByFQNsResponse
+ (*CreateObligationValueRequest)(nil), // 17: policy.obligations.CreateObligationValueRequest
+ (*CreateObligationValueResponse)(nil), // 18: policy.obligations.CreateObligationValueResponse
+ (*UpdateObligationValueRequest)(nil), // 19: policy.obligations.UpdateObligationValueRequest
+ (*UpdateObligationValueResponse)(nil), // 20: policy.obligations.UpdateObligationValueResponse
+ (*DeleteObligationValueRequest)(nil), // 21: policy.obligations.DeleteObligationValueRequest
+ (*DeleteObligationValueResponse)(nil), // 22: policy.obligations.DeleteObligationValueResponse
+ (*AddObligationTriggerRequest)(nil), // 23: policy.obligations.AddObligationTriggerRequest
+ (*AddObligationTriggerResponse)(nil), // 24: policy.obligations.AddObligationTriggerResponse
+ (*RemoveObligationTriggerRequest)(nil), // 25: policy.obligations.RemoveObligationTriggerRequest
+ (*RemoveObligationTriggerResponse)(nil), // 26: policy.obligations.RemoveObligationTriggerResponse
+ nil, // 27: policy.obligations.GetObligationsByFQNsResponse.FqnObligationMapEntry
+ nil, // 28: policy.obligations.GetObligationValuesByFQNsResponse.FqnValueMapEntry
+ (*common.IdNameIdentifier)(nil), // 29: common.IdNameIdentifier
+ (*common.IdFqnIdentifier)(nil), // 30: common.IdFqnIdentifier
+ (*policy.Obligation)(nil), // 31: policy.Obligation
+ (*common.MetadataMutable)(nil), // 32: common.MetadataMutable
+ (common.MetadataUpdateEnum)(0), // 33: common.MetadataUpdateEnum
+ (*policy.PageRequest)(nil), // 34: policy.PageRequest
+ (*policy.PageResponse)(nil), // 35: policy.PageResponse
+ (*policy.ObligationValue)(nil), // 36: policy.ObligationValue
+ (*policy.ObligationTrigger)(nil), // 37: policy.ObligationTrigger
}
var file_policy_obligations_obligations_proto_depIdxs = []int32{
- 28, // 0: policy.obligations.GetObligationResponse.obligation:type_name -> policy.Obligation
- 26, // 1: policy.obligations.GetObligationsByFQNsResponse.fqn_obligation_map:type_name -> policy.obligations.GetObligationsByFQNsResponse.FqnObligationMapEntry
- 29, // 2: policy.obligations.CreateObligationRequest.metadata:type_name -> common.MetadataMutable
- 28, // 3: policy.obligations.CreateObligationResponse.obligation:type_name -> policy.Obligation
- 29, // 4: policy.obligations.UpdateObligationRequest.metadata:type_name -> common.MetadataMutable
- 30, // 5: policy.obligations.UpdateObligationRequest.metadata_update_behavior:type_name -> common.MetadataUpdateEnum
- 28, // 6: policy.obligations.UpdateObligationResponse.obligation:type_name -> policy.Obligation
- 28, // 7: policy.obligations.DeleteObligationResponse.obligation:type_name -> policy.Obligation
- 31, // 8: policy.obligations.ListObligationsRequest.pagination:type_name -> policy.PageRequest
- 28, // 9: policy.obligations.ListObligationsResponse.obligations:type_name -> policy.Obligation
- 32, // 10: policy.obligations.ListObligationsResponse.pagination:type_name -> policy.PageResponse
- 33, // 11: policy.obligations.GetObligationValueResponse.value:type_name -> policy.ObligationValue
- 27, // 12: policy.obligations.GetObligationValuesByFQNsResponse.fqn_value_map:type_name -> policy.obligations.GetObligationValuesByFQNsResponse.FqnValueMapEntry
- 29, // 13: policy.obligations.CreateObligationValueRequest.metadata:type_name -> common.MetadataMutable
- 33, // 14: policy.obligations.CreateObligationValueResponse.value:type_name -> policy.ObligationValue
- 29, // 15: policy.obligations.UpdateObligationValueRequest.metadata:type_name -> common.MetadataMutable
- 30, // 16: policy.obligations.UpdateObligationValueRequest.metadata_update_behavior:type_name -> common.MetadataUpdateEnum
- 33, // 17: policy.obligations.UpdateObligationValueResponse.value:type_name -> policy.ObligationValue
- 33, // 18: policy.obligations.DeleteObligationValueResponse.value:type_name -> policy.ObligationValue
- 34, // 19: policy.obligations.AddObligationTriggerRequest.obligation_value:type_name -> common.IdFqnIdentifier
- 35, // 20: policy.obligations.AddObligationTriggerRequest.action:type_name -> common.IdNameIdentifier
- 34, // 21: policy.obligations.AddObligationTriggerRequest.attribute_value:type_name -> common.IdFqnIdentifier
- 29, // 22: policy.obligations.AddObligationTriggerRequest.metadata:type_name -> common.MetadataMutable
- 36, // 23: policy.obligations.AddObligationTriggerResponse.trigger:type_name -> policy.ObligationTrigger
- 36, // 24: policy.obligations.RemoveObligationTriggerResponse.trigger:type_name -> policy.ObligationTrigger
- 28, // 25: policy.obligations.GetObligationsByFQNsResponse.FqnObligationMapEntry.value:type_name -> policy.Obligation
- 33, // 26: policy.obligations.GetObligationValuesByFQNsResponse.FqnValueMapEntry.value:type_name -> policy.ObligationValue
- 10, // 27: policy.obligations.Service.ListObligations:input_type -> policy.obligations.ListObligationsRequest
- 0, // 28: policy.obligations.Service.GetObligation:input_type -> policy.obligations.GetObligationRequest
- 2, // 29: policy.obligations.Service.GetObligationsByFQNs:input_type -> policy.obligations.GetObligationsByFQNsRequest
- 4, // 30: policy.obligations.Service.CreateObligation:input_type -> policy.obligations.CreateObligationRequest
- 6, // 31: policy.obligations.Service.UpdateObligation:input_type -> policy.obligations.UpdateObligationRequest
- 8, // 32: policy.obligations.Service.DeleteObligation:input_type -> policy.obligations.DeleteObligationRequest
- 12, // 33: policy.obligations.Service.GetObligationValue:input_type -> policy.obligations.GetObligationValueRequest
- 14, // 34: policy.obligations.Service.GetObligationValuesByFQNs:input_type -> policy.obligations.GetObligationValuesByFQNsRequest
- 16, // 35: policy.obligations.Service.CreateObligationValue:input_type -> policy.obligations.CreateObligationValueRequest
- 18, // 36: policy.obligations.Service.UpdateObligationValue:input_type -> policy.obligations.UpdateObligationValueRequest
- 20, // 37: policy.obligations.Service.DeleteObligationValue:input_type -> policy.obligations.DeleteObligationValueRequest
- 22, // 38: policy.obligations.Service.AddObligationTrigger:input_type -> policy.obligations.AddObligationTriggerRequest
- 24, // 39: policy.obligations.Service.RemoveObligationTrigger:input_type -> policy.obligations.RemoveObligationTriggerRequest
- 11, // 40: policy.obligations.Service.ListObligations:output_type -> policy.obligations.ListObligationsResponse
- 1, // 41: policy.obligations.Service.GetObligation:output_type -> policy.obligations.GetObligationResponse
- 3, // 42: policy.obligations.Service.GetObligationsByFQNs:output_type -> policy.obligations.GetObligationsByFQNsResponse
- 5, // 43: policy.obligations.Service.CreateObligation:output_type -> policy.obligations.CreateObligationResponse
- 7, // 44: policy.obligations.Service.UpdateObligation:output_type -> policy.obligations.UpdateObligationResponse
- 9, // 45: policy.obligations.Service.DeleteObligation:output_type -> policy.obligations.DeleteObligationResponse
- 13, // 46: policy.obligations.Service.GetObligationValue:output_type -> policy.obligations.GetObligationValueResponse
- 15, // 47: policy.obligations.Service.GetObligationValuesByFQNs:output_type -> policy.obligations.GetObligationValuesByFQNsResponse
- 17, // 48: policy.obligations.Service.CreateObligationValue:output_type -> policy.obligations.CreateObligationValueResponse
- 19, // 49: policy.obligations.Service.UpdateObligationValue:output_type -> policy.obligations.UpdateObligationValueResponse
- 21, // 50: policy.obligations.Service.DeleteObligationValue:output_type -> policy.obligations.DeleteObligationValueResponse
- 23, // 51: policy.obligations.Service.AddObligationTrigger:output_type -> policy.obligations.AddObligationTriggerResponse
- 25, // 52: policy.obligations.Service.RemoveObligationTrigger:output_type -> policy.obligations.RemoveObligationTriggerResponse
- 40, // [40:53] is the sub-list for method output_type
- 27, // [27:40] is the sub-list for method input_type
- 27, // [27:27] is the sub-list for extension type_name
- 27, // [27:27] is the sub-list for extension extendee
- 0, // [0:27] is the sub-list for field type_name
+ 29, // 0: policy.obligations.ValueTriggerRequest.action:type_name -> common.IdNameIdentifier
+ 30, // 1: policy.obligations.ValueTriggerRequest.attribute_value:type_name -> common.IdFqnIdentifier
+ 31, // 2: policy.obligations.GetObligationResponse.obligation:type_name -> policy.Obligation
+ 27, // 3: policy.obligations.GetObligationsByFQNsResponse.fqn_obligation_map:type_name -> policy.obligations.GetObligationsByFQNsResponse.FqnObligationMapEntry
+ 32, // 4: policy.obligations.CreateObligationRequest.metadata:type_name -> common.MetadataMutable
+ 31, // 5: policy.obligations.CreateObligationResponse.obligation:type_name -> policy.Obligation
+ 32, // 6: policy.obligations.UpdateObligationRequest.metadata:type_name -> common.MetadataMutable
+ 33, // 7: policy.obligations.UpdateObligationRequest.metadata_update_behavior:type_name -> common.MetadataUpdateEnum
+ 31, // 8: policy.obligations.UpdateObligationResponse.obligation:type_name -> policy.Obligation
+ 31, // 9: policy.obligations.DeleteObligationResponse.obligation:type_name -> policy.Obligation
+ 34, // 10: policy.obligations.ListObligationsRequest.pagination:type_name -> policy.PageRequest
+ 31, // 11: policy.obligations.ListObligationsResponse.obligations:type_name -> policy.Obligation
+ 35, // 12: policy.obligations.ListObligationsResponse.pagination:type_name -> policy.PageResponse
+ 36, // 13: policy.obligations.GetObligationValueResponse.value:type_name -> policy.ObligationValue
+ 28, // 14: policy.obligations.GetObligationValuesByFQNsResponse.fqn_value_map:type_name -> policy.obligations.GetObligationValuesByFQNsResponse.FqnValueMapEntry
+ 1, // 15: policy.obligations.CreateObligationValueRequest.triggers:type_name -> policy.obligations.ValueTriggerRequest
+ 32, // 16: policy.obligations.CreateObligationValueRequest.metadata:type_name -> common.MetadataMutable
+ 36, // 17: policy.obligations.CreateObligationValueResponse.value:type_name -> policy.ObligationValue
+ 1, // 18: policy.obligations.UpdateObligationValueRequest.triggers:type_name -> policy.obligations.ValueTriggerRequest
+ 32, // 19: policy.obligations.UpdateObligationValueRequest.metadata:type_name -> common.MetadataMutable
+ 33, // 20: policy.obligations.UpdateObligationValueRequest.metadata_update_behavior:type_name -> common.MetadataUpdateEnum
+ 36, // 21: policy.obligations.UpdateObligationValueResponse.value:type_name -> policy.ObligationValue
+ 36, // 22: policy.obligations.DeleteObligationValueResponse.value:type_name -> policy.ObligationValue
+ 30, // 23: policy.obligations.AddObligationTriggerRequest.obligation_value:type_name -> common.IdFqnIdentifier
+ 29, // 24: policy.obligations.AddObligationTriggerRequest.action:type_name -> common.IdNameIdentifier
+ 30, // 25: policy.obligations.AddObligationTriggerRequest.attribute_value:type_name -> common.IdFqnIdentifier
+ 32, // 26: policy.obligations.AddObligationTriggerRequest.metadata:type_name -> common.MetadataMutable
+ 37, // 27: policy.obligations.AddObligationTriggerResponse.trigger:type_name -> policy.ObligationTrigger
+ 37, // 28: policy.obligations.RemoveObligationTriggerResponse.trigger:type_name -> policy.ObligationTrigger
+ 31, // 29: policy.obligations.GetObligationsByFQNsResponse.FqnObligationMapEntry.value:type_name -> policy.Obligation
+ 36, // 30: policy.obligations.GetObligationValuesByFQNsResponse.FqnValueMapEntry.value:type_name -> policy.ObligationValue
+ 11, // 31: policy.obligations.Service.ListObligations:input_type -> policy.obligations.ListObligationsRequest
+ 0, // 32: policy.obligations.Service.GetObligation:input_type -> policy.obligations.GetObligationRequest
+ 3, // 33: policy.obligations.Service.GetObligationsByFQNs:input_type -> policy.obligations.GetObligationsByFQNsRequest
+ 5, // 34: policy.obligations.Service.CreateObligation:input_type -> policy.obligations.CreateObligationRequest
+ 7, // 35: policy.obligations.Service.UpdateObligation:input_type -> policy.obligations.UpdateObligationRequest
+ 9, // 36: policy.obligations.Service.DeleteObligation:input_type -> policy.obligations.DeleteObligationRequest
+ 13, // 37: policy.obligations.Service.GetObligationValue:input_type -> policy.obligations.GetObligationValueRequest
+ 15, // 38: policy.obligations.Service.GetObligationValuesByFQNs:input_type -> policy.obligations.GetObligationValuesByFQNsRequest
+ 17, // 39: policy.obligations.Service.CreateObligationValue:input_type -> policy.obligations.CreateObligationValueRequest
+ 19, // 40: policy.obligations.Service.UpdateObligationValue:input_type -> policy.obligations.UpdateObligationValueRequest
+ 21, // 41: policy.obligations.Service.DeleteObligationValue:input_type -> policy.obligations.DeleteObligationValueRequest
+ 23, // 42: policy.obligations.Service.AddObligationTrigger:input_type -> policy.obligations.AddObligationTriggerRequest
+ 25, // 43: policy.obligations.Service.RemoveObligationTrigger:input_type -> policy.obligations.RemoveObligationTriggerRequest
+ 12, // 44: policy.obligations.Service.ListObligations:output_type -> policy.obligations.ListObligationsResponse
+ 2, // 45: policy.obligations.Service.GetObligation:output_type -> policy.obligations.GetObligationResponse
+ 4, // 46: policy.obligations.Service.GetObligationsByFQNs:output_type -> policy.obligations.GetObligationsByFQNsResponse
+ 6, // 47: policy.obligations.Service.CreateObligation:output_type -> policy.obligations.CreateObligationResponse
+ 8, // 48: policy.obligations.Service.UpdateObligation:output_type -> policy.obligations.UpdateObligationResponse
+ 10, // 49: policy.obligations.Service.DeleteObligation:output_type -> policy.obligations.DeleteObligationResponse
+ 14, // 50: policy.obligations.Service.GetObligationValue:output_type -> policy.obligations.GetObligationValueResponse
+ 16, // 51: policy.obligations.Service.GetObligationValuesByFQNs:output_type -> policy.obligations.GetObligationValuesByFQNsResponse
+ 18, // 52: policy.obligations.Service.CreateObligationValue:output_type -> policy.obligations.CreateObligationValueResponse
+ 20, // 53: policy.obligations.Service.UpdateObligationValue:output_type -> policy.obligations.UpdateObligationValueResponse
+ 22, // 54: policy.obligations.Service.DeleteObligationValue:output_type -> policy.obligations.DeleteObligationValueResponse
+ 24, // 55: policy.obligations.Service.AddObligationTrigger:output_type -> policy.obligations.AddObligationTriggerResponse
+ 26, // 56: policy.obligations.Service.RemoveObligationTrigger:output_type -> policy.obligations.RemoveObligationTriggerResponse
+ 44, // [44:57] is the sub-list for method output_type
+ 31, // [31:44] is the sub-list for method input_type
+ 31, // [31:31] is the sub-list for extension type_name
+ 31, // [31:31] is the sub-list for extension extendee
+ 0, // [0:31] is the sub-list for field type_name
}
func init() { file_policy_obligations_obligations_proto_init() }
@@ -2093,7 +2193,7 @@ func file_policy_obligations_obligations_proto_init() {
}
}
file_policy_obligations_obligations_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*GetObligationResponse); i {
+ switch v := v.(*ValueTriggerRequest); i {
case 0:
return &v.state
case 1:
@@ -2105,7 +2205,7 @@ func file_policy_obligations_obligations_proto_init() {
}
}
file_policy_obligations_obligations_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*GetObligationsByFQNsRequest); i {
+ switch v := v.(*GetObligationResponse); i {
case 0:
return &v.state
case 1:
@@ -2117,7 +2217,7 @@ func file_policy_obligations_obligations_proto_init() {
}
}
file_policy_obligations_obligations_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*GetObligationsByFQNsResponse); i {
+ switch v := v.(*GetObligationsByFQNsRequest); i {
case 0:
return &v.state
case 1:
@@ -2129,7 +2229,7 @@ func file_policy_obligations_obligations_proto_init() {
}
}
file_policy_obligations_obligations_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*CreateObligationRequest); i {
+ switch v := v.(*GetObligationsByFQNsResponse); i {
case 0:
return &v.state
case 1:
@@ -2141,7 +2241,7 @@ func file_policy_obligations_obligations_proto_init() {
}
}
file_policy_obligations_obligations_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*CreateObligationResponse); i {
+ switch v := v.(*CreateObligationRequest); i {
case 0:
return &v.state
case 1:
@@ -2153,7 +2253,7 @@ func file_policy_obligations_obligations_proto_init() {
}
}
file_policy_obligations_obligations_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*UpdateObligationRequest); i {
+ switch v := v.(*CreateObligationResponse); i {
case 0:
return &v.state
case 1:
@@ -2165,7 +2265,7 @@ func file_policy_obligations_obligations_proto_init() {
}
}
file_policy_obligations_obligations_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*UpdateObligationResponse); i {
+ switch v := v.(*UpdateObligationRequest); i {
case 0:
return &v.state
case 1:
@@ -2177,7 +2277,7 @@ func file_policy_obligations_obligations_proto_init() {
}
}
file_policy_obligations_obligations_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*DeleteObligationRequest); i {
+ switch v := v.(*UpdateObligationResponse); i {
case 0:
return &v.state
case 1:
@@ -2189,7 +2289,7 @@ func file_policy_obligations_obligations_proto_init() {
}
}
file_policy_obligations_obligations_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*DeleteObligationResponse); i {
+ switch v := v.(*DeleteObligationRequest); i {
case 0:
return &v.state
case 1:
@@ -2201,7 +2301,7 @@ func file_policy_obligations_obligations_proto_init() {
}
}
file_policy_obligations_obligations_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ListObligationsRequest); i {
+ switch v := v.(*DeleteObligationResponse); i {
case 0:
return &v.state
case 1:
@@ -2213,7 +2313,7 @@ func file_policy_obligations_obligations_proto_init() {
}
}
file_policy_obligations_obligations_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ListObligationsResponse); i {
+ switch v := v.(*ListObligationsRequest); i {
case 0:
return &v.state
case 1:
@@ -2225,7 +2325,7 @@ func file_policy_obligations_obligations_proto_init() {
}
}
file_policy_obligations_obligations_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*GetObligationValueRequest); i {
+ switch v := v.(*ListObligationsResponse); i {
case 0:
return &v.state
case 1:
@@ -2237,7 +2337,7 @@ func file_policy_obligations_obligations_proto_init() {
}
}
file_policy_obligations_obligations_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*GetObligationValueResponse); i {
+ switch v := v.(*GetObligationValueRequest); i {
case 0:
return &v.state
case 1:
@@ -2249,7 +2349,7 @@ func file_policy_obligations_obligations_proto_init() {
}
}
file_policy_obligations_obligations_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*GetObligationValuesByFQNsRequest); i {
+ switch v := v.(*GetObligationValueResponse); i {
case 0:
return &v.state
case 1:
@@ -2261,7 +2361,7 @@ func file_policy_obligations_obligations_proto_init() {
}
}
file_policy_obligations_obligations_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*GetObligationValuesByFQNsResponse); i {
+ switch v := v.(*GetObligationValuesByFQNsRequest); i {
case 0:
return &v.state
case 1:
@@ -2273,7 +2373,7 @@ func file_policy_obligations_obligations_proto_init() {
}
}
file_policy_obligations_obligations_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*CreateObligationValueRequest); i {
+ switch v := v.(*GetObligationValuesByFQNsResponse); i {
case 0:
return &v.state
case 1:
@@ -2285,7 +2385,7 @@ func file_policy_obligations_obligations_proto_init() {
}
}
file_policy_obligations_obligations_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*CreateObligationValueResponse); i {
+ switch v := v.(*CreateObligationValueRequest); i {
case 0:
return &v.state
case 1:
@@ -2297,7 +2397,7 @@ func file_policy_obligations_obligations_proto_init() {
}
}
file_policy_obligations_obligations_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*UpdateObligationValueRequest); i {
+ switch v := v.(*CreateObligationValueResponse); i {
case 0:
return &v.state
case 1:
@@ -2309,7 +2409,7 @@ func file_policy_obligations_obligations_proto_init() {
}
}
file_policy_obligations_obligations_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*UpdateObligationValueResponse); i {
+ switch v := v.(*UpdateObligationValueRequest); i {
case 0:
return &v.state
case 1:
@@ -2321,7 +2421,7 @@ func file_policy_obligations_obligations_proto_init() {
}
}
file_policy_obligations_obligations_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*DeleteObligationValueRequest); i {
+ switch v := v.(*UpdateObligationValueResponse); i {
case 0:
return &v.state
case 1:
@@ -2333,7 +2433,7 @@ func file_policy_obligations_obligations_proto_init() {
}
}
file_policy_obligations_obligations_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*DeleteObligationValueResponse); i {
+ switch v := v.(*DeleteObligationValueRequest); i {
case 0:
return &v.state
case 1:
@@ -2345,7 +2445,7 @@ func file_policy_obligations_obligations_proto_init() {
}
}
file_policy_obligations_obligations_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*AddObligationTriggerRequest); i {
+ switch v := v.(*DeleteObligationValueResponse); i {
case 0:
return &v.state
case 1:
@@ -2357,7 +2457,7 @@ func file_policy_obligations_obligations_proto_init() {
}
}
file_policy_obligations_obligations_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*AddObligationTriggerResponse); i {
+ switch v := v.(*AddObligationTriggerRequest); i {
case 0:
return &v.state
case 1:
@@ -2369,7 +2469,7 @@ func file_policy_obligations_obligations_proto_init() {
}
}
file_policy_obligations_obligations_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*RemoveObligationTriggerRequest); i {
+ switch v := v.(*AddObligationTriggerResponse); i {
case 0:
return &v.state
case 1:
@@ -2381,6 +2481,18 @@ func file_policy_obligations_obligations_proto_init() {
}
}
file_policy_obligations_obligations_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*RemoveObligationTriggerRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_policy_obligations_obligations_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*RemoveObligationTriggerResponse); i {
case 0:
return &v.state
@@ -2397,27 +2509,27 @@ func file_policy_obligations_obligations_proto_init() {
(*GetObligationRequest_Id)(nil),
(*GetObligationRequest_Fqn)(nil),
}
- file_policy_obligations_obligations_proto_msgTypes[4].OneofWrappers = []interface{}{
+ file_policy_obligations_obligations_proto_msgTypes[5].OneofWrappers = []interface{}{
(*CreateObligationRequest_Id)(nil),
(*CreateObligationRequest_Fqn)(nil),
}
- file_policy_obligations_obligations_proto_msgTypes[8].OneofWrappers = []interface{}{
+ file_policy_obligations_obligations_proto_msgTypes[9].OneofWrappers = []interface{}{
(*DeleteObligationRequest_Id)(nil),
(*DeleteObligationRequest_Fqn)(nil),
}
- file_policy_obligations_obligations_proto_msgTypes[10].OneofWrappers = []interface{}{
+ file_policy_obligations_obligations_proto_msgTypes[11].OneofWrappers = []interface{}{
(*ListObligationsRequest_Id)(nil),
(*ListObligationsRequest_Fqn)(nil),
}
- file_policy_obligations_obligations_proto_msgTypes[12].OneofWrappers = []interface{}{
+ file_policy_obligations_obligations_proto_msgTypes[13].OneofWrappers = []interface{}{
(*GetObligationValueRequest_Id)(nil),
(*GetObligationValueRequest_Fqn)(nil),
}
- file_policy_obligations_obligations_proto_msgTypes[16].OneofWrappers = []interface{}{
+ file_policy_obligations_obligations_proto_msgTypes[17].OneofWrappers = []interface{}{
(*CreateObligationValueRequest_Id)(nil),
(*CreateObligationValueRequest_Fqn)(nil),
}
- file_policy_obligations_obligations_proto_msgTypes[20].OneofWrappers = []interface{}{
+ file_policy_obligations_obligations_proto_msgTypes[21].OneofWrappers = []interface{}{
(*DeleteObligationValueRequest_Id)(nil),
(*DeleteObligationValueRequest_Fqn)(nil),
}
@@ -2427,7 +2539,7 @@ func file_policy_obligations_obligations_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_policy_obligations_obligations_proto_rawDesc,
NumEnums: 0,
- NumMessages: 28,
+ NumMessages: 29,
NumExtensions: 0,
NumServices: 1,
},
diff --git a/service/integration/obligation_triggers_test.go b/service/integration/obligation_triggers_test.go
index f8444f98c9..1e028a434f 100644
--- a/service/integration/obligation_triggers_test.go
+++ b/service/integration/obligation_triggers_test.go
@@ -197,7 +197,7 @@ func (s *ObligationTriggersSuite) Test_CreateObligationTrigger_ActionNotFound_Fa
Action: &common.IdNameIdentifier{Id: randomID},
})
s.Require().Error(err)
- s.Require().ErrorIs(err, db.ErrNotNullViolation)
+ s.Require().ErrorIs(err, db.ErrInvalidOblTriParam)
s.Nil(trigger)
}
@@ -234,7 +234,7 @@ func (s *ObligationTriggersSuite) Test_CreateObligationTrigger_AttributeValueDif
Action: &common.IdNameIdentifier{Id: s.action.GetId()},
})
s.Require().Error(err)
- s.Require().ErrorIs(err, db.ErrNotNullViolation)
+ s.Require().ErrorIs(err, db.ErrInvalidOblTriParam)
s.Nil(trigger)
}
diff --git a/service/integration/obligations_test.go b/service/integration/obligations_test.go
index da7fe2eff1..27d32b9f15 100644
--- a/service/integration/obligations_test.go
+++ b/service/integration/obligations_test.go
@@ -23,6 +23,21 @@ type ObligationsSuite struct {
ctx context.Context //nolint:containedctx // context is used in the test suite
}
+type TriggerSetup struct {
+ createdObl *policy.Obligation
+ namespace *fixtures.FixtureDataNamespace
+ action *policy.Action
+ attributeValues []*fixtures.FixtureDataAttributeValue
+}
+
+type TriggerAssertion struct {
+ expectedAction *policy.Action
+ expectedObligation *policy.Obligation
+ expectedAttributeValue *fixtures.FixtureDataAttributeValue
+ expectedAttributeValueFQN string
+ expectedObligationValue *policy.ObligationValue
+}
+
func (s *ObligationsSuite) SetupSuite() {
slog.Info("setting up db.Obligations test suite")
s.ctx = context.Background()
@@ -547,6 +562,96 @@ func (s *ObligationsSuite) Test_CreateObligationValue_Succeeds() {
s.deleteObligations([]string{createdObl.GetId()})
}
+func (s *ObligationsSuite) Test_CreateObligationValue_WithTriggers_IDs_Succeeds() {
+ // Set up the obligation
+ triggerSetup := s.setupTriggerTests()
+ defer s.deleteObligations([]string{triggerSetup.createdObl.GetId()})
+
+ // Create the obligation value with a trigger
+ oblValue, err := s.db.PolicyClient.CreateObligationValue(s.ctx, &obligations.CreateObligationValueRequest{
+ ObligationIdentifier: &obligations.CreateObligationValueRequest_Id{
+ Id: triggerSetup.createdObl.GetId(),
+ },
+ Value: oblValPrefix + "test-1",
+ Triggers: []*obligations.ValueTriggerRequest{
+ {
+ Action: &common.IdNameIdentifier{Id: triggerSetup.action.GetId()},
+ AttributeValue: &common.IdFqnIdentifier{Id: triggerSetup.attributeValues[0].ID},
+ },
+ {
+ Action: &common.IdNameIdentifier{Id: triggerSetup.action.GetId()},
+ AttributeValue: &common.IdFqnIdentifier{Id: triggerSetup.attributeValues[1].ID},
+ },
+ },
+ })
+
+ // Assert the results
+ s.Require().NoError(err)
+ s.NotNil(oblValue)
+ s.assertObligationValueBasics(oblValue, oblValPrefix+"test-1", triggerSetup.namespace.ID, triggerSetup.namespace.Name, httpsPrefix+triggerSetup.namespace.Name)
+ s.assertTriggers(oblValue, []*TriggerAssertion{
+ {
+ expectedAction: triggerSetup.action,
+ expectedObligation: triggerSetup.createdObl,
+ expectedAttributeValue: triggerSetup.attributeValues[0],
+ expectedAttributeValueFQN: "https://example.com/attr/attr1/value/value1",
+ expectedObligationValue: oblValue,
+ },
+ {
+ expectedAction: triggerSetup.action,
+ expectedObligation: triggerSetup.createdObl,
+ expectedAttributeValue: triggerSetup.attributeValues[1],
+ expectedAttributeValueFQN: "https://example.com/attr/attr1/value/value2",
+ expectedObligationValue: oblValue,
+ },
+ })
+}
+
+func (s *ObligationsSuite) Test_CreateObligationValue_WithTriggers_FQNsNames_Succeeds() {
+ // Set up the obligation
+ triggerSetup := s.setupTriggerTests()
+ defer s.deleteObligations([]string{triggerSetup.createdObl.GetId()})
+
+ // Create the obligation value with a trigger
+ oblValue, err := s.db.PolicyClient.CreateObligationValue(s.ctx, &obligations.CreateObligationValueRequest{
+ ObligationIdentifier: &obligations.CreateObligationValueRequest_Id{
+ Id: triggerSetup.createdObl.GetId(),
+ },
+ Value: oblValPrefix + "test-1",
+ Triggers: []*obligations.ValueTriggerRequest{
+ {
+ Action: &common.IdNameIdentifier{Name: triggerSetup.action.GetName()},
+ AttributeValue: &common.IdFqnIdentifier{Fqn: "https://example.com/attr/attr1/value/value1"},
+ },
+ {
+ Action: &common.IdNameIdentifier{Name: triggerSetup.action.GetName()},
+ AttributeValue: &common.IdFqnIdentifier{Fqn: "https://example.com/attr/attr1/value/value2"},
+ },
+ },
+ })
+
+ // Assert the results
+ s.Require().NoError(err)
+ s.NotNil(oblValue)
+ s.assertObligationValueBasics(oblValue, oblValPrefix+"test-1", triggerSetup.namespace.ID, triggerSetup.namespace.Name, httpsPrefix+triggerSetup.namespace.Name)
+ s.assertTriggers(oblValue, []*TriggerAssertion{
+ {
+ expectedAction: triggerSetup.action,
+ expectedObligation: triggerSetup.createdObl,
+ expectedAttributeValue: triggerSetup.attributeValues[0],
+ expectedAttributeValueFQN: "https://example.com/attr/attr1/value/value1",
+ expectedObligationValue: oblValue,
+ },
+ {
+ expectedAction: triggerSetup.action,
+ expectedObligation: triggerSetup.createdObl,
+ expectedAttributeValue: triggerSetup.attributeValues[1],
+ expectedAttributeValueFQN: "https://example.com/attr/attr1/value/value2",
+ expectedObligationValue: oblValue,
+ },
+ })
+}
+
func (s *ObligationsSuite) Test_CreateObligationValue_Fails() {
// Test 1: Invalid obligation ID
oblValue, err := s.db.PolicyClient.CreateObligationValue(s.ctx, &obligations.CreateObligationValueRequest{
@@ -918,6 +1023,142 @@ func (s *ObligationsSuite) Test_UpdateObligationValue_Succeeds() {
s.deleteObligations([]string{createdObl.GetId()})
}
+// TODO: Add a test to verify that no existing triggers change when not specifying triggers.
+// TODO: Add test when we return triggers in Obligation GETs/Lists
+func (s *ObligationsSuite) Test_UpdateObligationValue_WithTriggers_IDs_Succeeds() {
+ triggerSetup := s.setupTriggerTests()
+ defer s.deleteObligations([]string{triggerSetup.createdObl.GetId()})
+
+ oblValue, err := s.db.PolicyClient.CreateObligationValue(s.ctx, &obligations.CreateObligationValueRequest{
+ ObligationIdentifier: &obligations.CreateObligationValueRequest_Id{
+ Id: triggerSetup.createdObl.GetId(),
+ },
+ Value: oblValPrefix + "test-1",
+ Triggers: []*obligations.ValueTriggerRequest{
+ {
+ Action: &common.IdNameIdentifier{Id: triggerSetup.action.GetId()},
+ AttributeValue: &common.IdFqnIdentifier{Id: triggerSetup.attributeValues[0].ID},
+ },
+ {
+ Action: &common.IdNameIdentifier{Id: triggerSetup.action.GetId()},
+ AttributeValue: &common.IdFqnIdentifier{Id: triggerSetup.attributeValues[1].ID},
+ },
+ },
+ })
+
+ // Assert the results
+ s.Require().NoError(err)
+ s.NotNil(oblValue)
+ s.assertObligationValueBasics(oblValue, oblValPrefix+"test-1", triggerSetup.namespace.ID, triggerSetup.namespace.Name, httpsPrefix+triggerSetup.namespace.Name)
+ s.assertTriggers(oblValue, []*TriggerAssertion{
+ {
+ expectedAction: triggerSetup.action,
+ expectedObligation: triggerSetup.createdObl,
+ expectedAttributeValue: triggerSetup.attributeValues[0],
+ expectedAttributeValueFQN: "https://example.com/attr/attr1/value/value1",
+ expectedObligationValue: oblValue,
+ },
+ {
+ expectedAction: triggerSetup.action,
+ expectedObligation: triggerSetup.createdObl,
+ expectedAttributeValueFQN: "https://example.com/attr/attr1/value/value2",
+ expectedAttributeValue: triggerSetup.attributeValues[1],
+ expectedObligationValue: oblValue,
+ },
+ })
+
+ updatedOblValue, err := s.db.PolicyClient.UpdateObligationValue(s.ctx, &obligations.UpdateObligationValueRequest{
+ Id: oblValue.GetId(),
+ Value: oblValPrefix + "test-1-updated",
+ Triggers: []*obligations.ValueTriggerRequest{
+ {
+ Action: &common.IdNameIdentifier{Id: triggerSetup.action.GetId()},
+ AttributeValue: &common.IdFqnIdentifier{Id: triggerSetup.attributeValues[0].ID},
+ },
+ },
+ })
+ s.Require().NoError(err)
+ s.NotNil(updatedOblValue)
+ s.assertObligationValueBasics(updatedOblValue, oblValPrefix+"test-1-updated", triggerSetup.namespace.ID, triggerSetup.namespace.Name, httpsPrefix+triggerSetup.namespace.Name)
+ s.assertTriggers(updatedOblValue, []*TriggerAssertion{
+ {
+ expectedAction: triggerSetup.action,
+ expectedObligation: triggerSetup.createdObl,
+ expectedAttributeValue: triggerSetup.attributeValues[0],
+ expectedAttributeValueFQN: "https://example.com/attr/attr1/value/value1",
+ expectedObligationValue: updatedOblValue,
+ },
+ })
+ s.Require().NotEqual(oblValue.GetTriggers()[1].GetAttributeValue().GetFqn(), updatedOblValue.GetTriggers()[0].GetAttributeValue().GetFqn(), "The second trigger should have been removed")
+}
+
+func (s *ObligationsSuite) Test_UpdateObligationValue_WithTriggers_FQNName_Succeeds() {
+ triggerSetup := s.setupTriggerTests()
+ defer s.deleteObligations([]string{triggerSetup.createdObl.GetId()})
+
+ oblValue, err := s.db.PolicyClient.CreateObligationValue(s.ctx, &obligations.CreateObligationValueRequest{
+ ObligationIdentifier: &obligations.CreateObligationValueRequest_Id{
+ Id: triggerSetup.createdObl.GetId(),
+ },
+ Value: oblValPrefix + "test-1",
+ Triggers: []*obligations.ValueTriggerRequest{
+ {
+ Action: &common.IdNameIdentifier{Id: triggerSetup.action.GetId()},
+ AttributeValue: &common.IdFqnIdentifier{Id: triggerSetup.attributeValues[0].ID},
+ },
+ {
+ Action: &common.IdNameIdentifier{Id: triggerSetup.action.GetId()},
+ AttributeValue: &common.IdFqnIdentifier{Id: triggerSetup.attributeValues[1].ID},
+ },
+ },
+ })
+
+ // Assert the results
+ s.Require().NoError(err)
+ s.NotNil(oblValue)
+ s.assertObligationValueBasics(oblValue, oblValPrefix+"test-1", triggerSetup.namespace.ID, triggerSetup.namespace.Name, httpsPrefix+triggerSetup.namespace.Name)
+ s.assertTriggers(oblValue, []*TriggerAssertion{
+ {
+ expectedAction: triggerSetup.action,
+ expectedObligation: triggerSetup.createdObl,
+ expectedAttributeValue: triggerSetup.attributeValues[0],
+ expectedAttributeValueFQN: "https://example.com/attr/attr1/value/value1",
+ expectedObligationValue: oblValue,
+ },
+ {
+ expectedAction: triggerSetup.action,
+ expectedObligation: triggerSetup.createdObl,
+ expectedAttributeValueFQN: "https://example.com/attr/attr1/value/value2",
+ expectedAttributeValue: triggerSetup.attributeValues[1],
+ expectedObligationValue: oblValue,
+ },
+ })
+
+ updatedOblValue, err := s.db.PolicyClient.UpdateObligationValue(s.ctx, &obligations.UpdateObligationValueRequest{
+ Id: oblValue.GetId(),
+ Value: oblValPrefix + "test-1-updated",
+ Triggers: []*obligations.ValueTriggerRequest{
+ {
+ Action: &common.IdNameIdentifier{Name: triggerSetup.action.GetName()},
+ AttributeValue: &common.IdFqnIdentifier{Fqn: "https://example.com/attr/attr1/value/value1"},
+ },
+ },
+ })
+ s.Require().NoError(err)
+ s.NotNil(updatedOblValue)
+ s.assertObligationValueBasics(updatedOblValue, oblValPrefix+"test-1-updated", triggerSetup.namespace.ID, triggerSetup.namespace.Name, httpsPrefix+triggerSetup.namespace.Name)
+ s.assertTriggers(updatedOblValue, []*TriggerAssertion{
+ {
+ expectedAction: triggerSetup.action,
+ expectedObligation: triggerSetup.createdObl,
+ expectedAttributeValue: triggerSetup.attributeValues[0],
+ expectedAttributeValueFQN: "https://example.com/attr/attr1/value/value1",
+ expectedObligationValue: updatedOblValue,
+ },
+ })
+ s.Require().NotEqual(oblValue.GetTriggers()[1].GetAttributeValue().GetFqn(), updatedOblValue.GetTriggers()[0].GetAttributeValue().GetFqn(), "The second trigger should have been removed")
+}
+
func (s *ObligationsSuite) Test_UpdateObligationValue_Fails() {
oblName := oblName + "-update-fails"
// Test 1: Invalid value ID
@@ -1077,6 +1318,47 @@ func (s *ObligationsSuite) assertObligationValueBasics(oblValue *policy.Obligati
s.assertMetadata(oblValue.GetMetadata())
}
+func (s *ObligationsSuite) setupTriggerTests() *TriggerSetup {
+ namespaceID, _, namespace := s.getNamespaceData(nsExampleCom)
+ createdObl := s.createObligation(namespaceID, oblName, nil)
+ triggerAction := s.f.GetStandardAction("read")
+ triggerAttributeValue := s.f.GetAttributeValueKey("example.com/attr/attr1/value/value1")
+ triggerAttributeValue2 := s.f.GetAttributeValueKey("example.com/attr/attr1/value/value2")
+
+ return &TriggerSetup{
+ createdObl: createdObl,
+ namespace: &namespace,
+ action: triggerAction,
+ attributeValues: []*fixtures.FixtureDataAttributeValue{
+ &triggerAttributeValue,
+ &triggerAttributeValue2,
+ },
+ }
+}
+
+func (s *ObligationsSuite) assertTriggers(oblVal *policy.ObligationValue, expectedTriggers []*TriggerAssertion) {
+ triggers := oblVal.GetTriggers()
+ s.Require().NotNil(triggers)
+ s.Require().Len(triggers, len(expectedTriggers))
+ found := 0
+ for _, t := range triggers {
+ for _, expected := range expectedTriggers {
+ if t.GetAction().GetId() == expected.expectedAction.GetId() &&
+ t.GetAttributeValue().GetId() == expected.expectedAttributeValue.ID &&
+ t.GetObligationValue().GetId() == expected.expectedObligationValue.GetId() {
+ found++
+ s.Require().Equal(expected.expectedAction.GetName(), t.GetAction().GetName())
+ s.Require().Equal(expected.expectedAttributeValue.Value, t.GetAttributeValue().GetValue())
+ s.Require().Equal(expected.expectedAttributeValueFQN, t.GetAttributeValue().GetFqn())
+ s.Require().Equal(expected.expectedObligationValue.GetValue(), t.GetObligationValue().GetValue())
+ s.Require().Equal(expected.expectedObligationValue.GetObligation().GetId(), t.GetObligationValue().GetObligation().GetId())
+ s.Require().Equal(oblVal.GetObligation().GetId(), t.GetObligationValue().GetObligation().GetId())
+ }
+ }
+ }
+ s.Require().Equal(len(expectedTriggers), found)
+}
+
func (s *ObligationsSuite) createObligation(namespaceID, name string, values []string) *policy.Obligation {
obl, err := s.db.PolicyClient.CreateObligation(s.ctx, &obligations.CreateObligationRequest{
NamespaceIdentifier: &obligations.CreateObligationRequest_Id{
diff --git a/service/pkg/db/errors.go b/service/pkg/db/errors.go
index 1abba532c7..f765b36f1c 100644
--- a/service/pkg/db/errors.go
+++ b/service/pkg/db/errors.go
@@ -37,6 +37,7 @@ var (
ErrNamespaceMismatch = errors.New("ErrNamespaceMismatch: namespace mismatch")
ErrKIDMismatch = errors.New("ErrKIDMismatch: Key ID mismatch")
ErrKasURIMismatch = errors.New("ErrKasURIMismatch: KAS URI mismatch")
+ ErrInvalidOblTriParam = errors.New("ErrInvalidOblTriParam: either the obligation value, attribute value, or action provided was not found")
)
// Get helpful error message for PostgreSQL violation
@@ -127,6 +128,7 @@ const (
ErrorTextNamespaceMismatch = "namespace mismatch"
ErrorTextKasURIMismatch = "kas uri mismatch"
ErrorTextKIDMismatch = "key id mismatch"
+ ErrorTextInvalidOblTrigParam = "either the obligation value, attribute value, or action provided is invalid"
)
func StatusifyError(ctx context.Context, l *logger.Logger, err error, fallbackErr string, logs ...any) error {
@@ -191,6 +193,10 @@ func StatusifyError(ctx context.Context, l *logger.Logger, err error, fallbackEr
l.ErrorContext(ctx, ErrorTextKasURIMismatch, logs...)
return connect.NewError(connect.CodeInvalidArgument, errors.New(ErrorTextKasURIMismatch))
}
+ if errors.Is(err, ErrInvalidOblTriParam) {
+ l.ErrorContext(ctx, ErrorTextInvalidOblTrigParam, logs...)
+ return connect.NewError(connect.CodeInvalidArgument, errors.New(ErrorTextInvalidOblTrigParam))
+ }
l.ErrorContext(ctx, "request error", append(logs, slog.Any("error", err))...)
return connect.NewError(connect.CodeInternal, errors.New(fallbackErr))
diff --git a/service/policy/db/obligations.go b/service/policy/db/obligations.go
index a6766a16c8..0db0681913 100644
--- a/service/policy/db/obligations.go
+++ b/service/policy/db/obligations.go
@@ -2,6 +2,7 @@ package db
import (
"context"
+ "errors"
"fmt"
"strings"
@@ -323,6 +324,22 @@ func (c PolicyDBClient) CreateObligationValue(ctx context.Context, r *obligation
return nil, db.WrapIfKnownInvalidQueryErr(err)
}
+ // Create triggers for obligation value if provided
+ triggers := make([]*policy.ObligationTrigger, len(r.GetTriggers()))
+ if len(r.GetTriggers()) > 0 {
+ for i, trigger := range r.GetTriggers() {
+ createdTrigger, err := c.CreateObligationTrigger(ctx, &obligations.AddObligationTriggerRequest{
+ ObligationValue: &common.IdFqnIdentifier{Id: row.ID},
+ Action: trigger.GetAction(),
+ AttributeValue: trigger.GetAttributeValue(),
+ })
+ if err != nil {
+ return nil, err
+ }
+ triggers[i] = createdTrigger
+ }
+ }
+
namespace := &policy.Namespace{}
if err := unmarshalNamespace(row.Namespace, namespace); err != nil {
return nil, fmt.Errorf("failed to unmarshal obligation namespace: %w", err)
@@ -347,6 +364,7 @@ func (c PolicyDBClient) CreateObligationValue(ctx context.Context, r *obligation
Obligation: obl,
Value: value,
Metadata: metadata,
+ Triggers: triggers,
}, nil
}
@@ -478,11 +496,36 @@ func (c PolicyDBClient) UpdateObligationValue(ctx context.Context, r *obligation
metadata.CreatedAt = oblVal.GetMetadata().GetCreatedAt()
metadata.UpdatedAt = now
+ // Update triggers for obligation value if provided
+ triggers := oblVal.GetTriggers()
+ if len(r.GetTriggers()) > 0 {
+ // Delete all existing triggers for this obligation value
+ _, err := c.queries.deleteAllObligationTriggersForValue(ctx, id)
+ if err != nil {
+ return nil, db.WrapIfKnownInvalidQueryErr(err)
+ }
+
+ // Create new triggers
+ triggers = make([]*policy.ObligationTrigger, len(r.GetTriggers()))
+ for i, trigger := range r.GetTriggers() {
+ createdTrigger, err := c.CreateObligationTrigger(ctx, &obligations.AddObligationTriggerRequest{
+ ObligationValue: &common.IdFqnIdentifier{Id: id},
+ Action: trigger.GetAction(),
+ AttributeValue: trigger.GetAttributeValue(),
+ })
+ if err != nil {
+ return nil, err
+ }
+ triggers[i] = createdTrigger
+ }
+ }
+
return &policy.ObligationValue{
Id: id,
Value: value,
Metadata: metadata,
Obligation: oblVal.GetObligation(),
+ Triggers: triggers,
}, nil
}
@@ -549,7 +592,11 @@ func (c PolicyDBClient) CreateObligationTrigger(ctx context.Context, r *obligati
}
row, err := c.queries.createObligationTrigger(ctx, params)
if err != nil {
- return nil, db.WrapIfKnownInvalidQueryErr(err)
+ wrappedErr := db.WrapIfKnownInvalidQueryErr(err)
+ if errors.Is(wrappedErr, db.ErrNotNullViolation) {
+ return nil, errors.Join(db.ErrInvalidOblTriParam, wrappedErr)
+ }
+ return nil, wrappedErr
}
metadata := &common.Metadata{}
diff --git a/service/policy/db/obligations.sql.go b/service/policy/db/obligations.sql.go
index 3e0c9ac120..e8ea326a8b 100644
--- a/service/policy/db/obligations.sql.go
+++ b/service/policy/db/obligations.sql.go
@@ -452,6 +452,23 @@ func (q *Queries) createObligationValue(ctx context.Context, arg createObligatio
return i, err
}
+const deleteAllObligationTriggersForValue = `-- name: deleteAllObligationTriggersForValue :execrows
+DELETE FROM obligation_triggers
+WHERE obligation_value_id = $1
+`
+
+// deleteAllObligationTriggersForValue
+//
+// DELETE FROM obligation_triggers
+// WHERE obligation_value_id = $1
+func (q *Queries) deleteAllObligationTriggersForValue(ctx context.Context, obligationValueID string) (int64, error) {
+ result, err := q.db.Exec(ctx, deleteAllObligationTriggersForValue, obligationValueID)
+ if err != nil {
+ return 0, err
+ }
+ return result.RowsAffected(), nil
+}
+
const deleteObligation = `-- name: deleteObligation :one
DELETE FROM obligation_definitions
WHERE id IN (
diff --git a/service/policy/db/queries/obligations.sql b/service/policy/db/queries/obligations.sql
index 61103403a0..2b8886f763 100644
--- a/service/policy/db/queries/obligations.sql
+++ b/service/policy/db/queries/obligations.sql
@@ -390,6 +390,11 @@ JOIN actions a ON i.action_id = a.id
JOIN attribute_values av ON i.attribute_value_id = av.id
LEFT JOIN attribute_fqns av_fqns ON av_fqns.value_id = av.id;
+-- name: deleteAllObligationTriggersForValue :execrows
+DELETE FROM obligation_triggers
+WHERE obligation_value_id = $1;
+
+
-- name: deleteObligationTrigger :one
DELETE FROM obligation_triggers
WHERE id = $1
diff --git a/service/policy/obligations/obligations.proto b/service/policy/obligations/obligations.proto
index c661e9ba81..1d1cf7416e 100644
--- a/service/policy/obligations/obligations.proto
+++ b/service/policy/obligations/obligations.proto
@@ -20,6 +20,13 @@ message GetObligationRequest {
}
}
+message ValueTriggerRequest {
+ // Required. The ID of the action that will trigger this obligation value policy decisioning.
+ common.IdNameIdentifier action = 1 [(buf.validate.field).required = true];
+ // Required. The attribute value ID that will trigger this obligation value policy decisioning.
+ common.IdFqnIdentifier attribute_value = 2 [(buf.validate.field).required = true];
+}
+
message GetObligationResponse {
policy.Obligation obligation = 1;
}
@@ -122,6 +129,10 @@ message CreateObligationValueRequest {
}
string value = 3;
+ // Optional
+ // Combination of action and attribute_value that will trigger this obligation value policy decisioning.
+ repeated ValueTriggerRequest triggers = 4;
+
// Optional
// Common metadata
common.MetadataMutable metadata = 100;
@@ -137,6 +148,10 @@ message UpdateObligationValueRequest {
// Optional
string value = 2;
+
+ // Optional
+ // Obligation Triggers provided here will replace all existing records in the database.
+ repeated ValueTriggerRequest triggers = 3;
common.MetadataMutable metadata = 100;
common.MetadataUpdateEnum metadata_update_behavior = 101;
}
diff --git a/service/policy/obligations/obligations_test.go b/service/policy/obligations/obligations_test.go
index 8fee37b38e..a3b511da80 100644
--- a/service/policy/obligations/obligations_test.go
+++ b/service/policy/obligations/obligations_test.go
@@ -12,6 +12,7 @@ import (
const (
invalidUUID = "invalid-uuid"
+ validURI = "https://example.com/attr/value/1"
invalidName = "&hello"
)
@@ -231,3 +232,271 @@ func Test_RemoveObligationTrigger_Request(t *testing.T) {
})
}
}
+
+func Test_CreateObligationValue_Request(t *testing.T) {
+ validUUID := uuid.NewString()
+ testCases := []struct {
+ name string
+ req *obligations.CreateObligationValueRequest
+ expectError bool
+ errorMessage string
+ }{
+ {
+ name: "valid with no triggers",
+ req: &obligations.CreateObligationValueRequest{
+ ObligationIdentifier: &obligations.CreateObligationValueRequest_Id{Id: validUUID},
+ Value: "value",
+ },
+ expectError: false,
+ },
+ {
+ name: "valid with fqn and no triggers",
+ req: &obligations.CreateObligationValueRequest{
+ ObligationIdentifier: &obligations.CreateObligationValueRequest_Fqn{Fqn: "f.q.n"},
+ Value: "value",
+ },
+ expectError: false,
+ },
+ {
+ name: "valid with one trigger and ids",
+ req: &obligations.CreateObligationValueRequest{
+ ObligationIdentifier: &obligations.CreateObligationValueRequest_Id{Id: validUUID},
+ Value: "value",
+ Triggers: []*obligations.ValueTriggerRequest{
+ {
+ Action: &common.IdNameIdentifier{Id: validUUID},
+ AttributeValue: &common.IdFqnIdentifier{Id: validUUID},
+ },
+ },
+ },
+ expectError: false,
+ },
+ {
+ name: "valid with one trigger and fqns/names",
+ req: &obligations.CreateObligationValueRequest{
+ ObligationIdentifier: &obligations.CreateObligationValueRequest_Id{Id: validUUID},
+ Value: "value",
+ Triggers: []*obligations.ValueTriggerRequest{
+ {
+ Action: &common.IdNameIdentifier{Name: validUUID},
+ AttributeValue: &common.IdFqnIdentifier{Fqn: validURI},
+ },
+ },
+ },
+ expectError: false,
+ },
+ {
+ name: "valid with multiple triggers",
+ req: &obligations.CreateObligationValueRequest{
+ ObligationIdentifier: &obligations.CreateObligationValueRequest_Id{Id: validUUID},
+ Value: "value",
+ Triggers: []*obligations.ValueTriggerRequest{
+ {
+ Action: &common.IdNameIdentifier{Id: validUUID},
+ AttributeValue: &common.IdFqnIdentifier{Id: validUUID},
+ },
+ {
+ Action: &common.IdNameIdentifier{Id: validUUID},
+ AttributeValue: &common.IdFqnIdentifier{Id: validUUID},
+ },
+ },
+ },
+ expectError: false,
+ },
+ {
+ name: "invalid trigger with invalid action_id",
+ req: &obligations.CreateObligationValueRequest{
+ ObligationIdentifier: &obligations.CreateObligationValueRequest_Id{Id: validUUID},
+ Value: "value",
+ Triggers: []*obligations.ValueTriggerRequest{
+ {
+ Action: &common.IdNameIdentifier{Id: invalidUUID},
+ AttributeValue: &common.IdFqnIdentifier{Id: validUUID},
+ },
+ },
+ },
+ expectError: true,
+ errorMessage: "action.id",
+ },
+ {
+ name: "invalid trigger with invalid attribute_value_id",
+ req: &obligations.CreateObligationValueRequest{
+ ObligationIdentifier: &obligations.CreateObligationValueRequest_Id{Id: validUUID},
+ Value: "value",
+ Triggers: []*obligations.ValueTriggerRequest{
+ {
+ Action: &common.IdNameIdentifier{Id: validUUID},
+ AttributeValue: &common.IdFqnIdentifier{Id: invalidUUID},
+ },
+ },
+ },
+ expectError: true,
+ errorMessage: "attribute_value.id",
+ },
+ {
+ name: "invalid trigger with missing action_id",
+ req: &obligations.CreateObligationValueRequest{
+ ObligationIdentifier: &obligations.CreateObligationValueRequest_Id{Id: validUUID},
+ Value: "value",
+ Triggers: []*obligations.ValueTriggerRequest{
+ {
+ AttributeValue: &common.IdFqnIdentifier{Id: validUUID},
+ },
+ },
+ },
+ expectError: true,
+ errorMessage: "action",
+ },
+ {
+ name: "invalid trigger with missing attribute_value_id",
+ req: &obligations.CreateObligationValueRequest{
+ ObligationIdentifier: &obligations.CreateObligationValueRequest_Id{Id: validUUID},
+ Value: "value",
+ Triggers: []*obligations.ValueTriggerRequest{
+ {
+ Action: &common.IdNameIdentifier{Id: validUUID},
+ },
+ },
+ },
+ expectError: true,
+ errorMessage: "attribute_value",
+ },
+ }
+
+ v := getValidator()
+
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+ err := v.Validate(tc.req)
+ if tc.expectError {
+ require.Error(t, err)
+ require.Contains(t, err.Error(), tc.errorMessage)
+ } else {
+ require.NoError(t, err)
+ }
+ })
+ }
+}
+
+func Test_UpdateObligationValue_Request(t *testing.T) {
+ validUUID := uuid.NewString()
+ testCases := []struct {
+ name string
+ req *obligations.UpdateObligationValueRequest
+ expectError bool
+ errorMessage string
+ }{
+ {
+ name: "valid with no triggers",
+ req: &obligations.UpdateObligationValueRequest{
+ Id: validUUID,
+ Value: "value",
+ },
+ expectError: false,
+ },
+ {
+ name: "valid with one trigger",
+ req: &obligations.UpdateObligationValueRequest{
+ Id: validUUID,
+ Value: "value",
+ Triggers: []*obligations.ValueTriggerRequest{
+ {
+ Action: &common.IdNameIdentifier{Id: validUUID},
+ AttributeValue: &common.IdFqnIdentifier{Fqn: validURI},
+ },
+ },
+ },
+ expectError: false,
+ },
+ {
+ name: "valid with multiple triggers",
+ req: &obligations.UpdateObligationValueRequest{
+ Id: validUUID,
+ Value: "value",
+ Triggers: []*obligations.ValueTriggerRequest{
+ {
+ Action: &common.IdNameIdentifier{Id: validUUID},
+ AttributeValue: &common.IdFqnIdentifier{Id: validUUID},
+ },
+ {
+ Action: &common.IdNameIdentifier{Id: validUUID},
+ AttributeValue: &common.IdFqnIdentifier{Id: validUUID},
+ },
+ },
+ },
+ expectError: false,
+ },
+ {
+ name: "invalid trigger with invalid action_id",
+ req: &obligations.UpdateObligationValueRequest{
+ Id: validUUID,
+ Value: "value",
+ Triggers: []*obligations.ValueTriggerRequest{
+ {
+ Action: &common.IdNameIdentifier{Id: invalidUUID},
+ AttributeValue: &common.IdFqnIdentifier{Id: validUUID},
+ },
+ },
+ },
+ expectError: true,
+ errorMessage: "action.id",
+ },
+ {
+ name: "invalid trigger with invalid attribute_value_id",
+ req: &obligations.UpdateObligationValueRequest{
+ Id: validUUID,
+ Value: "value",
+ Triggers: []*obligations.ValueTriggerRequest{
+ {
+ Action: &common.IdNameIdentifier{Id: validUUID},
+ AttributeValue: &common.IdFqnIdentifier{Id: invalidUUID},
+ },
+ },
+ },
+ expectError: true,
+ errorMessage: "attribute_value.id",
+ },
+ {
+ name: "invalid trigger with missing action_id",
+ req: &obligations.UpdateObligationValueRequest{
+ Id: validUUID,
+ Value: "value",
+ Triggers: []*obligations.ValueTriggerRequest{
+ {
+ AttributeValue: &common.IdFqnIdentifier{Id: validUUID},
+ },
+ },
+ },
+ expectError: true,
+ errorMessage: "action",
+ },
+ {
+ name: "invalid trigger with missing attribute_value_id",
+ req: &obligations.UpdateObligationValueRequest{
+ Id: validUUID,
+ Value: "value",
+ Triggers: []*obligations.ValueTriggerRequest{
+ {
+ Action: &common.IdNameIdentifier{Id: validUUID},
+ },
+ },
+ },
+ expectError: true,
+ errorMessage: "attribute_value",
+ },
+ }
+
+ v := getValidator()
+
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+ err := v.Validate(tc.req)
+ if tc.expectError {
+ require.Error(t, err)
+ require.Contains(t, err.Error(), tc.errorMessage)
+ } else {
+ require.NoError(t, err)
+ }
+ })
+ }
+}