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; } } }