public RequestRate(int requestCount, RequestRatePeriod period)
 {
     if (requestCount <= 0)
     {
         throw new ArgumentOutOfRangeException(nameof(requestCount));
     }
     Period       = period;
     RequestCount = requestCount;
 }
        public static bool TryParse(string str, out RequestRate requestRate)
        {
            if (str == null)
            {
                throw new ArgumentNullException(nameof(str));
            }
            requestRate = null;
            str         = str.Trim();
            var parts = str.Split(new[] { "r/" }, StringSplitOptions.RemoveEmptyEntries);

            if (parts.Length != 2)
            {
                return(false);
            }
            if (!int.TryParse(parts[0].Trim(), out var requestCount))
            {
                return(false);
            }
            if (requestCount <= 0)
            {
                return(false);
            }
            RequestRatePeriod period = RequestRatePeriod.Day;

            switch (parts[1].Trim().ToLowerInvariant())
            {
            case "s":
            case "sec":
            case "second":
                period = RequestRatePeriod.Second;
                break;

            case "m":
            case "min":
            case "minute":
                period = RequestRatePeriod.Minute;
                break;

            case "h":
            case "hour":
                period = RequestRatePeriod.Hour;
                break;

            case "d":
            case "day":
                period = RequestRatePeriod.Day;
                break;

            default:
                return(false);
            }
            requestRate = new RequestRate(requestCount, period);
            return(true);
        }