44 using System . Collections . Generic ;
55 using System . Net . Http ;
66 using System . Text . Json ;
7+ using System . Text . Json . Serialization ;
78 using System . Threading ;
89 using System . Threading . Tasks ;
910
@@ -33,6 +34,58 @@ internal async Task<SailthruResponse<TResponse>> SendAsync<TRequest, TResponse>(
3334 SailthruRequest < TRequest > request ,
3435 CancellationToken cancellationToken = default )
3536 where TRequest : notnull
37+ {
38+ var httpResponse = await GetHttpResponseAsync ( request , cancellationToken ) ;
39+
40+ if ( httpResponse . IsSuccessStatusCode )
41+ {
42+ string content = await httpResponse . Content . ReadAsStringAsync ( ) . ConfigureAwait ( false ) ;
43+
44+ return SailthruResponse < TResponse > . Success (
45+ await JsonSerializer . DeserializeAsync < TResponse > (
46+ await httpResponse . Content . ReadAsStreamAsync ( ) ,
47+ _jsonOptions ,
48+ cancellationToken : cancellationToken
49+ )
50+ ) ;
51+ }
52+
53+ var error = await JsonSerializer . DeserializeAsync < Error > (
54+ await httpResponse . Content . ReadAsStreamAsync ( ) ,
55+ _jsonOptions ,
56+ cancellationToken : cancellationToken )
57+ ?? new Error { Code = - 1 , Message = "Unknown error response." } ;
58+
59+ return SailthruResponse < TResponse > . Failure ( new SailthruError ( error . Code , error . Message ) ) ;
60+ }
61+
62+ internal async Task < SailthruResponse > SendAsync < TRequest > (
63+ SailthruRequest < TRequest > request ,
64+ CancellationToken cancellationToken = default )
65+ where TRequest : notnull
66+ {
67+ var httpResponse = await GetHttpResponseAsync ( request , cancellationToken ) ;
68+
69+ if ( httpResponse . IsSuccessStatusCode )
70+ {
71+ string content = await httpResponse . Content . ReadAsStringAsync ( ) . ConfigureAwait ( false ) ;
72+
73+ return SailthruResponse . Success ( ) ;
74+ }
75+
76+ var error = await JsonSerializer . DeserializeAsync < Error > (
77+ await httpResponse . Content . ReadAsStreamAsync ( ) ,
78+ _jsonOptions ,
79+ cancellationToken : cancellationToken )
80+ ?? new Error { Code = - 1 , Message = "Unknown error response." } ;
81+
82+ return SailthruResponse . Failure ( new SailthruError ( error . Code , error . Message ) ) ;
83+ }
84+
85+ async Task < HttpResponseMessage > GetHttpResponseAsync < TRequest > (
86+ SailthruRequest < TRequest > request ,
87+ CancellationToken cancellationToken )
88+ where TRequest : notnull
3689 {
3790 Ensure . IsNotNull ( request , nameof ( request ) ) ;
3891
@@ -62,22 +115,15 @@ internal async Task<SailthruResponse<TResponse>> SendAsync<TRequest, TResponse>(
62115 var httpResponse = await _http . SendAsync ( httpRequest , cancellationToken )
63116 . ConfigureAwait ( false ) ;
64117
65- if ( httpResponse . IsSuccessStatusCode )
66- {
67- string content = await httpResponse . Content . ReadAsStringAsync ( ) . ConfigureAwait ( false ) ;
68-
69- return SailthruResponse < TResponse > . Success (
70- await JsonSerializer . DeserializeAsync < TResponse > (
71- await httpResponse . Content . ReadAsStreamAsync ( ) ,
72- _jsonOptions ,
73- cancellationToken : cancellationToken
74- )
75- ) ;
76- }
77-
78- string error = await httpResponse . Content . ReadAsStringAsync ( ) . ConfigureAwait ( false ) ;
118+ return httpResponse ;
119+ }
79120
80- return SailthruResponse < TResponse > . Error ( ) ;
121+ public class Error
122+ {
123+ [ JsonPropertyName ( "error" ) ]
124+ public int Code { get ; set ; }
125+ [ JsonPropertyName ( "errormsg" ) ]
126+ public string Message { get ; set ; } = default ! ;
81127 }
82128 }
83129}
0 commit comments