using System.Text.Json; namespace Discord.API.Rest; internal class RestClient{ private HttpClient httpClient; public RestClient(string base_url, string api_key){ httpClient = new HttpClient(){ BaseAddress=new Uri(base_url) }; httpClient.DefaultRequestHeaders.Add("Authorization", $"Bot {api_key}"); httpClient.DefaultRequestHeaders.Add("User-Agent", $"DiscordBot ({Discord.API.StaticProperties.LibraryWebsite}, {Discord.API.StaticProperties.LibraryVersion})"); } public async Task> GetGateway() => await Get("gateway", s => JsonSerializer.Deserialize(s, SourceGenerationContext.Default.GetGatewayResponse)); private async Task> Get(string url, Func deserializer){ try{ HttpResponseMessage resp = await httpClient.GetAsync(url); if(resp.IsSuccessStatusCode){ return new RestSuccessResponse( deserializer.Invoke(await resp.Content.ReadAsStringAsync()), resp.StatusCode ); }else{ return new RestErrorResponse( JsonSerializer.Deserialize(await resp.Content.ReadAsStringAsync(), SourceGenerationContext.Default.RestError), resp.StatusCode ); } }catch (Exception ex){ return new RestFailResponse(ex); } } }