/// <summary>
        /// Invokes <see cref="SearchAsync(string, AutocompleteRequest)"/> with the given <paramref name="autocomleteRequest"/> and caches the results
        /// <param name="input">Search string</param>
        /// <param name="request">Autocomplete request specifying additional components in the search Url to be generated</param>
        /// </summary>
        public async Task <OperationResult <PlaceResponse> > AutocompleteAsync(string input, AutocompleteRequest autocomleteRequest = null)
        {
            //Get cached results
            var result = _cachingProvider.GetAutocompleteResult(input);

            if (result != null)
            {
                return(OperationResult <PlaceResponse> .AsSuccess(result));
            }

            OperationResult <PlaceResponse> searchResult;

            if (autocomleteRequest != null)
            {
                searchResult = await SearchAsync(input, autocomleteRequest);
            }
            else
            {
                searchResult = await SearchAsync(input, new AutocompleteRequest()
                {
                    Region = "au"
                });
            }


            if (!searchResult.IsSuccessful)
            {
                return(OperationResult <PlaceResponse> .AsFailure("Search response result is null"));
            }

            _cachingProvider.StoreAutocompleteResult(input, searchResult.Result);

            return(searchResult);
        }
        /// <summary>
        /// Invokes <see cref="SearchAsync(string, AutocompleteRequest)"/> with the given <paramref name="autocomleteRequest"/> and caches the results
        /// <param name="input">Search string</param>
        /// <param name="request">Autocomplete request specifying additional components in the search Url to be generated</param>
        /// </summary>
        public async Task <OperationResult <PlaceResponse> > AutocompleteAsync(string input, AutocompleteRequest autocomleteRequest)
        {
            //Get cached results
            var result = _cachingProvider.GetAutocompleteResult(input);

            if (result != null)
            {
                return(OperationResult <PlaceResponse> .AsSuccess(result));
            }

            var searchResult = await SearchAsync(input, new AutocompleteRequest
            {
                Region = "au"
            })
                               .ContinueWith(response =>
            {
                if (response.Result == null)
                {
                    return(OperationResult <PlaceResponse> .AsFailure("Search response result is null"));
                }
                return(response.Result);
            })
                               .ConfigureAwait(false);

            if (searchResult.IsSuccessful)
            {
                _cachingProvider.StoreAutocompleteResult(input, searchResult.Result);
            }

            return(searchResult);
        }