public async Task <GitHubUser> FindUser(string criteria)
        {
            string uri = $"/users/{criteria}";

            HttpResponseMessage getUserCall = await _client.Get(uri);

            try
            {
                getUserCall.EnsureSuccessStatusCode();

                string rawUserResponse = await getUserCall.Content.ReadAsStringAsync();

                GitHubUser user = JsonConvert.DeserializeObject <GitHubUser>(rawUserResponse);

                List <GitHubRepository> repositories = await GetUserRepositories(criteria);

                user.Repositories = repositories;

                return(user);
            }
            catch (Exception exception)
            {
                switch (getUserCall.StatusCode)
                {
                case HttpStatusCode.NotFound:
                    throw new GitHubUserNotFoundException("GitHub user not found", exception);

                case HttpStatusCode.ServiceUnavailable:
                    throw new SearchFunctionalityNotAvailableException("Find functionality is not available at the minute", exception);

                default:
                    throw exception;
                }
            }
        }