private WeatherResponse GetCurrently(CancellationToken token)
        {
            if (!Latitude.HasValue || !Longitude.HasValue)
            {
                return(null);
            }

            var weatherDataType = _weatherDataType;

            try
            {
                _weatherDataType = WeatherDataResponseType.Current;

                var requestString  = BuildRequestUri(Latitude.Value, Longitude.Value);
                var responseResult = GetStringAsync(requestString, token);
                if (responseResult == null)
                {
                    return(null);
                }

                var json = responseResult as string;
                if (string.IsNullOrEmpty(json) || string.IsNullOrWhiteSpace(json))
                {
                    return(null);
                }

                return(JsonConvert.DeserializeObject <WeatherResponse>(json));
            }
            finally
            {
                _weatherDataType = weatherDataType;
            }
        }
        public static string ToValue(this WeatherDataResponseType self)
        {
            switch (self)
            {
            case WeatherDataResponseType.Forecast:
                return("forecast");

            case WeatherDataResponseType.Current:
                return("weather");

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
 protected override void Initialize(OptionalParameters optionalParameters)
 {
     base.Initialize(optionalParameters);
     _weatherDataType = WeatherDataResponseType.Forecast;
 }