static DiscogsApiClient CreateDiscogsApiClient(string discogsApiToken)
        {
            var credentials = DiscogsApiClientCredentials.FromToken(discogsApiToken);
            var environment = DiscogsApiClientEnvironment.CreateDefault(credentials);

            return(DiscogsApiClient.Create(environment));
        }
        public static async Task <T> Get <T>(
            this DiscogsApiClientEnvironment environment,
            string url,
            CancellationToken cancellationToken = default
            )
        {
            var httpMessageInvoker = environment.HttpMessageInvoker;
            var resp = await httpMessageInvoker.SendAsync(
                new HttpRequestMessage(HttpMethod.Get, url),
                cancellationToken
                ).ConfigureAwait(false);

            var json = await resp.Content.ReadAsStringAsync().ConfigureAwait(false);

            var error = DeserializeJson <Error>(json);

            if (resp.StatusCode == HttpStatusCode.InternalServerError)
            {
                throw new DiscogsApiServerErrorException(error.Message);
            }

            if (resp.StatusCode == HttpStatusCode.NotFound)
            {
                throw new DiscorgsApiNotFoundException(error.Message);
            }

            if (error.Message != null)
            {
                if (error.Message == DiscogsApiQuotaException.ApiErrorMessage)
                {
                    throw new DiscogsApiQuotaException();
                }

                // TODO: rename the exception
                throw new DiscogsApiServerErrorException(error.Message);
            }

            return(DeserializeJson <T>(json));
        }