Skip to content

Commit d321bd5

Browse files
committed
Merge pull request restsharp#427 from restsharp/haacked/423-awaitable-async
Provide Task<IRestResponse<T>> methods
2 parents a2e5bc8 + 4ffcc7c commit d321bd5

File tree

4 files changed

+108
-48
lines changed

4 files changed

+108
-48
lines changed

RestSharp.IntegrationTests/AsyncTests.cs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public void Can_Perform_GET_TaskAsync()
6969
}
7070

7171
[Fact]
72-
public void Can_Perform_GET_TaskAsync_With_Response_Type()
72+
public void Can_Perform_ExecuteGetTaskAsync_With_Response_Type()
7373
{
7474
const string baseUrl = "http://localhost:8080/";
7575
using (SimpleServer.Create(baseUrl, Handlers.Generic<ResponseHandler>()))
@@ -80,6 +80,22 @@ public void Can_Perform_GET_TaskAsync_With_Response_Type()
8080
var task = client.ExecuteTaskAsync<Response>(request);
8181
task.Wait();
8282

83+
Assert.Equal("Works!", task.Result.Data.Message);
84+
}
85+
}
86+
87+
[Fact]
88+
public void Can_Perform_GetTaskAsync_With_Response_Type()
89+
{
90+
const string baseUrl = "http://localhost:8080/";
91+
using (SimpleServer.Create(baseUrl, Handlers.Generic<ResponseHandler>()))
92+
{
93+
var client = new RestClient(baseUrl);
94+
var request = new RestRequest("success");
95+
96+
var task = client.GetTaskAsync<Response>(request);
97+
task.Wait();
98+
8399
Assert.Equal("Works!", task.Result.Message);
84100
}
85101
}
@@ -148,7 +164,7 @@ public void Handles_GET_Request_Errors_TaskAsync_With_Response_Type()
148164
var task = client.ExecuteTaskAsync<Response>(request);
149165
task.Wait();
150166

151-
Assert.Null(task.Result);
167+
Assert.Null(task.Result.Data);
152168
}
153169
}
154170

RestSharp/IRestClient.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -130,44 +130,44 @@ public interface IRestClient
130130
/// <typeparam name="T">Target deserialization type</typeparam>
131131
/// <param name="request">Request to be executed</param>
132132
/// <param name="token">The cancellation token</param>
133-
Task<T> ExecuteTaskAsync<T>(IRestRequest request, CancellationToken token);
133+
Task<IRestResponse<T>> ExecuteTaskAsync<T>(IRestRequest request, CancellationToken token);
134134

135135
/// <summary>
136136
/// Executes the request asynchronously, authenticating if needed
137137
/// </summary>
138138
/// <typeparam name="T">Target deserialization type</typeparam>
139139
/// <param name="request">Request to be executed</param>
140-
Task<T> ExecuteTaskAsync<T>(IRestRequest request);
140+
Task<IRestResponse<T>> ExecuteTaskAsync<T>(IRestRequest request);
141141

142142
/// <summary>
143143
/// Executes a GET-style request asynchronously, authenticating if needed
144144
/// </summary>
145145
/// <typeparam name="T">Target deserialization type</typeparam>
146146
/// <param name="request">Request to be executed</param>
147-
Task<T> ExecuteGetTaskAsync<T>(IRestRequest request);
147+
Task<IRestResponse<T>> ExecuteGetTaskAsync<T>(IRestRequest request);
148148

149149
/// <summary>
150150
/// Executes a GET-style request asynchronously, authenticating if needed
151151
/// </summary>
152152
/// <typeparam name="T">Target deserialization type</typeparam>
153153
/// <param name="request">Request to be executed</param>
154154
/// <param name="token">The cancellation token</param>
155-
Task<T> ExecuteGetTaskAsync<T>(IRestRequest request, CancellationToken token);
155+
Task<IRestResponse<T>> ExecuteGetTaskAsync<T>(IRestRequest request, CancellationToken token);
156156

157157
/// <summary>
158158
/// Executes a POST-style request asynchronously, authenticating if needed
159159
/// </summary>
160160
/// <typeparam name="T">Target deserialization type</typeparam>
161161
/// <param name="request">Request to be executed</param>
162-
Task<T> ExecutePostTaskAsync<T>(IRestRequest request);
162+
Task<IRestResponse<T>> ExecutePostTaskAsync<T>(IRestRequest request);
163163

164164
/// <summary>
165165
/// Executes a POST-style request asynchronously, authenticating if needed
166166
/// </summary>
167167
/// <typeparam name="T">Target deserialization type</typeparam>
168168
/// <param name="request">Request to be executed</param>
169169
/// <param name="token">The cancellation token</param>
170-
Task<T> ExecutePostTaskAsync<T>(IRestRequest request, CancellationToken token);
170+
Task<IRestResponse<T>> ExecutePostTaskAsync<T>(IRestRequest request, CancellationToken token);
171171

172172
/// <summary>
173173
/// Executes the request and callback asynchronously, authenticating if needed

RestSharp/RestClient.Async.cs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -164,9 +164,9 @@ private void DeserializeResponse<T>(IRestRequest request, Action<IRestResponse<T
164164
/// </summary>
165165
/// <typeparam name="T">Target deserialization type</typeparam>
166166
/// <param name="request">Request to be executed</param>
167-
public virtual Task<T> ExecuteGetTaskAsync<T>(IRestRequest request)
167+
public virtual Task<IRestResponse<T>> ExecuteGetTaskAsync<T>(IRestRequest request)
168168
{
169-
return this.ExecuteGetTaskAsync<T>(request, CancellationToken.None);
169+
return ExecuteGetTaskAsync<T>(request, CancellationToken.None);
170170
}
171171

172172
/// <summary>
@@ -175,7 +175,7 @@ public virtual Task<T> ExecuteGetTaskAsync<T>(IRestRequest request)
175175
/// <typeparam name="T">Target deserialization type</typeparam>
176176
/// <param name="request">Request to be executed</param>
177177
/// <param name="token">The cancellation token</param>
178-
public virtual Task<T> ExecuteGetTaskAsync<T>(IRestRequest request, CancellationToken token)
178+
public virtual Task<IRestResponse<T>> ExecuteGetTaskAsync<T>(IRestRequest request, CancellationToken token)
179179
{
180180
if (request == null)
181181
{
@@ -191,9 +191,9 @@ public virtual Task<T> ExecuteGetTaskAsync<T>(IRestRequest request, Cancellation
191191
/// </summary>
192192
/// <typeparam name="T">Target deserialization type</typeparam>
193193
/// <param name="request">Request to be executed</param>
194-
public virtual Task<T> ExecutePostTaskAsync<T>(IRestRequest request)
194+
public virtual Task<IRestResponse<T>> ExecutePostTaskAsync<T>(IRestRequest request)
195195
{
196-
return this.ExecutePostTaskAsync<T>(request, CancellationToken.None);
196+
return ExecutePostTaskAsync<T>(request, CancellationToken.None);
197197
}
198198

199199
/// <summary>
@@ -202,7 +202,7 @@ public virtual Task<T> ExecutePostTaskAsync<T>(IRestRequest request)
202202
/// <typeparam name="T">Target deserialization type</typeparam>
203203
/// <param name="request">Request to be executed</param>
204204
/// <param name="token">The cancellation token</param>
205-
public virtual Task<T> ExecutePostTaskAsync<T>(IRestRequest request, CancellationToken token)
205+
public virtual Task<IRestResponse<T>> ExecutePostTaskAsync<T>(IRestRequest request, CancellationToken token)
206206
{
207207
if (request == null)
208208
{
@@ -218,7 +218,7 @@ public virtual Task<T> ExecutePostTaskAsync<T>(IRestRequest request, Cancellatio
218218
/// </summary>
219219
/// <typeparam name="T">Target deserialization type</typeparam>
220220
/// <param name="request">Request to be executed</param>
221-
public virtual Task<T> ExecuteTaskAsync<T>(IRestRequest request)
221+
public virtual Task<IRestResponse<T>> ExecuteTaskAsync<T>(IRestRequest request)
222222
{
223223
return ExecuteTaskAsync<T>(request, CancellationToken.None);
224224
}
@@ -229,18 +229,18 @@ public virtual Task<T> ExecuteTaskAsync<T>(IRestRequest request)
229229
/// <typeparam name="T">Target deserialization type</typeparam>
230230
/// <param name="request">Request to be executed</param>
231231
/// <param name="token">The cancellation token</param>
232-
public virtual Task<T> ExecuteTaskAsync<T>(IRestRequest request, CancellationToken token)
232+
public virtual Task<IRestResponse<T>> ExecuteTaskAsync<T>(IRestRequest request, CancellationToken token)
233233
{
234234
if (request == null)
235235
{
236236
throw new ArgumentNullException("request");
237237
}
238238

239-
var taskCompletionSource = new TaskCompletionSource<T>();
239+
var taskCompletionSource = new TaskCompletionSource<IRestResponse<T>>();
240240

241241
try
242242
{
243-
var async = this.ExecuteAsync<T>(request, (response, _) =>
243+
var async = ExecuteAsync<T>(request, (response, _) =>
244244
{
245245
if (token.IsCancellationRequested)
246246
{
@@ -256,7 +256,7 @@ public virtual Task<T> ExecuteTaskAsync<T>(IRestRequest request, CancellationTok
256256
}
257257
else
258258
{
259-
taskCompletionSource.TrySetResult(response.Data);
259+
taskCompletionSource.TrySetResult(response);
260260
}
261261
});
262262

RestSharp/RestClientExtensions.cs

Lines changed: 73 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Linq;
3+
using System.Threading.Tasks;
34

45
namespace RestSharp
56
{
@@ -106,11 +107,54 @@ public static RestRequestAsyncHandle PatchAsync(this IRestClient client, IRestRe
106107
return client.ExecuteAsync(request, callback);
107108
}
108109

109-
public static RestRequestAsyncHandle DeleteAsync(this IRestClient client, IRestRequest request, Action<IRestResponse, RestRequestAsyncHandle> callback)
110-
{
111-
request.Method = Method.DELETE;
112-
return client.ExecuteAsync(request, callback);
113-
}
110+
public static RestRequestAsyncHandle DeleteAsync(this IRestClient client, IRestRequest request, Action<IRestResponse, RestRequestAsyncHandle> callback)
111+
{
112+
request.Method = Method.DELETE;
113+
return client.ExecuteAsync(request, callback);
114+
}
115+
116+
#if NET4
117+
public static Task<T> GetTaskAsync<T>(this IRestClient client, IRestRequest request) where T : new()
118+
{
119+
return client.ExecuteGetTaskAsync<T>(request).ContinueWith(x => x.Result.Data);
120+
}
121+
122+
public static Task<T> PostTaskAsync<T>(this IRestClient client, IRestRequest request) where T : new()
123+
{
124+
return client.ExecutePostTaskAsync<T>(request).ContinueWith(x => x.Result.Data);
125+
}
126+
127+
public static Task<T> PutTaskAsync<T>(this IRestClient client, IRestRequest request) where T : new()
128+
{
129+
request.Method = Method.PUT;
130+
return client.ExecuteTaskAsync<T>(request).ContinueWith(x => x.Result.Data);
131+
}
132+
133+
public static Task<T> HeadTaskAsync<T>(this IRestClient client, IRestRequest request) where T : new()
134+
{
135+
request.Method = Method.HEAD;
136+
return client.ExecuteTaskAsync<T>(request).ContinueWith(x => x.Result.Data);
137+
}
138+
139+
public static Task<T> OptionsTaskAsync<T>(this IRestClient client, IRestRequest request) where T : new()
140+
{
141+
request.Method = Method.OPTIONS;
142+
return client.ExecuteTaskAsync<T>(request).ContinueWith(x => x.Result.Data);
143+
}
144+
145+
public static Task<T> PatchTaskAsync<T>(this IRestClient client, IRestRequest request) where T : new()
146+
{
147+
request.Method = Method.PATCH;
148+
return client.ExecuteTaskAsync<T>(request).ContinueWith(x => x.Result.Data);
149+
}
150+
151+
public static Task<T> DeleteTaskAsync<T>(this IRestClient client, IRestRequest request) where T : new()
152+
{
153+
request.Method = Method.DELETE;
154+
return client.ExecuteTaskAsync<T>(request).ContinueWith(x => x.Result.Data);
155+
}
156+
#endif
157+
114158
#if FRAMEWORK
115159
public static IRestResponse<T> Get<T>(this IRestClient client, IRestRequest request) where T : new()
116160
{
@@ -148,11 +192,11 @@ public static RestRequestAsyncHandle DeleteAsync(this IRestClient client, IRestR
148192
return client.Execute<T>(request);
149193
}
150194

151-
public static IRestResponse<T> Delete<T>(this IRestClient client, IRestRequest request) where T : new()
152-
{
153-
request.Method = Method.DELETE;
154-
return client.Execute<T>(request);
155-
}
195+
public static IRestResponse<T> Delete<T>(this IRestClient client, IRestRequest request) where T : new()
196+
{
197+
request.Method = Method.DELETE;
198+
return client.Execute<T>(request);
199+
}
156200

157201
public static IRestResponse Get(this IRestClient client, IRestRequest request)
158202
{
@@ -190,11 +234,11 @@ public static IRestResponse Patch(this IRestClient client, IRestRequest request)
190234
return client.Execute(request);
191235
}
192236

193-
public static IRestResponse Delete(this IRestClient client, IRestRequest request)
194-
{
195-
request.Method = Method.DELETE;
196-
return client.Execute(request);
197-
}
237+
public static IRestResponse Delete(this IRestClient client, IRestRequest request)
238+
{
239+
request.Method = Method.DELETE;
240+
return client.Execute(request);
241+
}
198242
#endif
199243

200244
/// <summary>
@@ -214,20 +258,20 @@ public static void AddDefaultParameter(this IRestClient restClient, Parameter p)
214258
restClient.DefaultParameters.Add(p);
215259
}
216260

217-
/// <summary>
218-
/// Removes a parameter from the default parameters that are used on every request made with this client instance
219-
/// </summary>
220-
/// <param name="restClient">The IRestClient instance</param>
221-
/// <param name="name">The name of the parameter that needs to be removed</param>
222-
/// <returns></returns>
223-
public static void RemoveDefaultParameter(this IRestClient restClient, string name)
224-
{
225-
var parameter = restClient.DefaultParameters.SingleOrDefault(p => p.Name.Equals(name, StringComparison.OrdinalIgnoreCase));
226-
if (parameter != null)
227-
{
228-
restClient.DefaultParameters.Remove(parameter);
229-
}
230-
}
261+
/// <summary>
262+
/// Removes a parameter from the default parameters that are used on every request made with this client instance
263+
/// </summary>
264+
/// <param name="restClient">The IRestClient instance</param>
265+
/// <param name="name">The name of the parameter that needs to be removed</param>
266+
/// <returns></returns>
267+
public static void RemoveDefaultParameter(this IRestClient restClient, string name)
268+
{
269+
var parameter = restClient.DefaultParameters.SingleOrDefault(p => p.Name.Equals(name, StringComparison.OrdinalIgnoreCase));
270+
if (parameter != null)
271+
{
272+
restClient.DefaultParameters.Remove(parameter);
273+
}
274+
}
231275

232276
/// <summary>
233277
/// Adds a HTTP parameter (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT)

0 commit comments

Comments
 (0)