using System; using System.Linq; using FrostFS.Netmap; namespace FrostFS.SDK.Client; public static class PolicyMapper { public static Replica ToMessage(this FrostFsReplica replica) { return new Replica { Count = (uint)replica.Count, Selector = replica.Selector }; } public static FrostFsReplica ToModel(this Replica replica) { if (replica is null) { throw new ArgumentNullException(nameof(replica)); } return new FrostFsReplica((int)replica.Count, replica.Selector); } public static Selector ToMessage(this FrostFsSelector selector) { if (selector is null) { throw new ArgumentNullException(nameof(selector)); } return new Selector { Name = selector.Name, Count = selector.Count, Clause = (Clause)selector.Clause, Attribute = selector.Attribute, Filter = selector.Filter }; } public static FrostFsSelector ToModel(this Selector selector) { if (selector is null) { throw new ArgumentNullException(nameof(selector)); } var model = new FrostFsSelector(selector.Name) { Count = selector.Count, Clause = (int)selector.Clause, Attribute = selector.Attribute, Filter = selector.Filter }; return model; } public static Filter ToMessage(this FrostFsFilter filter) { if (filter is null) { throw new ArgumentNullException(nameof(filter)); } var message = new Filter { Name = filter.Name, Key = filter.Key, Op = (Operation)filter.Operation, Value = filter.Value, }; message.Filters.AddRange(filter.Filters.Select(f => f.ToMessage())); return message; } public static FrostFsFilter ToModel(this Filter filter) { if (filter is null) { throw new ArgumentNullException(nameof(filter)); } var model = new FrostFsFilter( filter.Name, filter.Key, (int)filter.Op, filter.Value, [.. filter.Filters.Select(f => f.ToModel())]); return model; } }