private RestRequest FromRestCall <TBody, TResponse>(IJiraRestCall <TBody, TResponse> restCall) { var url = $"/rest/api/{(int)restCall.Version}/{restCall.Endpoint}"; var req = new RestRequest(url, restCall.Method, DataFormat.Json); restCall.Body.MatchSome(e => req.AddJsonBody(e)); return(req); }
/// <summary> /// Execute request /// </summary> /// <param name="restCall"></param> /// <param name="cancellation"></param> /// <typeparam name="T"></typeparam> /// <returns></returns> public Task <IRestResponse> ExecuteRawRequestAsync <TBody, TResponse>( IJiraRestCall <TBody, TResponse> restCall, CancellationToken cancellation = default ) { var req = FromRestCall(restCall); return(_client.ExecuteAsync(req, cancellation)); }
/// <summary> /// Execute request and deserialize response /// </summary> /// <param name="restCall"></param> /// <param name="cancellation"></param> /// <typeparam name="T"></typeparam> /// <returns></returns> public async Task <Option <TResponse> > ExecuteAsync <TBody, TResponse>( IJiraRestCall <TBody, TResponse> restCall, CancellationToken cancellation = default ) { var res = await ExecuteRawRequestAsync(restCall, cancellation); if (!res.IsSuccessful) { return(None <TResponse>()); } try { return(Some(JsonConvert.DeserializeObject <TResponse>(res.Content)).NotNull()); } catch (Exception e) { Console.WriteLine(e.Message); return(None <TResponse>()); } }