using System; namespace Hcs.ClientApi.RemoteCaller { /// /// Состояние многостраничной выдачи для методов HCS выдыющих длинные списки. /// Списки выдаются порциями по 100 позиций и в каждой порции указано состояние /// многостраничной выдачи одним значением - это либо bool со значением true что /// означает что эта порция последняя IsLastPage, либо это строка содержащая /// guid объекта начала следующей порции - и этот guid надо указать в запросе /// чтобы получить следующую порцию. /// public class HcsPagedResultState { /// /// Состояние указыввает что это последняя страница /// public bool IsLastPage { get; private set; } /// /// Состояние указывает что это не последняя страница и /// следующая страница начинается с NextGuid /// public Guid NextGuid { get; private set; } private const string me = nameof(HcsPagedResultState); public static readonly HcsPagedResultState IsLastPageResultState = new HcsPagedResultState(true); /// /// Новый маркер состояния многостраничной выдачи метода HCS /// public HcsPagedResultState(object item) { if (item == null) throw new HcsException($"{me}.Item is null"); if (item is bool) { if ((bool)item == false) throw new HcsException($"{me}.IsLastPage is false"); IsLastPage = true; } else if (item is string) { try { IsLastPage = false; NextGuid = HcsUtil.ParseGuid((string)item); } catch (Exception e) { throw new HcsException($"Failed to parse {me}.NextGuid value", e); } } else { throw new HcsException($"{me}.Item is of unrecognized type " + item.GetType().FullName); } } public override string ToString() { return $"{me}({nameof(IsLastPage)}={IsLastPage}" + (IsLastPage ? "" : $",{nameof(NextGuid)}={NextGuid}") + ")"; } } }