public AccountRequestCounter(Account _account, RequestRateLimits requestRateLimits)
 {
     account       = _account ?? throw new ArgumentNullException(nameof(_account));
     minuteCounter = new RequestCounter();
     hourCounter   = new RequestCounter();
     SetLimits(requestRateLimits);
 }
        private bool IncSingleCounter(RequestCounter counter, long counterWindowPeriod, uint maxAllowedRequestsCount, long requestDatetime, out string error)
        {
            error = null;
            if ((counter.StartedAt + counterWindowPeriod) < requestDatetime) //window is expired
            {
                counter.Reset(requestDatetime);
            }

            if (counter.Count + 1 > maxAllowedRequestsCount)
            {
                error = $"Too many requests. Max allowed request count is {maxAllowedRequestsCount} per {counterWindowPeriod/10_000}ms.";
                return(false);
            }
            counter.IncRequestsCount();
            return(true);
        }