@@ -12,10 +12,10 @@ where
1212
1313 /// Handles a generic error from the WorkOS API by converting it into a
1414 /// [`WorkOsError::RequestError`] response.
15- fn handle_generic_error < E > ( self ) -> WorkOsResult < Self , E > ;
15+ async fn handle_generic_error < E > ( self ) -> WorkOsResult < Self , E > ;
1616
1717 /// Handles an unauthorized or generic error from the WorkOS API.
18- fn handle_unauthorized_or_generic_error < E > ( self ) -> WorkOsResult < Self , E > ;
18+ async fn handle_unauthorized_or_generic_error < E > ( self ) -> WorkOsResult < Self , E > ;
1919}
2020
2121impl ResponseExt for Response {
@@ -27,14 +27,33 @@ impl ResponseExt for Response {
2727 }
2828 }
2929
30- fn handle_generic_error < E > ( self ) -> WorkOsResult < Self , E > {
31- match self . error_for_status ( ) {
32- Ok ( response) => Ok ( response) ,
33- Err ( err) => Err ( WorkOsError :: RequestError ( err) ) ,
30+ async fn handle_generic_error < E > ( self ) -> WorkOsResult < Self , E > {
31+ let status = self . status ( ) ;
32+ if status. is_client_error ( ) || status. is_server_error ( ) {
33+ if self
34+ . headers ( )
35+ . get ( "content-type" )
36+ . and_then ( |value| value. to_str ( ) . ok ( ) )
37+ . is_some_and ( |value| value. to_lowercase ( ) . starts_with ( "application/json" ) )
38+ {
39+ match self . json ( ) . await {
40+ Ok ( value) => Err ( WorkOsError :: ApiError ( value) ) ,
41+ Err ( err) => Err ( WorkOsError :: RequestError ( err) ) ,
42+ }
43+ } else {
44+ match self . error_for_status ( ) {
45+ Ok ( response) => Ok ( response) ,
46+ Err ( err) => Err ( WorkOsError :: RequestError ( err) ) ,
47+ }
48+ }
49+ } else {
50+ Ok ( self )
3451 }
3552 }
3653
37- fn handle_unauthorized_or_generic_error < E > ( self ) -> WorkOsResult < Self , E > {
38- self . handle_unauthorized_error ( ) ?. handle_generic_error ( )
54+ async fn handle_unauthorized_or_generic_error < E > ( self ) -> WorkOsResult < Self , E > {
55+ self . handle_unauthorized_error ( ) ?
56+ . handle_generic_error ( )
57+ . await
3958 }
4059}
0 commit comments