using System.Collections.ObjectModel; using System.Linq; using FrostFS.Object; using FrostFS.SDK.Client.Mappers.GRPC; namespace FrostFS.SDK; public class FrostFsSplit(SplitId splitId, FrostFsObjectId? previous = null, FrostFsObjectId? parent = null, FrostFsObjectHeader? parentHeader = null, FrostFsSignature? parentSignature = null, ReadOnlyCollection? children = null) { private Header.Types.Split? _split; public FrostFsSplit() : this(new SplitId()) { } public SplitId SplitId { get; private set; } = splitId; public FrostFsObjectId? Previous { get; } = previous; public FrostFsObjectId? Parent { get; internal set; } = parent; public FrostFsSignature? ParentSignature { get; } = parentSignature; public FrostFsObjectHeader? ParentHeader { get; set; } = parentHeader; public ReadOnlyCollection? Children { get; } = children; public Header.Types.Split GetSplit() { if (_split == null) { _split = new Header.Types.Split { SplitId = SplitId?.GetSplitId(), Parent = Parent?.ToMessage(), ParentHeader = ParentHeader?.GetHeader(), ParentSignature = ParentSignature?.ToMessage(), Previous = Previous?.ToMessage(), }; if (Children != null) { _split.Children.AddRange(Children.Select(x => x.ToMessage())); } } return _split; } }