From 9aa93d123d5a2888d905117c0c4f7654ea065a95 Mon Sep 17 00:00:00 2001 From: Ivan Pchelintsev Date: Thu, 16 May 2024 14:01:38 +0300 Subject: [PATCH] [#1] Add object attributes Signed-off-by: Ivan Pchelintsev --- .../Mappers/GRPC/Object.cs | 39 +++++++++++++++++-- src/FrostFS.SDK.ModelsV2/Object.cs | 20 +++++++++- 2 files changed, 55 insertions(+), 4 deletions(-) diff --git a/src/FrostFS.SDK.ClientV2/Mappers/GRPC/Object.cs b/src/FrostFS.SDK.ClientV2/Mappers/GRPC/Object.cs index 8259a61..0e0a493 100644 --- a/src/FrostFS.SDK.ClientV2/Mappers/GRPC/Object.cs +++ b/src/FrostFS.SDK.ClientV2/Mappers/GRPC/Object.cs @@ -3,6 +3,23 @@ using FrostFS.SDK.ModelsV2; namespace FrostFS.SDK.ClientV2.Mappers.GRPC; +public static class ObjectAttributeMapper +{ + public static Header.Types.Attribute ToGrpcMessage(this ObjectAttribute attribute) + { + return new Header.Types.Attribute + { + Key = attribute.Key, + Value = attribute.Value + }; + } + + public static ObjectAttribute ToModel(this Header.Types.Attribute attribute) + { + return new ObjectAttribute(attribute.Key, attribute.Value); + } +} + public static class ObjectHeadMapper { public static Header ToGrpcMessage(this ObjectHeader header) @@ -12,11 +29,19 @@ public static class ObjectHeadMapper { throw new ArgumentException($"Unknown ObjectType. Value: '{header.ObjectType}'."); } - return new Header + + var head = new Header { + Attributes = { }, ContainerId = header.ContainerId.ToGrpcMessage(), ObjectType = Enum.Parse(objTypeName) }; + foreach (var attribute in header.Attributes) + { + head.Attributes.Add(attribute.ToGrpcMessage()); + } + + return head; } public static ObjectHeader ToModel(this Header header) @@ -26,13 +51,21 @@ public static class ObjectHeadMapper { throw new ArgumentException($"Unknown ObjectType. Value: '{header.ObjectType}'."); } + + var attributes = new List(); + foreach (var attribute in header.Attributes) + { + attributes.Add(attribute.ToModel()); + } + return new ObjectHeader( ContainerId.FromHash(header.ContainerId.Value.ToByteArray()), - Enum.Parse(objTypeName) + Enum.Parse(objTypeName), + attributes.ToArray() ) { Size = (long)header.PayloadLength, Version = header.Version.ToModel() }; } -} +} \ No newline at end of file diff --git a/src/FrostFS.SDK.ModelsV2/Object.cs b/src/FrostFS.SDK.ModelsV2/Object.cs index a38a052..24cb6a3 100644 --- a/src/FrostFS.SDK.ModelsV2/Object.cs +++ b/src/FrostFS.SDK.ModelsV2/Object.cs @@ -2,15 +2,33 @@ using FrostFS.SDK.ModelsV2.Enums; namespace FrostFS.SDK.ModelsV2; +public class ObjectAttribute +{ + public string Key { get; set; } + public string Value { get; set; } + + public ObjectAttribute(string key, string value) + { + Key = key; + Value = value; + } +} + public class ObjectHeader { + public ObjectAttribute[] Attributes { get; set; } public ContainerId ContainerId { get; set; } public long Size { get; set; } public ObjectType ObjectType { get; set; } public Version Version { get; set; } - public ObjectHeader(ContainerId containerId, ObjectType type = ObjectType.Regular) + public ObjectHeader( + ContainerId containerId, + ObjectType type = ObjectType.Regular, + params ObjectAttribute[] attributes + ) { + Attributes = attributes; ContainerId = containerId; ObjectType = type; }