1- use std:: env:: VarError ;
1+ use serde:: { Deserialize , Serialize } ;
2+ use std:: { env:: VarError , fmt} ;
23
34/// Mpesa error stack
45#[ derive( thiserror:: Error , Debug ) ]
56pub enum MpesaError {
6- #[ error( "Authentication request failed: {0}" ) ]
7- AuthenticationError ( serde_json :: Value ) ,
7+ #[ error( "{0}" ) ]
8+ AuthenticationError ( ApiError ) ,
89 #[ error( "B2B request failed: {0}" ) ]
9- B2bError ( serde_json :: Value ) ,
10+ B2bError ( ApiError ) ,
1011 #[ error( "B2C request failed: {0}" ) ]
11- B2cError ( serde_json :: Value ) ,
12+ B2cError ( ApiError ) ,
1213 #[ error( "C2B register request failed: {0}" ) ]
13- C2bRegisterError ( serde_json :: Value ) ,
14+ C2bRegisterError ( ApiError ) ,
1415 #[ error( "C2B simulate request failed: {0}" ) ]
15- C2bSimulateError ( serde_json :: Value ) ,
16+ C2bSimulateError ( ApiError ) ,
1617 #[ error( "Account Balance request failed: {0}" ) ]
17- AccountBalanceError ( serde_json :: Value ) ,
18+ AccountBalanceError ( ApiError ) ,
1819 #[ error( "Mpesa Express request/ STK push failed: {0}" ) ]
19- MpesaExpressRequestError ( serde_json :: Value ) ,
20+ MpesaExpressRequestError ( ApiError ) ,
2021 #[ error( "Mpesa Transaction reversal failed: {0}" ) ]
21- MpesaTransactionReversalError ( serde_json :: Value ) ,
22+ MpesaTransactionReversalError ( ApiError ) ,
2223 #[ error( "Mpesa Transaction status failed: {0}" ) ]
23- MpesaTransactionStatusError ( serde_json :: Value ) ,
24+ MpesaTransactionStatusError ( ApiError ) ,
2425 #[ error( "An error has occured while performing the http request" ) ]
2526 NetworkError ( #[ from] reqwest:: Error ) ,
2627 #[ error( "An error has occured while serializig/ deserializing" ) ]
@@ -32,3 +33,20 @@ pub enum MpesaError {
3233 #[ error( "{0}" ) ]
3334 Message ( & ' static str ) ,
3435}
36+
37+ #[ derive( Debug , Serialize , Deserialize ) ]
38+ pub struct ApiError {
39+ pub request_id : String ,
40+ pub error_code : String ,
41+ pub error_message : String ,
42+ }
43+
44+ impl fmt:: Display for ApiError {
45+ fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
46+ write ! (
47+ f,
48+ "requestID: {}, errorCode:{}, errorMessage:{}" ,
49+ self . request_id, self . error_code, self . error_message
50+ )
51+ }
52+ }
0 commit comments