diff --git a/internal/db/attribute_values.go b/internal/db/attribute_values.go new file mode 100644 index 0000000000..156266e223 --- /dev/null +++ b/internal/db/attribute_values.go @@ -0,0 +1,225 @@ +package db + +import ( + "context" + + sq "github.com/Masterminds/squirrel" + "github.com/jackc/pgx/v5" + "github.com/opentdf/opentdf-v2-poc/sdk/attributes" + "github.com/opentdf/opentdf-v2-poc/sdk/common" + "google.golang.org/protobuf/encoding/protojson" +) + +var AttributeValueTable = tableName(TableAttributeValues) + +func attributeValueHydrateItem(row pgx.Row) (*attributes.Value, error) { + var ( + id string + value string + members []string + metadataJson []byte + ) + if err := row.Scan(&id, &value, &members, &metadataJson); err != nil { + return nil, err + } + + m := &common.Metadata{} + if metadataJson != nil { + if err := protojson.Unmarshal(metadataJson, m); err != nil { + return nil, err + } + } + + v := &attributes.Value{ + Id: id, + Value: value, + Members: members, + Metadata: m, + } + return v, nil +} + +/// +/// CRUD +/// + +func createAttributeValueSql( + attribute_id string, + value string, + members []string, + metadata []byte) (string, []interface{}, error) { + return newStatementBuilder(). + Insert(AttributeValueTable). + Columns( + tableField(AttributeValueTable, "attribute_id"), + tableField(AttributeValueTable, "value"), + tableField(AttributeValueTable, "members"), + tableField(AttributeValueTable, "metadata"), + ). + Values( + attribute_id, + value, + members, + metadata, + ). + Suffix("RETURNING id"). + ToSql() +} +func (c Client) CreateAttributeValue(ctx context.Context, v *attributes.ValueCreate) (*attributes.Value, error) { + metadataJson, metadata, err := marshalCreateMetadata(v.Metadata) + if err != nil { + return nil, err + } + + sql, args, err := createAttributeValueSql( + v.AttributeId, + v.Value, + v.Members, + metadataJson, + ) + if err != nil { + return nil, err + } + + var id string + if r, err := c.queryRow(ctx, sql, args, err); err != nil { + return nil, err + } else if err := r.Scan(&id); err != nil { + return nil, err + } + + rV := &attributes.Value{ + Id: id, + Value: v.Value, + Members: v.Members, + Metadata: metadata, + } + return rV, nil +} + +func getAttributeValueSql(id string) (string, []interface{}, error) { + return newStatementBuilder(). + Select( + tableField(AttributeValueTable, "id"), + tableField(AttributeValueTable, "value"), + tableField(AttributeValueTable, "members"), + tableField(AttributeValueTable, "metadata"), + ). + From(AttributeValueTable). + Where(sq.Eq{tableField(AttributeValueTable, "id"): id}). + ToSql() +} +func (c Client) GetAttributeValue(ctx context.Context, id string) (*attributes.Value, error) { + sql, args, err := getAttributeValueSql(id) + row, err := c.queryRow(ctx, sql, args, err) + if err != nil { + return nil, err + } + + v, err := attributeValueHydrateItem(row) + if err != nil { + return nil, err + } + + return v, nil +} + +func listAttributeValuesSql(attribute_id string) (string, []interface{}, error) { + return newStatementBuilder(). + Select( + tableField(AttributeValueTable, "id"), + tableField(AttributeValueTable, "value"), + tableField(AttributeValueTable, "members"), + tableField(AttributeValueTable, "metadata"), + ). + From(AttributeValueTable). + Where(sq.Eq{tableField(AttributeValueTable, "attribute_id"): attribute_id}). + ToSql() +} +func (c Client) ListAttributeValues(ctx context.Context, attribute_id string) ([]*attributes.Value, error) { + sql, args, err := listAttributeValuesSql(attribute_id) + rows, err := c.query(ctx, sql, args, err) + if err != nil { + return nil, err + } + defer rows.Close() + + list := make([]*attributes.Value, 0) + for rows.Next() { + v, err := attributeValueHydrateItem(rows) + if err != nil { + return nil, err + } + list = append(list, v) + } + + return list, nil +} + +func updateAttributeValueSql( + id string, + value string, + members []string, + metadata []byte) (string, []interface{}, error) { + sb := newStatementBuilder(). + Update(AttributeValueTable) + + if value != "" { + sb = sb.Set(tableField(AttributeValueTable, "value"), value) + } + if members != nil { + sb = sb.Set(tableField(AttributeValueTable, "members"), members) + } + sb.Set(tableField(AttributeValueTable, "metadata"), metadata) + + return sb. + Where(sq.Eq{tableField(AttributeValueTable, "id"): id}). + ToSql() +} +func (c Client) UpdateAttributeValue(ctx context.Context, id string, v *attributes.ValueUpdate) (*attributes.Value, error) { + prev, err := c.GetAttributeValue(ctx, id) + if err != nil { + return nil, err + } + + metadataJson, _, err := marshalUpdateMetadata(prev.Metadata, v.Metadata) + if err != nil { + return nil, err + } + + sql, args, err := updateAttributeValueSql( + id, + v.Value, + v.Members, + metadataJson, + ) + if err != nil { + return nil, err + } + + if err := c.exec(ctx, sql, args, err); err != nil { + return nil, err + } + + return prev, nil +} + +func deleteAttributeValueSql(id string) (string, []interface{}, error) { + return newStatementBuilder(). + Delete(AttributeValueTable). + Where(sq.Eq{tableField(AttributeValueTable, "id"): id}). + ToSql() +} +func (c Client) DeleteAttributeValue(ctx context.Context, id string) (*attributes.Value, error) { + prev, err := c.GetAttributeValue(ctx, id) + if err != nil { + return nil, err + } + + sql, args, err := deleteAttributeValueSql(id) + if err := c.exec(ctx, sql, args, err); err != nil { + return nil, err + } + + return prev, nil +} diff --git a/internal/db/attributes.go b/internal/db/attributes.go index ab72a621ed..fe0bd8c47e 100644 --- a/internal/db/attributes.go +++ b/internal/db/attributes.go @@ -17,7 +17,6 @@ import ( ) var AttributeTable = tableName(TableAttributes) -var AttributeValueTable = tableName(TableAttributeValues) var AttributeRuleTypeEnumPrefix = "ATTRIBUTE_RULE_TYPE_ENUM_" func attributesRuleTypeEnumTransformIn(value string) string { @@ -256,11 +255,17 @@ func (c Client) CreateAttribute(ctx context.Context, attr *attributes.AttributeC } func updateAttributeSql(id string, name string, rule string, metadata []byte) (string, []interface{}, error) { - return newStatementBuilder(). - Update(AttributeTable). - Set("name", name). - Set("rule", rule). - Set("metadata", metadata). + sb := newStatementBuilder(). + Update(AttributeTable) + + if name != "" { + sb = sb.Set("name", name) + } + if rule != "" { + sb = sb.Set("rule", rule) + } + + return sb.Set("metadata", metadata). Where(sq.Eq{"id": id}). ToSql() } diff --git a/proto/attributes/attributes.proto b/proto/attributes/attributes.proto index 9da4b0efa4..90d33c00e4 100644 --- a/proto/attributes/attributes.proto +++ b/proto/attributes/attributes.proto @@ -53,7 +53,7 @@ message AttributeCreateUpdate { ]; // optional - repeated ValueCreateUpdate values = 5; + repeated ValueCreate values = 5; } message Value { @@ -62,7 +62,7 @@ message Value { common.Metadata metadata = 2; - string attribute_definition_id = 3 [(buf.validate.field).required = true]; + string attribute_id = 3 [(buf.validate.field).required = true]; string value = 4; @@ -70,8 +70,18 @@ message Value { repeated string members = 5; } -// Definition of a single attribute value -message ValueCreateUpdate { +message ValueCreate { + common.MetadataMutable metadata = 1; + + string attribute_id = 2 [(buf.validate.field).required = true]; + + string value = 3; + + // list of attribute values that this value is related to (attribute group) + repeated string members = 4; +} + +message ValueUpdate { common.MetadataMutable metadata = 1; string value = 2; @@ -85,12 +95,12 @@ message ValueCreateUpdate { */ message DefinitionKeyAccessServerGrant { - string attribute_definition_id = 1; + string attribute_id = 1; string key_access_server_id = 2; } message ValueKeyAccessServerGrant { - string attribute_value_id = 1; + string value_id = 1; string key_access_server_id = 2; } @@ -149,7 +159,7 @@ message ListValuesResponse { message CreateValueRequest { string attribute_id = 1 [(buf.validate.field).required = true]; - ValueCreateUpdate value = 2 [(buf.validate.field).required = true]; + ValueCreate value = 2 [(buf.validate.field).required = true]; } message CreateValueResponse { Value value = 1; @@ -157,7 +167,7 @@ message CreateValueResponse { message UpdateValueRequest { string id = 1 [(buf.validate.field).required = true]; - ValueCreateUpdate value = 2 [(buf.validate.field).required = true]; + ValueUpdate value = 2 [(buf.validate.field).required = true]; } message UpdateValueResponse { Value value = 1; @@ -166,7 +176,9 @@ message UpdateValueResponse { message DeleteValueRequest { string id = 1 [(buf.validate.field).required = true]; } -message DeleteValueResponse {} +message DeleteValueResponse { + Value value = 1; +} /// /// Attribute Service diff --git a/sdk/attributes/attributes.pb.go b/sdk/attributes/attributes.pb.go index 5014d62bfb..87160f04a6 100644 --- a/sdk/attributes/attributes.pb.go +++ b/sdk/attributes/attributes.pb.go @@ -173,7 +173,7 @@ type AttributeCreateUpdate struct { // attribute rule enum Rule AttributeRuleTypeEnum `protobuf:"varint,4,opt,name=rule,proto3,enum=attributes.AttributeRuleTypeEnum" json:"rule,omitempty"` // optional - Values []*ValueCreateUpdate `protobuf:"bytes,5,rep,name=values,proto3" json:"values,omitempty"` + Values []*ValueCreate `protobuf:"bytes,5,rep,name=values,proto3" json:"values,omitempty"` } func (x *AttributeCreateUpdate) Reset() { @@ -236,7 +236,7 @@ func (x *AttributeCreateUpdate) GetRule() AttributeRuleTypeEnum { return AttributeRuleTypeEnum_ATTRIBUTE_RULE_TYPE_ENUM_UNSPECIFIED } -func (x *AttributeCreateUpdate) GetValues() []*ValueCreateUpdate { +func (x *AttributeCreateUpdate) GetValues() []*ValueCreate { if x != nil { return x.Values } @@ -249,10 +249,10 @@ type Value struct { unknownFields protoimpl.UnknownFields // generated uuid in database - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Metadata *common.Metadata `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"` - AttributeDefinitionId string `protobuf:"bytes,3,opt,name=attribute_definition_id,json=attributeDefinitionId,proto3" json:"attribute_definition_id,omitempty"` - Value string `protobuf:"bytes,4,opt,name=value,proto3" json:"value,omitempty"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Metadata *common.Metadata `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"` + AttributeId string `protobuf:"bytes,3,opt,name=attribute_id,json=attributeId,proto3" json:"attribute_id,omitempty"` + Value string `protobuf:"bytes,4,opt,name=value,proto3" json:"value,omitempty"` // list of attribute values that this value is related to (attribute group) Members []string `protobuf:"bytes,5,rep,name=members,proto3" json:"members,omitempty"` } @@ -303,9 +303,9 @@ func (x *Value) GetMetadata() *common.Metadata { return nil } -func (x *Value) GetAttributeDefinitionId() string { +func (x *Value) GetAttributeId() string { if x != nil { - return x.AttributeDefinitionId + return x.AttributeId } return "" } @@ -324,20 +324,20 @@ func (x *Value) GetMembers() []string { return nil } -// Definition of a single attribute value -type ValueCreateUpdate struct { +type ValueCreate struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Metadata *common.MetadataMutable `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` - Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + Metadata *common.MetadataMutable `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` + AttributeId string `protobuf:"bytes,2,opt,name=attribute_id,json=attributeId,proto3" json:"attribute_id,omitempty"` + Value string `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` // list of attribute values that this value is related to (attribute group) - Members []string `protobuf:"bytes,3,rep,name=members,proto3" json:"members,omitempty"` + Members []string `protobuf:"bytes,4,rep,name=members,proto3" json:"members,omitempty"` } -func (x *ValueCreateUpdate) Reset() { - *x = ValueCreateUpdate{} +func (x *ValueCreate) Reset() { + *x = ValueCreate{} if protoimpl.UnsafeEnabled { mi := &file_attributes_attributes_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -345,13 +345,13 @@ func (x *ValueCreateUpdate) Reset() { } } -func (x *ValueCreateUpdate) String() string { +func (x *ValueCreate) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ValueCreateUpdate) ProtoMessage() {} +func (*ValueCreate) ProtoMessage() {} -func (x *ValueCreateUpdate) ProtoReflect() protoreflect.Message { +func (x *ValueCreate) ProtoReflect() protoreflect.Message { mi := &file_attributes_attributes_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -363,26 +363,97 @@ func (x *ValueCreateUpdate) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ValueCreateUpdate.ProtoReflect.Descriptor instead. -func (*ValueCreateUpdate) Descriptor() ([]byte, []int) { +// Deprecated: Use ValueCreate.ProtoReflect.Descriptor instead. +func (*ValueCreate) Descriptor() ([]byte, []int) { return file_attributes_attributes_proto_rawDescGZIP(), []int{3} } -func (x *ValueCreateUpdate) GetMetadata() *common.MetadataMutable { +func (x *ValueCreate) GetMetadata() *common.MetadataMutable { + if x != nil { + return x.Metadata + } + return nil +} + +func (x *ValueCreate) GetAttributeId() string { + if x != nil { + return x.AttributeId + } + return "" +} + +func (x *ValueCreate) GetValue() string { + if x != nil { + return x.Value + } + return "" +} + +func (x *ValueCreate) GetMembers() []string { + if x != nil { + return x.Members + } + return nil +} + +type ValueUpdate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Metadata *common.MetadataMutable `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` + Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + // list of attribute values that this value is related to (attribute group) + Members []string `protobuf:"bytes,3,rep,name=members,proto3" json:"members,omitempty"` +} + +func (x *ValueUpdate) Reset() { + *x = ValueUpdate{} + if protoimpl.UnsafeEnabled { + mi := &file_attributes_attributes_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ValueUpdate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValueUpdate) ProtoMessage() {} + +func (x *ValueUpdate) ProtoReflect() protoreflect.Message { + mi := &file_attributes_attributes_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValueUpdate.ProtoReflect.Descriptor instead. +func (*ValueUpdate) Descriptor() ([]byte, []int) { + return file_attributes_attributes_proto_rawDescGZIP(), []int{4} +} + +func (x *ValueUpdate) GetMetadata() *common.MetadataMutable { if x != nil { return x.Metadata } return nil } -func (x *ValueCreateUpdate) GetValue() string { +func (x *ValueUpdate) GetValue() string { if x != nil { return x.Value } return "" } -func (x *ValueCreateUpdate) GetMembers() []string { +func (x *ValueUpdate) GetMembers() []string { if x != nil { return x.Members } @@ -394,14 +465,14 @@ type DefinitionKeyAccessServerGrant struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - AttributeDefinitionId string `protobuf:"bytes,1,opt,name=attribute_definition_id,json=attributeDefinitionId,proto3" json:"attribute_definition_id,omitempty"` - KeyAccessServerId string `protobuf:"bytes,2,opt,name=key_access_server_id,json=keyAccessServerId,proto3" json:"key_access_server_id,omitempty"` + AttributeId string `protobuf:"bytes,1,opt,name=attribute_id,json=attributeId,proto3" json:"attribute_id,omitempty"` + KeyAccessServerId string `protobuf:"bytes,2,opt,name=key_access_server_id,json=keyAccessServerId,proto3" json:"key_access_server_id,omitempty"` } func (x *DefinitionKeyAccessServerGrant) Reset() { *x = DefinitionKeyAccessServerGrant{} if protoimpl.UnsafeEnabled { - mi := &file_attributes_attributes_proto_msgTypes[4] + mi := &file_attributes_attributes_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -414,7 +485,7 @@ func (x *DefinitionKeyAccessServerGrant) String() string { func (*DefinitionKeyAccessServerGrant) ProtoMessage() {} func (x *DefinitionKeyAccessServerGrant) ProtoReflect() protoreflect.Message { - mi := &file_attributes_attributes_proto_msgTypes[4] + mi := &file_attributes_attributes_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -427,12 +498,12 @@ func (x *DefinitionKeyAccessServerGrant) ProtoReflect() protoreflect.Message { // Deprecated: Use DefinitionKeyAccessServerGrant.ProtoReflect.Descriptor instead. func (*DefinitionKeyAccessServerGrant) Descriptor() ([]byte, []int) { - return file_attributes_attributes_proto_rawDescGZIP(), []int{4} + return file_attributes_attributes_proto_rawDescGZIP(), []int{5} } -func (x *DefinitionKeyAccessServerGrant) GetAttributeDefinitionId() string { +func (x *DefinitionKeyAccessServerGrant) GetAttributeId() string { if x != nil { - return x.AttributeDefinitionId + return x.AttributeId } return "" } @@ -449,14 +520,14 @@ type ValueKeyAccessServerGrant struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - AttributeValueId string `protobuf:"bytes,1,opt,name=attribute_value_id,json=attributeValueId,proto3" json:"attribute_value_id,omitempty"` + ValueId string `protobuf:"bytes,1,opt,name=value_id,json=valueId,proto3" json:"value_id,omitempty"` KeyAccessServerId string `protobuf:"bytes,2,opt,name=key_access_server_id,json=keyAccessServerId,proto3" json:"key_access_server_id,omitempty"` } func (x *ValueKeyAccessServerGrant) Reset() { *x = ValueKeyAccessServerGrant{} if protoimpl.UnsafeEnabled { - mi := &file_attributes_attributes_proto_msgTypes[5] + mi := &file_attributes_attributes_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -469,7 +540,7 @@ func (x *ValueKeyAccessServerGrant) String() string { func (*ValueKeyAccessServerGrant) ProtoMessage() {} func (x *ValueKeyAccessServerGrant) ProtoReflect() protoreflect.Message { - mi := &file_attributes_attributes_proto_msgTypes[5] + mi := &file_attributes_attributes_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -482,12 +553,12 @@ func (x *ValueKeyAccessServerGrant) ProtoReflect() protoreflect.Message { // Deprecated: Use ValueKeyAccessServerGrant.ProtoReflect.Descriptor instead. func (*ValueKeyAccessServerGrant) Descriptor() ([]byte, []int) { - return file_attributes_attributes_proto_rawDescGZIP(), []int{5} + return file_attributes_attributes_proto_rawDescGZIP(), []int{6} } -func (x *ValueKeyAccessServerGrant) GetAttributeValueId() string { +func (x *ValueKeyAccessServerGrant) GetValueId() string { if x != nil { - return x.AttributeValueId + return x.ValueId } return "" } @@ -508,7 +579,7 @@ type ListAttributesRequest struct { func (x *ListAttributesRequest) Reset() { *x = ListAttributesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_attributes_attributes_proto_msgTypes[6] + mi := &file_attributes_attributes_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -521,7 +592,7 @@ func (x *ListAttributesRequest) String() string { func (*ListAttributesRequest) ProtoMessage() {} func (x *ListAttributesRequest) ProtoReflect() protoreflect.Message { - mi := &file_attributes_attributes_proto_msgTypes[6] + mi := &file_attributes_attributes_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -534,7 +605,7 @@ func (x *ListAttributesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListAttributesRequest.ProtoReflect.Descriptor instead. func (*ListAttributesRequest) Descriptor() ([]byte, []int) { - return file_attributes_attributes_proto_rawDescGZIP(), []int{6} + return file_attributes_attributes_proto_rawDescGZIP(), []int{7} } type ListAttributesResponse struct { @@ -548,7 +619,7 @@ type ListAttributesResponse struct { func (x *ListAttributesResponse) Reset() { *x = ListAttributesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_attributes_attributes_proto_msgTypes[7] + mi := &file_attributes_attributes_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -561,7 +632,7 @@ func (x *ListAttributesResponse) String() string { func (*ListAttributesResponse) ProtoMessage() {} func (x *ListAttributesResponse) ProtoReflect() protoreflect.Message { - mi := &file_attributes_attributes_proto_msgTypes[7] + mi := &file_attributes_attributes_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -574,7 +645,7 @@ func (x *ListAttributesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListAttributesResponse.ProtoReflect.Descriptor instead. func (*ListAttributesResponse) Descriptor() ([]byte, []int) { - return file_attributes_attributes_proto_rawDescGZIP(), []int{7} + return file_attributes_attributes_proto_rawDescGZIP(), []int{8} } func (x *ListAttributesResponse) GetAttributes() []*Attribute { @@ -595,7 +666,7 @@ type GetAttributeRequest struct { func (x *GetAttributeRequest) Reset() { *x = GetAttributeRequest{} if protoimpl.UnsafeEnabled { - mi := &file_attributes_attributes_proto_msgTypes[8] + mi := &file_attributes_attributes_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -608,7 +679,7 @@ func (x *GetAttributeRequest) String() string { func (*GetAttributeRequest) ProtoMessage() {} func (x *GetAttributeRequest) ProtoReflect() protoreflect.Message { - mi := &file_attributes_attributes_proto_msgTypes[8] + mi := &file_attributes_attributes_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -621,7 +692,7 @@ func (x *GetAttributeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAttributeRequest.ProtoReflect.Descriptor instead. func (*GetAttributeRequest) Descriptor() ([]byte, []int) { - return file_attributes_attributes_proto_rawDescGZIP(), []int{8} + return file_attributes_attributes_proto_rawDescGZIP(), []int{9} } func (x *GetAttributeRequest) GetId() string { @@ -642,7 +713,7 @@ type GetAttributeResponse struct { func (x *GetAttributeResponse) Reset() { *x = GetAttributeResponse{} if protoimpl.UnsafeEnabled { - mi := &file_attributes_attributes_proto_msgTypes[9] + mi := &file_attributes_attributes_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -655,7 +726,7 @@ func (x *GetAttributeResponse) String() string { func (*GetAttributeResponse) ProtoMessage() {} func (x *GetAttributeResponse) ProtoReflect() protoreflect.Message { - mi := &file_attributes_attributes_proto_msgTypes[9] + mi := &file_attributes_attributes_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -668,7 +739,7 @@ func (x *GetAttributeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAttributeResponse.ProtoReflect.Descriptor instead. func (*GetAttributeResponse) Descriptor() ([]byte, []int) { - return file_attributes_attributes_proto_rawDescGZIP(), []int{9} + return file_attributes_attributes_proto_rawDescGZIP(), []int{10} } func (x *GetAttributeResponse) GetAttribute() *Attribute { @@ -689,7 +760,7 @@ type CreateAttributeRequest struct { func (x *CreateAttributeRequest) Reset() { *x = CreateAttributeRequest{} if protoimpl.UnsafeEnabled { - mi := &file_attributes_attributes_proto_msgTypes[10] + mi := &file_attributes_attributes_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -702,7 +773,7 @@ func (x *CreateAttributeRequest) String() string { func (*CreateAttributeRequest) ProtoMessage() {} func (x *CreateAttributeRequest) ProtoReflect() protoreflect.Message { - mi := &file_attributes_attributes_proto_msgTypes[10] + mi := &file_attributes_attributes_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -715,7 +786,7 @@ func (x *CreateAttributeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateAttributeRequest.ProtoReflect.Descriptor instead. func (*CreateAttributeRequest) Descriptor() ([]byte, []int) { - return file_attributes_attributes_proto_rawDescGZIP(), []int{10} + return file_attributes_attributes_proto_rawDescGZIP(), []int{11} } func (x *CreateAttributeRequest) GetAttribute() *AttributeCreateUpdate { @@ -736,7 +807,7 @@ type CreateAttributeResponse struct { func (x *CreateAttributeResponse) Reset() { *x = CreateAttributeResponse{} if protoimpl.UnsafeEnabled { - mi := &file_attributes_attributes_proto_msgTypes[11] + mi := &file_attributes_attributes_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -749,7 +820,7 @@ func (x *CreateAttributeResponse) String() string { func (*CreateAttributeResponse) ProtoMessage() {} func (x *CreateAttributeResponse) ProtoReflect() protoreflect.Message { - mi := &file_attributes_attributes_proto_msgTypes[11] + mi := &file_attributes_attributes_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -762,7 +833,7 @@ func (x *CreateAttributeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateAttributeResponse.ProtoReflect.Descriptor instead. func (*CreateAttributeResponse) Descriptor() ([]byte, []int) { - return file_attributes_attributes_proto_rawDescGZIP(), []int{11} + return file_attributes_attributes_proto_rawDescGZIP(), []int{12} } func (x *CreateAttributeResponse) GetAttribute() *Attribute { @@ -784,7 +855,7 @@ type UpdateAttributeRequest struct { func (x *UpdateAttributeRequest) Reset() { *x = UpdateAttributeRequest{} if protoimpl.UnsafeEnabled { - mi := &file_attributes_attributes_proto_msgTypes[12] + mi := &file_attributes_attributes_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -797,7 +868,7 @@ func (x *UpdateAttributeRequest) String() string { func (*UpdateAttributeRequest) ProtoMessage() {} func (x *UpdateAttributeRequest) ProtoReflect() protoreflect.Message { - mi := &file_attributes_attributes_proto_msgTypes[12] + mi := &file_attributes_attributes_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -810,7 +881,7 @@ func (x *UpdateAttributeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateAttributeRequest.ProtoReflect.Descriptor instead. func (*UpdateAttributeRequest) Descriptor() ([]byte, []int) { - return file_attributes_attributes_proto_rawDescGZIP(), []int{12} + return file_attributes_attributes_proto_rawDescGZIP(), []int{13} } func (x *UpdateAttributeRequest) GetId() string { @@ -838,7 +909,7 @@ type UpdateAttributeResponse struct { func (x *UpdateAttributeResponse) Reset() { *x = UpdateAttributeResponse{} if protoimpl.UnsafeEnabled { - mi := &file_attributes_attributes_proto_msgTypes[13] + mi := &file_attributes_attributes_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -851,7 +922,7 @@ func (x *UpdateAttributeResponse) String() string { func (*UpdateAttributeResponse) ProtoMessage() {} func (x *UpdateAttributeResponse) ProtoReflect() protoreflect.Message { - mi := &file_attributes_attributes_proto_msgTypes[13] + mi := &file_attributes_attributes_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -864,7 +935,7 @@ func (x *UpdateAttributeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateAttributeResponse.ProtoReflect.Descriptor instead. func (*UpdateAttributeResponse) Descriptor() ([]byte, []int) { - return file_attributes_attributes_proto_rawDescGZIP(), []int{13} + return file_attributes_attributes_proto_rawDescGZIP(), []int{14} } func (x *UpdateAttributeResponse) GetAttribute() *Attribute { @@ -885,7 +956,7 @@ type DeleteAttributeRequest struct { func (x *DeleteAttributeRequest) Reset() { *x = DeleteAttributeRequest{} if protoimpl.UnsafeEnabled { - mi := &file_attributes_attributes_proto_msgTypes[14] + mi := &file_attributes_attributes_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -898,7 +969,7 @@ func (x *DeleteAttributeRequest) String() string { func (*DeleteAttributeRequest) ProtoMessage() {} func (x *DeleteAttributeRequest) ProtoReflect() protoreflect.Message { - mi := &file_attributes_attributes_proto_msgTypes[14] + mi := &file_attributes_attributes_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -911,7 +982,7 @@ func (x *DeleteAttributeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteAttributeRequest.ProtoReflect.Descriptor instead. func (*DeleteAttributeRequest) Descriptor() ([]byte, []int) { - return file_attributes_attributes_proto_rawDescGZIP(), []int{14} + return file_attributes_attributes_proto_rawDescGZIP(), []int{15} } func (x *DeleteAttributeRequest) GetId() string { @@ -932,7 +1003,7 @@ type DeleteAttributeResponse struct { func (x *DeleteAttributeResponse) Reset() { *x = DeleteAttributeResponse{} if protoimpl.UnsafeEnabled { - mi := &file_attributes_attributes_proto_msgTypes[15] + mi := &file_attributes_attributes_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -945,7 +1016,7 @@ func (x *DeleteAttributeResponse) String() string { func (*DeleteAttributeResponse) ProtoMessage() {} func (x *DeleteAttributeResponse) ProtoReflect() protoreflect.Message { - mi := &file_attributes_attributes_proto_msgTypes[15] + mi := &file_attributes_attributes_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -958,7 +1029,7 @@ func (x *DeleteAttributeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteAttributeResponse.ProtoReflect.Descriptor instead. func (*DeleteAttributeResponse) Descriptor() ([]byte, []int) { - return file_attributes_attributes_proto_rawDescGZIP(), []int{15} + return file_attributes_attributes_proto_rawDescGZIP(), []int{16} } func (x *DeleteAttributeResponse) GetAttribute() *Attribute { @@ -982,7 +1053,7 @@ type GetValueRequest struct { func (x *GetValueRequest) Reset() { *x = GetValueRequest{} if protoimpl.UnsafeEnabled { - mi := &file_attributes_attributes_proto_msgTypes[16] + mi := &file_attributes_attributes_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -995,7 +1066,7 @@ func (x *GetValueRequest) String() string { func (*GetValueRequest) ProtoMessage() {} func (x *GetValueRequest) ProtoReflect() protoreflect.Message { - mi := &file_attributes_attributes_proto_msgTypes[16] + mi := &file_attributes_attributes_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1008,7 +1079,7 @@ func (x *GetValueRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetValueRequest.ProtoReflect.Descriptor instead. func (*GetValueRequest) Descriptor() ([]byte, []int) { - return file_attributes_attributes_proto_rawDescGZIP(), []int{16} + return file_attributes_attributes_proto_rawDescGZIP(), []int{17} } func (x *GetValueRequest) GetId() string { @@ -1029,7 +1100,7 @@ type GetValueResponse struct { func (x *GetValueResponse) Reset() { *x = GetValueResponse{} if protoimpl.UnsafeEnabled { - mi := &file_attributes_attributes_proto_msgTypes[17] + mi := &file_attributes_attributes_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1042,7 +1113,7 @@ func (x *GetValueResponse) String() string { func (*GetValueResponse) ProtoMessage() {} func (x *GetValueResponse) ProtoReflect() protoreflect.Message { - mi := &file_attributes_attributes_proto_msgTypes[17] + mi := &file_attributes_attributes_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1055,7 +1126,7 @@ func (x *GetValueResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetValueResponse.ProtoReflect.Descriptor instead. func (*GetValueResponse) Descriptor() ([]byte, []int) { - return file_attributes_attributes_proto_rawDescGZIP(), []int{17} + return file_attributes_attributes_proto_rawDescGZIP(), []int{18} } func (x *GetValueResponse) GetValue() *Value { @@ -1074,7 +1145,7 @@ type ListValuesRequest struct { func (x *ListValuesRequest) Reset() { *x = ListValuesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_attributes_attributes_proto_msgTypes[18] + mi := &file_attributes_attributes_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1087,7 +1158,7 @@ func (x *ListValuesRequest) String() string { func (*ListValuesRequest) ProtoMessage() {} func (x *ListValuesRequest) ProtoReflect() protoreflect.Message { - mi := &file_attributes_attributes_proto_msgTypes[18] + mi := &file_attributes_attributes_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1100,7 +1171,7 @@ func (x *ListValuesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListValuesRequest.ProtoReflect.Descriptor instead. func (*ListValuesRequest) Descriptor() ([]byte, []int) { - return file_attributes_attributes_proto_rawDescGZIP(), []int{18} + return file_attributes_attributes_proto_rawDescGZIP(), []int{19} } type ListValuesResponse struct { @@ -1114,7 +1185,7 @@ type ListValuesResponse struct { func (x *ListValuesResponse) Reset() { *x = ListValuesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_attributes_attributes_proto_msgTypes[19] + mi := &file_attributes_attributes_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1127,7 +1198,7 @@ func (x *ListValuesResponse) String() string { func (*ListValuesResponse) ProtoMessage() {} func (x *ListValuesResponse) ProtoReflect() protoreflect.Message { - mi := &file_attributes_attributes_proto_msgTypes[19] + mi := &file_attributes_attributes_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1140,7 +1211,7 @@ func (x *ListValuesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListValuesResponse.ProtoReflect.Descriptor instead. func (*ListValuesResponse) Descriptor() ([]byte, []int) { - return file_attributes_attributes_proto_rawDescGZIP(), []int{19} + return file_attributes_attributes_proto_rawDescGZIP(), []int{20} } func (x *ListValuesResponse) GetValues() []*Value { @@ -1155,14 +1226,14 @@ type CreateValueRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - AttributeId string `protobuf:"bytes,1,opt,name=attribute_id,json=attributeId,proto3" json:"attribute_id,omitempty"` - Value *ValueCreateUpdate `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + AttributeId string `protobuf:"bytes,1,opt,name=attribute_id,json=attributeId,proto3" json:"attribute_id,omitempty"` + Value *ValueCreate `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` } func (x *CreateValueRequest) Reset() { *x = CreateValueRequest{} if protoimpl.UnsafeEnabled { - mi := &file_attributes_attributes_proto_msgTypes[20] + mi := &file_attributes_attributes_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1175,7 +1246,7 @@ func (x *CreateValueRequest) String() string { func (*CreateValueRequest) ProtoMessage() {} func (x *CreateValueRequest) ProtoReflect() protoreflect.Message { - mi := &file_attributes_attributes_proto_msgTypes[20] + mi := &file_attributes_attributes_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1188,7 +1259,7 @@ func (x *CreateValueRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateValueRequest.ProtoReflect.Descriptor instead. func (*CreateValueRequest) Descriptor() ([]byte, []int) { - return file_attributes_attributes_proto_rawDescGZIP(), []int{20} + return file_attributes_attributes_proto_rawDescGZIP(), []int{21} } func (x *CreateValueRequest) GetAttributeId() string { @@ -1198,7 +1269,7 @@ func (x *CreateValueRequest) GetAttributeId() string { return "" } -func (x *CreateValueRequest) GetValue() *ValueCreateUpdate { +func (x *CreateValueRequest) GetValue() *ValueCreate { if x != nil { return x.Value } @@ -1216,7 +1287,7 @@ type CreateValueResponse struct { func (x *CreateValueResponse) Reset() { *x = CreateValueResponse{} if protoimpl.UnsafeEnabled { - mi := &file_attributes_attributes_proto_msgTypes[21] + mi := &file_attributes_attributes_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1229,7 +1300,7 @@ func (x *CreateValueResponse) String() string { func (*CreateValueResponse) ProtoMessage() {} func (x *CreateValueResponse) ProtoReflect() protoreflect.Message { - mi := &file_attributes_attributes_proto_msgTypes[21] + mi := &file_attributes_attributes_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1242,7 +1313,7 @@ func (x *CreateValueResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateValueResponse.ProtoReflect.Descriptor instead. func (*CreateValueResponse) Descriptor() ([]byte, []int) { - return file_attributes_attributes_proto_rawDescGZIP(), []int{21} + return file_attributes_attributes_proto_rawDescGZIP(), []int{22} } func (x *CreateValueResponse) GetValue() *Value { @@ -1257,14 +1328,14 @@ type UpdateValueRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Value *ValueCreateUpdate `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Value *ValueUpdate `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` } func (x *UpdateValueRequest) Reset() { *x = UpdateValueRequest{} if protoimpl.UnsafeEnabled { - mi := &file_attributes_attributes_proto_msgTypes[22] + mi := &file_attributes_attributes_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1277,7 +1348,7 @@ func (x *UpdateValueRequest) String() string { func (*UpdateValueRequest) ProtoMessage() {} func (x *UpdateValueRequest) ProtoReflect() protoreflect.Message { - mi := &file_attributes_attributes_proto_msgTypes[22] + mi := &file_attributes_attributes_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1290,7 +1361,7 @@ func (x *UpdateValueRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateValueRequest.ProtoReflect.Descriptor instead. func (*UpdateValueRequest) Descriptor() ([]byte, []int) { - return file_attributes_attributes_proto_rawDescGZIP(), []int{22} + return file_attributes_attributes_proto_rawDescGZIP(), []int{23} } func (x *UpdateValueRequest) GetId() string { @@ -1300,7 +1371,7 @@ func (x *UpdateValueRequest) GetId() string { return "" } -func (x *UpdateValueRequest) GetValue() *ValueCreateUpdate { +func (x *UpdateValueRequest) GetValue() *ValueUpdate { if x != nil { return x.Value } @@ -1318,7 +1389,7 @@ type UpdateValueResponse struct { func (x *UpdateValueResponse) Reset() { *x = UpdateValueResponse{} if protoimpl.UnsafeEnabled { - mi := &file_attributes_attributes_proto_msgTypes[23] + mi := &file_attributes_attributes_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1331,7 +1402,7 @@ func (x *UpdateValueResponse) String() string { func (*UpdateValueResponse) ProtoMessage() {} func (x *UpdateValueResponse) ProtoReflect() protoreflect.Message { - mi := &file_attributes_attributes_proto_msgTypes[23] + mi := &file_attributes_attributes_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1344,7 +1415,7 @@ func (x *UpdateValueResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateValueResponse.ProtoReflect.Descriptor instead. func (*UpdateValueResponse) Descriptor() ([]byte, []int) { - return file_attributes_attributes_proto_rawDescGZIP(), []int{23} + return file_attributes_attributes_proto_rawDescGZIP(), []int{24} } func (x *UpdateValueResponse) GetValue() *Value { @@ -1365,7 +1436,7 @@ type DeleteValueRequest struct { func (x *DeleteValueRequest) Reset() { *x = DeleteValueRequest{} if protoimpl.UnsafeEnabled { - mi := &file_attributes_attributes_proto_msgTypes[24] + mi := &file_attributes_attributes_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1378,7 +1449,7 @@ func (x *DeleteValueRequest) String() string { func (*DeleteValueRequest) ProtoMessage() {} func (x *DeleteValueRequest) ProtoReflect() protoreflect.Message { - mi := &file_attributes_attributes_proto_msgTypes[24] + mi := &file_attributes_attributes_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1391,7 +1462,7 @@ func (x *DeleteValueRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteValueRequest.ProtoReflect.Descriptor instead. func (*DeleteValueRequest) Descriptor() ([]byte, []int) { - return file_attributes_attributes_proto_rawDescGZIP(), []int{24} + return file_attributes_attributes_proto_rawDescGZIP(), []int{25} } func (x *DeleteValueRequest) GetId() string { @@ -1405,12 +1476,14 @@ type DeleteValueResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + + Value *Value `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` } func (x *DeleteValueResponse) Reset() { *x = DeleteValueResponse{} if protoimpl.UnsafeEnabled { - mi := &file_attributes_attributes_proto_msgTypes[25] + mi := &file_attributes_attributes_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1423,7 +1496,7 @@ func (x *DeleteValueResponse) String() string { func (*DeleteValueResponse) ProtoMessage() {} func (x *DeleteValueResponse) ProtoReflect() protoreflect.Message { - mi := &file_attributes_attributes_proto_msgTypes[25] + mi := &file_attributes_attributes_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1436,7 +1509,14 @@ func (x *DeleteValueResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteValueResponse.ProtoReflect.Descriptor instead. func (*DeleteValueResponse) Descriptor() ([]byte, []int) { - return file_attributes_attributes_proto_rawDescGZIP(), []int{25} + return file_attributes_attributes_proto_rawDescGZIP(), []int{26} +} + +func (x *DeleteValueResponse) GetValue() *Value { + if x != nil { + return x.Value + } + return nil } var File_attributes_attributes_proto protoreflect.FileDescriptor @@ -1462,7 +1542,7 @@ var file_attributes_attributes_proto_rawDesc = []byte{ 0x01, 0x01, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x12, 0x29, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x8e, 0x02, 0x0a, 0x15, 0x41, 0x74, 0x74, + 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x88, 0x02, 0x0a, 0x15, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, @@ -1476,219 +1556,226 @@ var file_attributes_attributes_proto_rawDesc = []byte{ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x04, 0x72, 0x75, - 0x6c, 0x65, 0x12, 0x35, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0xb5, 0x01, 0x0a, 0x05, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x12, 0x3e, 0x0a, 0x17, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x64, - 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x15, 0x61, 0x74, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x73, 0x22, 0x78, 0x0a, 0x11, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x6c, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x73, 0x22, 0xa0, 0x01, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2c, 0x0a, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x29, 0x0a, 0x0c, 0x61, + 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0b, 0x61, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x6d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0x9d, 0x01, 0x0a, 0x0b, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 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, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0x89, 0x01, 0x0a, 0x1e, - 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x12, 0x36, - 0x0a, 0x17, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69, - 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x15, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x14, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x22, 0x7a, 0x0a, 0x19, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x47, - 0x72, 0x61, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x10, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x14, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x11, 0x6b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x49, 0x64, 0x22, 0x17, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x4f, 0x0a, 0x16, - 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x74, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x2d, 0x0a, - 0x13, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x4b, 0x0a, 0x14, - 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x09, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x65, 0x73, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x09, - 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x22, 0x61, 0x0a, 0x16, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x47, 0x0a, 0x09, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x65, 0x73, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, - 0x01, 0x52, 0x09, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x22, 0x4e, 0x0a, 0x17, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x09, 0x61, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x74, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x52, 0x09, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x22, 0x79, 0x0a, 0x16, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x47, - 0x0a, 0x09, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x41, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x09, 0x61, 0x74, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x22, 0x4e, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x33, 0x0a, 0x09, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x73, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x09, 0x61, 0x74, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x22, 0x30, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xba, - 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x4e, 0x0a, 0x17, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x09, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x65, 0x73, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x09, - 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x22, 0x29, 0x0a, 0x0f, 0x47, 0x65, 0x74, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, + 0x65, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x29, 0x0a, 0x0c, 0x61, + 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0b, 0x61, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x6d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0x72, 0x0a, 0x0b, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x01, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0x74, 0x0a, 0x1e, 0x44, 0x65, + 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, + 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x49, 0x64, 0x12, + 0x2f, 0x0a, 0x14, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6b, + 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, + 0x22, 0x67, 0x0a, 0x19, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x12, 0x19, 0x0a, + 0x08, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x14, 0x6b, 0x65, 0x79, 0x5f, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x22, 0x17, 0x0a, 0x15, 0x4c, 0x69, 0x73, + 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x22, 0x4f, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x0a, + 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x15, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x41, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x65, 0x73, 0x22, 0x2d, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x02, + 0x69, 0x64, 0x22, 0x4b, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x09, 0x61, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, + 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x52, 0x09, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x22, + 0x61, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x47, 0x0a, 0x09, 0x61, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, + 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, + 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x09, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x65, 0x22, 0x4e, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, + 0x09, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x15, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x41, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x09, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x65, 0x22, 0x79, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, - 0x52, 0x02, 0x69, 0x64, 0x22, 0x3b, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x22, 0x13, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x3f, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x06, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x7c, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, - 0x0c, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0b, 0x61, 0x74, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x05, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x47, 0x0a, 0x09, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x73, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, + 0x01, 0x01, 0x52, 0x09, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x22, 0x4e, 0x0a, + 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x09, 0x61, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x65, 0x52, 0x09, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x22, 0x30, 0x0a, + 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, + 0x4e, 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x09, 0x61, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, + 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x52, 0x09, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x22, + 0x29, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, + 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x3b, 0x0a, 0x10, 0x47, 0x65, + 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, + 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x13, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x3f, 0x0a, 0x12, + 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x29, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x76, 0x0a, + 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x0c, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, + 0x01, 0x52, 0x0b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x49, 0x64, 0x12, 0x35, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3e, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x69, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x63, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0x3e, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0x2c, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x15, - 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0xb3, 0x01, 0x0a, 0x15, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x12, - 0x28, 0x0a, 0x24, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x5f, 0x52, 0x55, 0x4c, - 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x50, - 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x23, 0x0a, 0x1f, 0x41, 0x54, 0x54, - 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x41, 0x4c, 0x4c, 0x5f, 0x4f, 0x46, 0x10, 0x01, 0x12, 0x23, - 0x0a, 0x1f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x5f, 0x52, 0x55, 0x4c, 0x45, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x41, 0x4e, 0x59, 0x5f, 0x4f, - 0x46, 0x10, 0x02, 0x12, 0x26, 0x0a, 0x22, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, - 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, - 0x48, 0x49, 0x45, 0x52, 0x41, 0x52, 0x43, 0x48, 0x59, 0x10, 0x03, 0x32, 0xa8, 0x08, 0x0a, 0x11, - 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x59, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x65, 0x73, 0x12, 0x21, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x02, 0x69, 0x64, 0x12, 0x35, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, + 0xc8, 0x01, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3e, 0x0a, 0x13, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x27, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x11, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2c, 0x0a, 0x12, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, + 0x03, 0xc8, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x3e, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x27, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, + 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0xb3, 0x01, 0x0a, 0x15, 0x41, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, + 0x75, 0x6d, 0x12, 0x28, 0x0a, 0x24, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x5f, + 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x55, + 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x23, 0x0a, 0x1f, + 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x41, 0x4c, 0x4c, 0x5f, 0x4f, 0x46, 0x10, + 0x01, 0x12, 0x23, 0x0a, 0x1f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x5f, 0x52, + 0x55, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x41, 0x4e, + 0x59, 0x5f, 0x4f, 0x46, 0x10, 0x02, 0x12, 0x26, 0x0a, 0x22, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, + 0x55, 0x54, 0x45, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, + 0x55, 0x4d, 0x5f, 0x48, 0x49, 0x45, 0x52, 0x41, 0x52, 0x43, 0x48, 0x59, 0x10, 0x03, 0x32, 0xa8, + 0x08, 0x0a, 0x11, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x59, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x21, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6b, 0x0a, 0x0c, - 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x1f, 0x2e, 0x61, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, - 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x74, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x7a, 0x0a, 0x0f, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x22, 0x2e, 0x61, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x61, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x6b, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, + 0x1f, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, + 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x20, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x47, 0x65, + 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x61, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x7a, 0x0a, 0x0f, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, + 0x22, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, + 0x3a, 0x09, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x22, 0x0b, 0x2f, 0x61, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x7f, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x22, 0x2e, 0x61, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, + 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x23, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x3a, 0x09, 0x61, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x22, 0x10, 0x2f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x74, 0x0a, 0x0f, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x22, 0x2e, 0x61, + 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x23, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x3a, 0x09, 0x61, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x22, 0x0b, 0x2f, 0x61, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x7f, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x22, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x3a, 0x09, 0x61, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x22, 0x10, 0x2f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, - 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x74, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x22, 0x2e, 0x61, 0x74, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x74, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, - 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x2a, 0x10, 0x2f, 0x61, 0x74, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x68, 0x0a, 0x08, - 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1b, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, + 0x1a, 0x23, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x2a, 0x10, 0x2f, + 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, + 0x68, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1b, 0x2e, 0x61, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x61, 0x74, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2f, 0x5f, 0x2f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x80, 0x01, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1e, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x65, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x65, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x3a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x21, 0x2f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x78, 0x0a, 0x0b, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1e, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x22, 0x3a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x19, 0x2f, 0x61, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x73, 0x2f, 0x5f, 0x2f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2f, 0x7b, - 0x69, 0x64, 0x7d, 0x12, 0x71, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x1e, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x2a, 0x19, 0x2f, 0x61, 0x74, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, + 0x2f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2f, 0x5f, 0x2f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x80, 0x01, 0x0a, 0x0b, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1e, 0x2e, 0x61, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x2a, 0x3a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x21, 0x2f, 0x61, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x78, 0x0a, 0x0b, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1e, 0x2e, 0x61, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x22, 0x3a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x19, 0x2f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2f, 0x5f, 0x2f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x42, 0x9b, 0x01, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x42, 0x0f, 0x41, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x30, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, - 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2d, 0x76, 0x32, 0x2d, 0x70, 0x6f, 0x63, 0x2f, - 0x73, 0x64, 0x6b, 0x2f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0xa2, 0x02, - 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x0a, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, - 0x73, 0xca, 0x02, 0x0a, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0xe2, 0x02, - 0x16, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x5c, 0x47, 0x50, 0x42, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0a, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x71, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1e, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x2a, 0x19, + 0x2f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2f, 0x5f, 0x2f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x42, 0x9b, 0x01, 0x0a, 0x0e, 0x63, 0x6f, + 0x6d, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x42, 0x0f, 0x41, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, + 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, + 0x74, 0x64, 0x66, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2d, 0x76, 0x32, 0x2d, 0x70, + 0x6f, 0x63, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x73, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x0a, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x73, 0xca, 0x02, 0x0a, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x73, 0xe2, 0x02, 0x16, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x5c, 0x47, + 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0a, 0x41, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1704,83 +1791,86 @@ func file_attributes_attributes_proto_rawDescGZIP() []byte { } var file_attributes_attributes_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_attributes_attributes_proto_msgTypes = make([]protoimpl.MessageInfo, 26) +var file_attributes_attributes_proto_msgTypes = make([]protoimpl.MessageInfo, 27) var file_attributes_attributes_proto_goTypes = []interface{}{ (AttributeRuleTypeEnum)(0), // 0: attributes.AttributeRuleTypeEnum (*Attribute)(nil), // 1: attributes.Attribute (*AttributeCreateUpdate)(nil), // 2: attributes.AttributeCreateUpdate (*Value)(nil), // 3: attributes.Value - (*ValueCreateUpdate)(nil), // 4: attributes.ValueCreateUpdate - (*DefinitionKeyAccessServerGrant)(nil), // 5: attributes.DefinitionKeyAccessServerGrant - (*ValueKeyAccessServerGrant)(nil), // 6: attributes.ValueKeyAccessServerGrant - (*ListAttributesRequest)(nil), // 7: attributes.ListAttributesRequest - (*ListAttributesResponse)(nil), // 8: attributes.ListAttributesResponse - (*GetAttributeRequest)(nil), // 9: attributes.GetAttributeRequest - (*GetAttributeResponse)(nil), // 10: attributes.GetAttributeResponse - (*CreateAttributeRequest)(nil), // 11: attributes.CreateAttributeRequest - (*CreateAttributeResponse)(nil), // 12: attributes.CreateAttributeResponse - (*UpdateAttributeRequest)(nil), // 13: attributes.UpdateAttributeRequest - (*UpdateAttributeResponse)(nil), // 14: attributes.UpdateAttributeResponse - (*DeleteAttributeRequest)(nil), // 15: attributes.DeleteAttributeRequest - (*DeleteAttributeResponse)(nil), // 16: attributes.DeleteAttributeResponse - (*GetValueRequest)(nil), // 17: attributes.GetValueRequest - (*GetValueResponse)(nil), // 18: attributes.GetValueResponse - (*ListValuesRequest)(nil), // 19: attributes.ListValuesRequest - (*ListValuesResponse)(nil), // 20: attributes.ListValuesResponse - (*CreateValueRequest)(nil), // 21: attributes.CreateValueRequest - (*CreateValueResponse)(nil), // 22: attributes.CreateValueResponse - (*UpdateValueRequest)(nil), // 23: attributes.UpdateValueRequest - (*UpdateValueResponse)(nil), // 24: attributes.UpdateValueResponse - (*DeleteValueRequest)(nil), // 25: attributes.DeleteValueRequest - (*DeleteValueResponse)(nil), // 26: attributes.DeleteValueResponse - (*common.Metadata)(nil), // 27: common.Metadata - (*common.MetadataMutable)(nil), // 28: common.MetadataMutable + (*ValueCreate)(nil), // 4: attributes.ValueCreate + (*ValueUpdate)(nil), // 5: attributes.ValueUpdate + (*DefinitionKeyAccessServerGrant)(nil), // 6: attributes.DefinitionKeyAccessServerGrant + (*ValueKeyAccessServerGrant)(nil), // 7: attributes.ValueKeyAccessServerGrant + (*ListAttributesRequest)(nil), // 8: attributes.ListAttributesRequest + (*ListAttributesResponse)(nil), // 9: attributes.ListAttributesResponse + (*GetAttributeRequest)(nil), // 10: attributes.GetAttributeRequest + (*GetAttributeResponse)(nil), // 11: attributes.GetAttributeResponse + (*CreateAttributeRequest)(nil), // 12: attributes.CreateAttributeRequest + (*CreateAttributeResponse)(nil), // 13: attributes.CreateAttributeResponse + (*UpdateAttributeRequest)(nil), // 14: attributes.UpdateAttributeRequest + (*UpdateAttributeResponse)(nil), // 15: attributes.UpdateAttributeResponse + (*DeleteAttributeRequest)(nil), // 16: attributes.DeleteAttributeRequest + (*DeleteAttributeResponse)(nil), // 17: attributes.DeleteAttributeResponse + (*GetValueRequest)(nil), // 18: attributes.GetValueRequest + (*GetValueResponse)(nil), // 19: attributes.GetValueResponse + (*ListValuesRequest)(nil), // 20: attributes.ListValuesRequest + (*ListValuesResponse)(nil), // 21: attributes.ListValuesResponse + (*CreateValueRequest)(nil), // 22: attributes.CreateValueRequest + (*CreateValueResponse)(nil), // 23: attributes.CreateValueResponse + (*UpdateValueRequest)(nil), // 24: attributes.UpdateValueRequest + (*UpdateValueResponse)(nil), // 25: attributes.UpdateValueResponse + (*DeleteValueRequest)(nil), // 26: attributes.DeleteValueRequest + (*DeleteValueResponse)(nil), // 27: attributes.DeleteValueResponse + (*common.Metadata)(nil), // 28: common.Metadata + (*common.MetadataMutable)(nil), // 29: common.MetadataMutable } var file_attributes_attributes_proto_depIdxs = []int32{ - 27, // 0: attributes.Attribute.metadata:type_name -> common.Metadata + 28, // 0: attributes.Attribute.metadata:type_name -> common.Metadata 0, // 1: attributes.Attribute.rule:type_name -> attributes.AttributeRuleTypeEnum 3, // 2: attributes.Attribute.values:type_name -> attributes.Value - 28, // 3: attributes.AttributeCreateUpdate.metadata:type_name -> common.MetadataMutable + 29, // 3: attributes.AttributeCreateUpdate.metadata:type_name -> common.MetadataMutable 0, // 4: attributes.AttributeCreateUpdate.rule:type_name -> attributes.AttributeRuleTypeEnum - 4, // 5: attributes.AttributeCreateUpdate.values:type_name -> attributes.ValueCreateUpdate - 27, // 6: attributes.Value.metadata:type_name -> common.Metadata - 28, // 7: attributes.ValueCreateUpdate.metadata:type_name -> common.MetadataMutable - 1, // 8: attributes.ListAttributesResponse.attributes:type_name -> attributes.Attribute - 1, // 9: attributes.GetAttributeResponse.attribute:type_name -> attributes.Attribute - 2, // 10: attributes.CreateAttributeRequest.attribute:type_name -> attributes.AttributeCreateUpdate - 1, // 11: attributes.CreateAttributeResponse.attribute:type_name -> attributes.Attribute - 2, // 12: attributes.UpdateAttributeRequest.attribute:type_name -> attributes.AttributeCreateUpdate - 1, // 13: attributes.UpdateAttributeResponse.attribute:type_name -> attributes.Attribute - 1, // 14: attributes.DeleteAttributeResponse.attribute:type_name -> attributes.Attribute - 3, // 15: attributes.GetValueResponse.value:type_name -> attributes.Value - 3, // 16: attributes.ListValuesResponse.values:type_name -> attributes.Value - 4, // 17: attributes.CreateValueRequest.value:type_name -> attributes.ValueCreateUpdate - 3, // 18: attributes.CreateValueResponse.value:type_name -> attributes.Value - 4, // 19: attributes.UpdateValueRequest.value:type_name -> attributes.ValueCreateUpdate - 3, // 20: attributes.UpdateValueResponse.value:type_name -> attributes.Value - 7, // 21: attributes.AttributesService.ListAttributes:input_type -> attributes.ListAttributesRequest - 9, // 22: attributes.AttributesService.GetAttribute:input_type -> attributes.GetAttributeRequest - 11, // 23: attributes.AttributesService.CreateAttribute:input_type -> attributes.CreateAttributeRequest - 13, // 24: attributes.AttributesService.UpdateAttribute:input_type -> attributes.UpdateAttributeRequest - 15, // 25: attributes.AttributesService.DeleteAttribute:input_type -> attributes.DeleteAttributeRequest - 17, // 26: attributes.AttributesService.GetValue:input_type -> attributes.GetValueRequest - 21, // 27: attributes.AttributesService.CreateValue:input_type -> attributes.CreateValueRequest - 23, // 28: attributes.AttributesService.UpdateValue:input_type -> attributes.UpdateValueRequest - 25, // 29: attributes.AttributesService.DeleteValue:input_type -> attributes.DeleteValueRequest - 8, // 30: attributes.AttributesService.ListAttributes:output_type -> attributes.ListAttributesResponse - 10, // 31: attributes.AttributesService.GetAttribute:output_type -> attributes.GetAttributeResponse - 12, // 32: attributes.AttributesService.CreateAttribute:output_type -> attributes.CreateAttributeResponse - 14, // 33: attributes.AttributesService.UpdateAttribute:output_type -> attributes.UpdateAttributeResponse - 16, // 34: attributes.AttributesService.DeleteAttribute:output_type -> attributes.DeleteAttributeResponse - 18, // 35: attributes.AttributesService.GetValue:output_type -> attributes.GetValueResponse - 22, // 36: attributes.AttributesService.CreateValue:output_type -> attributes.CreateValueResponse - 24, // 37: attributes.AttributesService.UpdateValue:output_type -> attributes.UpdateValueResponse - 26, // 38: attributes.AttributesService.DeleteValue:output_type -> attributes.DeleteValueResponse - 30, // [30:39] is the sub-list for method output_type - 21, // [21:30] is the sub-list for method input_type - 21, // [21:21] is the sub-list for extension type_name - 21, // [21:21] is the sub-list for extension extendee - 0, // [0:21] is the sub-list for field type_name + 4, // 5: attributes.AttributeCreateUpdate.values:type_name -> attributes.ValueCreate + 28, // 6: attributes.Value.metadata:type_name -> common.Metadata + 29, // 7: attributes.ValueCreate.metadata:type_name -> common.MetadataMutable + 29, // 8: attributes.ValueUpdate.metadata:type_name -> common.MetadataMutable + 1, // 9: attributes.ListAttributesResponse.attributes:type_name -> attributes.Attribute + 1, // 10: attributes.GetAttributeResponse.attribute:type_name -> attributes.Attribute + 2, // 11: attributes.CreateAttributeRequest.attribute:type_name -> attributes.AttributeCreateUpdate + 1, // 12: attributes.CreateAttributeResponse.attribute:type_name -> attributes.Attribute + 2, // 13: attributes.UpdateAttributeRequest.attribute:type_name -> attributes.AttributeCreateUpdate + 1, // 14: attributes.UpdateAttributeResponse.attribute:type_name -> attributes.Attribute + 1, // 15: attributes.DeleteAttributeResponse.attribute:type_name -> attributes.Attribute + 3, // 16: attributes.GetValueResponse.value:type_name -> attributes.Value + 3, // 17: attributes.ListValuesResponse.values:type_name -> attributes.Value + 4, // 18: attributes.CreateValueRequest.value:type_name -> attributes.ValueCreate + 3, // 19: attributes.CreateValueResponse.value:type_name -> attributes.Value + 5, // 20: attributes.UpdateValueRequest.value:type_name -> attributes.ValueUpdate + 3, // 21: attributes.UpdateValueResponse.value:type_name -> attributes.Value + 3, // 22: attributes.DeleteValueResponse.value:type_name -> attributes.Value + 8, // 23: attributes.AttributesService.ListAttributes:input_type -> attributes.ListAttributesRequest + 10, // 24: attributes.AttributesService.GetAttribute:input_type -> attributes.GetAttributeRequest + 12, // 25: attributes.AttributesService.CreateAttribute:input_type -> attributes.CreateAttributeRequest + 14, // 26: attributes.AttributesService.UpdateAttribute:input_type -> attributes.UpdateAttributeRequest + 16, // 27: attributes.AttributesService.DeleteAttribute:input_type -> attributes.DeleteAttributeRequest + 18, // 28: attributes.AttributesService.GetValue:input_type -> attributes.GetValueRequest + 22, // 29: attributes.AttributesService.CreateValue:input_type -> attributes.CreateValueRequest + 24, // 30: attributes.AttributesService.UpdateValue:input_type -> attributes.UpdateValueRequest + 26, // 31: attributes.AttributesService.DeleteValue:input_type -> attributes.DeleteValueRequest + 9, // 32: attributes.AttributesService.ListAttributes:output_type -> attributes.ListAttributesResponse + 11, // 33: attributes.AttributesService.GetAttribute:output_type -> attributes.GetAttributeResponse + 13, // 34: attributes.AttributesService.CreateAttribute:output_type -> attributes.CreateAttributeResponse + 15, // 35: attributes.AttributesService.UpdateAttribute:output_type -> attributes.UpdateAttributeResponse + 17, // 36: attributes.AttributesService.DeleteAttribute:output_type -> attributes.DeleteAttributeResponse + 19, // 37: attributes.AttributesService.GetValue:output_type -> attributes.GetValueResponse + 23, // 38: attributes.AttributesService.CreateValue:output_type -> attributes.CreateValueResponse + 25, // 39: attributes.AttributesService.UpdateValue:output_type -> attributes.UpdateValueResponse + 27, // 40: attributes.AttributesService.DeleteValue:output_type -> attributes.DeleteValueResponse + 32, // [32:41] is the sub-list for method output_type + 23, // [23:32] is the sub-list for method input_type + 23, // [23:23] is the sub-list for extension type_name + 23, // [23:23] is the sub-list for extension extendee + 0, // [0:23] is the sub-list for field type_name } func init() { file_attributes_attributes_proto_init() } @@ -1826,7 +1916,7 @@ func file_attributes_attributes_proto_init() { } } file_attributes_attributes_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ValueCreateUpdate); i { + switch v := v.(*ValueCreate); i { case 0: return &v.state case 1: @@ -1838,7 +1928,7 @@ func file_attributes_attributes_proto_init() { } } file_attributes_attributes_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DefinitionKeyAccessServerGrant); i { + switch v := v.(*ValueUpdate); i { case 0: return &v.state case 1: @@ -1850,7 +1940,7 @@ func file_attributes_attributes_proto_init() { } } file_attributes_attributes_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ValueKeyAccessServerGrant); i { + switch v := v.(*DefinitionKeyAccessServerGrant); i { case 0: return &v.state case 1: @@ -1862,7 +1952,7 @@ func file_attributes_attributes_proto_init() { } } file_attributes_attributes_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListAttributesRequest); i { + switch v := v.(*ValueKeyAccessServerGrant); i { case 0: return &v.state case 1: @@ -1874,7 +1964,7 @@ func file_attributes_attributes_proto_init() { } } file_attributes_attributes_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListAttributesResponse); i { + switch v := v.(*ListAttributesRequest); i { case 0: return &v.state case 1: @@ -1886,7 +1976,7 @@ func file_attributes_attributes_proto_init() { } } file_attributes_attributes_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAttributeRequest); i { + switch v := v.(*ListAttributesResponse); i { case 0: return &v.state case 1: @@ -1898,7 +1988,7 @@ func file_attributes_attributes_proto_init() { } } file_attributes_attributes_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAttributeResponse); i { + switch v := v.(*GetAttributeRequest); i { case 0: return &v.state case 1: @@ -1910,7 +2000,7 @@ func file_attributes_attributes_proto_init() { } } file_attributes_attributes_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateAttributeRequest); i { + switch v := v.(*GetAttributeResponse); i { case 0: return &v.state case 1: @@ -1922,7 +2012,7 @@ func file_attributes_attributes_proto_init() { } } file_attributes_attributes_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateAttributeResponse); i { + switch v := v.(*CreateAttributeRequest); i { case 0: return &v.state case 1: @@ -1934,7 +2024,7 @@ func file_attributes_attributes_proto_init() { } } file_attributes_attributes_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateAttributeRequest); i { + switch v := v.(*CreateAttributeResponse); i { case 0: return &v.state case 1: @@ -1946,7 +2036,7 @@ func file_attributes_attributes_proto_init() { } } file_attributes_attributes_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateAttributeResponse); i { + switch v := v.(*UpdateAttributeRequest); i { case 0: return &v.state case 1: @@ -1958,7 +2048,7 @@ func file_attributes_attributes_proto_init() { } } file_attributes_attributes_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteAttributeRequest); i { + switch v := v.(*UpdateAttributeResponse); i { case 0: return &v.state case 1: @@ -1970,7 +2060,7 @@ func file_attributes_attributes_proto_init() { } } file_attributes_attributes_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteAttributeResponse); i { + switch v := v.(*DeleteAttributeRequest); i { case 0: return &v.state case 1: @@ -1982,7 +2072,7 @@ func file_attributes_attributes_proto_init() { } } file_attributes_attributes_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetValueRequest); i { + switch v := v.(*DeleteAttributeResponse); i { case 0: return &v.state case 1: @@ -1994,7 +2084,7 @@ func file_attributes_attributes_proto_init() { } } file_attributes_attributes_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetValueResponse); i { + switch v := v.(*GetValueRequest); i { case 0: return &v.state case 1: @@ -2006,7 +2096,7 @@ func file_attributes_attributes_proto_init() { } } file_attributes_attributes_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListValuesRequest); i { + switch v := v.(*GetValueResponse); i { case 0: return &v.state case 1: @@ -2018,7 +2108,7 @@ func file_attributes_attributes_proto_init() { } } file_attributes_attributes_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListValuesResponse); i { + switch v := v.(*ListValuesRequest); i { case 0: return &v.state case 1: @@ -2030,7 +2120,7 @@ func file_attributes_attributes_proto_init() { } } file_attributes_attributes_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateValueRequest); i { + switch v := v.(*ListValuesResponse); i { case 0: return &v.state case 1: @@ -2042,7 +2132,7 @@ func file_attributes_attributes_proto_init() { } } file_attributes_attributes_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateValueResponse); i { + switch v := v.(*CreateValueRequest); i { case 0: return &v.state case 1: @@ -2054,7 +2144,7 @@ func file_attributes_attributes_proto_init() { } } file_attributes_attributes_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateValueRequest); i { + switch v := v.(*CreateValueResponse); i { case 0: return &v.state case 1: @@ -2066,7 +2156,7 @@ func file_attributes_attributes_proto_init() { } } file_attributes_attributes_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateValueResponse); i { + switch v := v.(*UpdateValueRequest); i { case 0: return &v.state case 1: @@ -2078,7 +2168,7 @@ func file_attributes_attributes_proto_init() { } } file_attributes_attributes_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteValueRequest); i { + switch v := v.(*UpdateValueResponse); i { case 0: return &v.state case 1: @@ -2090,6 +2180,18 @@ func file_attributes_attributes_proto_init() { } } file_attributes_attributes_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteValueRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_attributes_attributes_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteValueResponse); i { case 0: return &v.state @@ -2108,7 +2210,7 @@ func file_attributes_attributes_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_attributes_attributes_proto_rawDesc, NumEnums: 1, - NumMessages: 26, + NumMessages: 27, NumExtensions: 0, NumServices: 1, }, diff --git a/services/attributes/attributes.go b/services/attributes/attributes.go index 9bcc5a33f4..4bced381d7 100644 --- a/services/attributes/attributes.go +++ b/services/attributes/attributes.go @@ -104,3 +104,73 @@ func (s *AttributesService) DeleteAttribute(ctx context.Context, return rsp, nil } + +/// +/// Attribute Values +/// + +func (s *AttributesService) CreateAttributeValue(ctx context.Context, req *attributes.CreateValueRequest) (*attributes.CreateValueResponse, error) { + rsp := &attributes.CreateValueResponse{} + + item, err := s.dbClient.CreateAttributeValue(ctx, req.Value) + if err != nil { + slog.Error(services.ErrCreatingResource, slog.String("error", err.Error())) + return nil, status.Error(codes.Internal, services.ErrCreatingResource) + } + rsp.Value = item + + return rsp, nil +} + +func (s *AttributesService) ListAttributeValues(ctx context.Context, req *attributes.ListValuesRequest) (*attributes.ListValuesResponse, error) { + rsp := &attributes.ListValuesResponse{} + + list, err := s.dbClient.ListAllAttributeValues(ctx) + if err != nil { + slog.Error(services.ErrListingResource, slog.String("error", err.Error())) + return nil, status.Error(codes.Internal, services.ErrListingResource) + } + rsp.Values = list + + return rsp, nil +} + +func (s *AttributesService) GetAttributeValue(ctx context.Context, req *attributes.GetValueRequest) (*attributes.GetValueResponse, error) { + rsp := &attributes.GetValueResponse{} + + item, err := s.dbClient.GetAttributeValue(ctx, req.Id) + if err != nil { + slog.Error(services.ErrGettingResource, slog.String("error", err.Error())) + return nil, status.Error(codes.Internal, services.ErrGettingResource) + } + rsp.Value = item + + return rsp, nil +} + +func (s *AttributesService) UpdateAttributeValue(ctx context.Context, req *attributes.UpdateValueRequest) (*attributes.UpdateValueResponse, error) { + rsp := &attributes.UpdateValueResponse{} + + a, err := s.dbClient.UpdateAttributeValue(ctx, req.Id, req.Value) + if err != nil { + slog.Error(services.ErrUpdatingResource, slog.String("error", err.Error())) + return &attributes.UpdateValueResponse{}, + status.Error(codes.Internal, services.ErrUpdatingResource) + } + rsp.Value = a + + return rsp, nil +} + +func (s *AttributesService) DeleteAttributeValue(ctx context.Context, req *attributes.DeleteValueRequest) (*attributes.DeleteValueResponse, error) { + rsp := &attributes.DeleteValueResponse{} + + a, err := s.dbClient.DeleteAttributeValue(ctx, req.Id) + if err != nil { + slog.Error(services.ErrDeletingResource, slog.String("error", err.Error())) + return nil, status.Error(codes.Internal, services.ErrDeletingResource) + } + rsp.Value = a + + return rsp, nil +} diff --git a/tests/attributes_test.go b/tests/attributes_test.go index 72b42480d4..daea0d23a0 100644 --- a/tests/attributes_test.go +++ b/tests/attributes_test.go @@ -46,7 +46,7 @@ func (suite *AttributesSuite) SetupSuite() { suite.T().Fatal(err) } - var attrs = make([]*attributes.AttributeDefinition, 0) + var attrs = make([]*attributes.Attribute, 0) err = json.Unmarshal(testData, &attrs) @@ -57,7 +57,7 @@ func (suite *AttributesSuite) SetupSuite() { for _, attr := range attrs { _, err = suite.client.CreateAttribute(ctx, &attributes.CreateAttributeRequest{ - Definition: attr, + Attribute: attr, }) if err != nil { slog.Error("could not create attribute", slog.String("error", err.Error()))