Skip to content

Commit c0499cf

Browse files
sguryevChrisPulman
andauthored
Issue 1671: Add MemberNotNullWhen attribute for Content property in IApiResponse<T> (#1672)
* Issue 1671: Add MemberNotNullWhen attribute for Content property in IApiResponse<T> interface * Fix missing IApiResponse implementation for ApiResponse<T> class * Update APIResponse Update APIResponse as MemberNotNullWhen needs to be in same interface as members --------- Co-authored-by: Chris Pulman <chris.pulman@yahoo.com>
1 parent aa78fc0 commit c0499cf

File tree

1 file changed

+19
-11
lines changed

1 file changed

+19
-11
lines changed

Refit/ApiResponse.cs

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ internal static T Create<T, TBody>(
2929
/// Implementation of <see cref="IApiResponse{T}"/> that provides additional functionalities.
3030
/// </summary>
3131
/// <typeparam name="T"></typeparam>
32-
public sealed class ApiResponse<T> : IApiResponse<T>
32+
public sealed class ApiResponse<T> : IApiResponse<T>, IApiResponse
3333
{
3434
readonly HttpResponseMessage response;
3535
bool disposed;
@@ -60,6 +60,8 @@ public ApiResponse(
6060
/// </summary>
6161
public T? Content { get; }
6262

63+
object? IApiResponse.Content => Content;
64+
6365
/// <summary>
6466
/// Refit settings used to send the request.
6567
/// </summary>
@@ -163,14 +165,29 @@ public interface IApiResponse<out T> : IApiResponse
163165
/// <summary>
164166
/// Deserialized request content as <typeparamref name="T"/>.
165167
/// </summary>
166-
T? Content { get; }
168+
new T? Content { get; }
167169
}
168170

169171
/// <summary>
170172
/// Base interface used to represent an API response.
171173
/// </summary>
172174
public interface IApiResponse : IDisposable
173175
{
176+
/// <summary>
177+
/// Indicates whether the request was successful.
178+
/// </summary>
179+
#if NET6_0_OR_GREATER
180+
[MemberNotNullWhen(true, nameof(ContentHeaders))]
181+
[MemberNotNullWhen(false, nameof(Error))]
182+
[MemberNotNullWhen(true, nameof(Content))]
183+
#endif
184+
bool IsSuccessStatusCode { get; }
185+
186+
/// <summary>
187+
/// Deserialized request content as an object.
188+
/// </summary>
189+
object? Content { get; }
190+
174191
/// <summary>
175192
/// HTTP response headers.
176193
/// </summary>
@@ -181,15 +198,6 @@ public interface IApiResponse : IDisposable
181198
/// </summary>
182199
HttpContentHeaders? ContentHeaders { get; }
183200

184-
/// <summary>
185-
/// Indicates whether the request was successful.
186-
/// </summary>
187-
#if NET6_0_OR_GREATER
188-
[MemberNotNullWhen(true, nameof(ContentHeaders))]
189-
[MemberNotNullWhen(false, nameof(Error))]
190-
#endif
191-
bool IsSuccessStatusCode { get; }
192-
193201
/// <summary>
194202
/// HTTP response status code.
195203
/// </summary>

0 commit comments

Comments
 (0)