Skip to content

Commit c952138

Browse files
committed
Edited the IRestClient to have the execute functions return IRestResponse
instead of the derived type to allow for more natural mocking without having to cast the mock object and added an extension method for converting responses to generic reponses modified: RestSharp/Deserializers/DotNetXmlDeserializer.cs modified: RestSharp/Deserializers/IDeserializer.cs modified: RestSharp/Deserializers/JsonDeserializer.cs modified: RestSharp/Deserializers/XmlAttributeDeserializer.cs modified: RestSharp/Deserializers/XmlDeserializer.cs new file: RestSharp/Extensions/ResponseExtensions.cs modified: RestSharp/IRestClient.cs modified: RestSharp/RestClient.Async.cs modified: RestSharp/RestClient.Sync.cs modified: RestSharp/RestClient.cs modified: RestSharp/RestClientExtensions.cs modified: RestSharp/RestResponse.cs modified: RestSharp/RestSharp.csproj
1 parent 86b31f9 commit c952138

13 files changed

+55
-24
lines changed

RestSharp/Deserializers/DotNetXmlDeserializer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public class DotNetXmlDeserializer : IDeserializer
3030

3131
public string RootElement { get; set; }
3232

33-
public T Deserialize<T>(RestResponse response) where T : new()
33+
public T Deserialize<T>(IRestResponse response) where T : new()
3434
{
3535
if (string.IsNullOrEmpty(response.Content))
3636
{

RestSharp/Deserializers/IDeserializer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ namespace RestSharp.Deserializers
1818
{
1919
public interface IDeserializer
2020
{
21-
T Deserialize<T>(RestResponse response) where T : new();
21+
T Deserialize<T>(IRestResponse response) where T : new();
2222
string RootElement { get; set; }
2323
string Namespace { get; set; }
2424
string DateFormat { get; set; }

RestSharp/Deserializers/JsonDeserializer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public JsonDeserializer()
3737
Culture = CultureInfo.InvariantCulture;
3838
}
3939

40-
public T Deserialize<T>(RestResponse response) where T : new()
40+
public T Deserialize<T>(IRestResponse response) where T : new()
4141
{
4242
var target = new T();
4343

RestSharp/Deserializers/XmlAttributeDeserializer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public XmlAttributeDeserializer()
3737
Culture = CultureInfo.InvariantCulture;
3838
}
3939

40-
public T Deserialize<T>(RestResponse response) where T : new()
40+
public T Deserialize<T>(IRestResponse response) where T : new()
4141
{
4242
if (response.Content == null)
4343
return default(T);

RestSharp/Deserializers/XmlDeserializer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public XmlDeserializer()
3838
Culture = CultureInfo.InvariantCulture;
3939
}
4040

41-
public T Deserialize<T>(RestResponse response) where T : new()
41+
public T Deserialize<T>(IRestResponse response) where T : new()
4242
{
4343
if (string.IsNullOrEmpty( response.Content ))
4444
return default(T);
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
6+
namespace RestSharp.Extensions
7+
{
8+
public static class ResponseExtensions
9+
{
10+
public static IRestResponse<T> toAsyncResponse<T>(this IRestResponse response) where T : new()
11+
{
12+
return new RestResponse<T>
13+
{
14+
ContentEncoding = response.ContentEncoding,
15+
ContentLength = response.ContentLength,
16+
ContentType = response.ContentType,
17+
Cookies = response.Cookies,
18+
ErrorMessage = response.ErrorMessage,
19+
Headers = response.Headers,
20+
RawBytes = response.RawBytes,
21+
ResponseStatus = response.ResponseStatus,
22+
ResponseUri = response.ResponseUri,
23+
Server = response.Server,
24+
StatusCode = response.StatusCode,
25+
StatusDescription = response.StatusDescription
26+
};
27+
}
28+
}
29+
}

RestSharp/IRestClient.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,20 +58,20 @@ public interface IRestClient
5858
///
5959
/// </summary>
6060
/// <param name="request"></param>
61-
RestRequestAsyncHandle ExecuteAsync(IRestRequest request, Action<RestResponse, RestRequestAsyncHandle> callback);
61+
RestRequestAsyncHandle ExecuteAsync(IRestRequest request, Action<IRestResponse, RestRequestAsyncHandle> callback);
6262
/// <summary>
6363
///
6464
/// </summary>
6565
/// <param name="request"></param>
66-
RestRequestAsyncHandle ExecuteAsync<T>(IRestRequest request, Action<RestResponse<T>, RestRequestAsyncHandle> callback) where T : new();
66+
RestRequestAsyncHandle ExecuteAsync<T>(IRestRequest request, Action<IRestResponse<T>, RestRequestAsyncHandle> callback) where T : new();
6767

6868
#if FRAMEWORK
6969
/// <summary>
7070
/// X509CertificateCollection to be sent with request
7171
/// </summary>
7272
X509CertificateCollection ClientCertificates { get; set; }
73-
RestResponse Execute(IRestRequest request);
74-
RestResponse<T> Execute<T>(IRestRequest request) where T : new();
73+
IRestResponse Execute(IRestRequest request);
74+
IRestResponse<T> Execute<T>(IRestRequest request) where T : new();
7575

7676
IWebProxy Proxy { get; set; }
7777
#endif

RestSharp/RestClient.Async.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public partial class RestClient
3030
/// </summary>
3131
/// <param name="request">Request to be executed</param>
3232
/// <param name="callback">Callback function to be executed upon completion providing access to the async handle.</param>
33-
public virtual RestRequestAsyncHandle ExecuteAsync(IRestRequest request, Action<RestResponse, RestRequestAsyncHandle> callback)
33+
public virtual RestRequestAsyncHandle ExecuteAsync(IRestRequest request, Action<IRestResponse, RestRequestAsyncHandle> callback)
3434
{
3535
var http = HttpFactory.Create();
3636
AuthenticateIfNeeded(this, request);
@@ -82,7 +82,7 @@ public virtual RestRequestAsyncHandle ExecuteAsync(IRestRequest request, Action<
8282
return asyncHandle;
8383
}
8484

85-
private void ProcessResponse(HttpResponse httpResponse, RestRequestAsyncHandle asyncHandle, Action<RestResponse, RestRequestAsyncHandle> callback)
85+
private void ProcessResponse(HttpResponse httpResponse, RestRequestAsyncHandle asyncHandle, Action<IRestResponse, RestRequestAsyncHandle> callback)
8686
{
8787
var restResponse = ConvertToRestResponse(httpResponse);
8888
callback(restResponse, asyncHandle);
@@ -94,11 +94,11 @@ private void ProcessResponse(HttpResponse httpResponse, RestRequestAsyncHandle a
9494
/// <typeparam name="T">Target deserialization type</typeparam>
9595
/// <param name="request">Request to be executed</param>
9696
/// <param name="callback">Callback function to be executed upon completion</param>
97-
public virtual RestRequestAsyncHandle ExecuteAsync<T>(IRestRequest request, Action<RestResponse<T>, RestRequestAsyncHandle> callback) where T : new()
97+
public virtual RestRequestAsyncHandle ExecuteAsync<T>(IRestRequest request, Action<IRestResponse<T>, RestRequestAsyncHandle> callback) where T : new()
9898
{
9999
return ExecuteAsync(request, (response, asyncHandle) =>
100100
{
101-
var restResponse = (RestResponse<T>)response;
101+
var restResponse = (IRestResponse<T>)response;
102102
if (response.ResponseStatus != ResponseStatus.Aborted)
103103
{
104104
restResponse = Deserialize<T>(request, response);

RestSharp/RestClient.Sync.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,15 @@ public byte[] DownloadData(IRestRequest request)
3333
/// </summary>
3434
/// <param name="request">Request to be executed</param>
3535
/// <returns>RestResponse</returns>
36-
public virtual RestResponse Execute(IRestRequest request)
36+
public virtual IRestResponse Execute(IRestRequest request)
3737
{
3838
AuthenticateIfNeeded(this, request);
3939

4040
// add Accept header based on registered deserializers
4141
var accepts = string.Join(", ", AcceptTypes.ToArray());
4242
AddDefaultParameter("Accept", accepts, ParameterType.HttpHeader);
4343

44-
var response = new RestResponse();
44+
IRestResponse response = new RestResponse();
4545
try
4646
{
4747
response = GetResponse(request);
@@ -65,13 +65,13 @@ public virtual RestResponse Execute(IRestRequest request)
6565
/// <typeparam name="T">Target deserialization type</typeparam>
6666
/// <param name="request">Request to execute</param>
6767
/// <returns>RestResponse[[T]] with deserialized data in Data property</returns>
68-
public virtual RestResponse<T> Execute<T>(IRestRequest request) where T : new()
68+
public virtual IRestResponse<T> Execute<T>(IRestRequest request) where T : new()
6969
{
7070
var raw = Execute(request);
7171
return Deserialize<T>(request, raw);
7272
}
7373

74-
private RestResponse GetResponse(IRestRequest request)
74+
private IRestResponse GetResponse(IRestRequest request)
7575
{
7676
var http = HttpFactory.Create();
7777

RestSharp/RestClient.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -488,7 +488,7 @@ private RestResponse ConvertToRestResponse(HttpResponse httpResponse)
488488
return restResponse;
489489
}
490490

491-
private RestResponse<T> Deserialize<T>(IRestRequest request, RestResponse raw) where T : new()
491+
private IRestResponse<T> Deserialize<T>(IRestRequest request, IRestResponse raw) where T : new()
492492
{
493493
request.OnBeforeDeserialization(raw);
494494

@@ -497,10 +497,10 @@ private RestResponse ConvertToRestResponse(HttpResponse httpResponse)
497497
handler.DateFormat = request.DateFormat;
498498
handler.Namespace = request.XmlNamespace;
499499

500-
var response = new RestResponse<T>();
500+
IRestResponse<T> response = new RestResponse<T>();
501501
try
502502
{
503-
response = (RestResponse<T>)raw;
503+
response = raw.toAsyncResponse<T>();
504504
response.Data = handler.Deserialize<T>(raw);
505505
}
506506
catch (Exception ex)

0 commit comments

Comments
 (0)