tensor_eigen/commands/error/
mod.rs1use anyhow::{anyhow, Result};
2use num_traits::FromPrimitive;
3use tensor_amm::errors::TensorAmmError;
4use tensor_marketplace::errors::TensorMarketplaceError;
5use tensor_whitelist::errors::TensorWhitelistError;
6
7mod anchor_error;
8
9use anchor_error::AnchorErrorCode;
10
11#[derive(Debug)]
12pub struct ErrorParams {
13 pub error_code: String,
14}
15
16pub fn handle_error(args: ErrorParams) -> Result<()> {
17 let error_code = parse_error_code(&args.error_code)?;
18
19 match error_code {
20 code if TensorAmmError::from_i32(code as i32).is_some() => print_error(
21 "TensorAmmError",
22 code,
23 &TensorAmmError::from_i32(code as i32).unwrap(),
24 ),
25 code if TensorWhitelistError::from_i32(code as i32).is_some() => print_error(
26 "TensorWhitelistError",
27 code,
28 &TensorWhitelistError::from_i32(code as i32).unwrap(),
29 ),
30 code if TensorMarketplaceError::from_i32(code as i32).is_some() => print_error(
31 "TensorMarketplaceError",
32 code,
33 &TensorMarketplaceError::from_i32(code as i32).unwrap(),
34 ),
35 code if AnchorErrorCode::from_u32(code).is_some() => print_error(
36 "Anchor ErrorCode",
37 code,
38 &AnchorErrorCode::from_u32(code).unwrap(),
39 ),
40 _ => println!("Unknown error code: {}", error_code),
41 }
42
43 Ok(())
44}
45
46fn print_error<T: std::fmt::Debug>(error_type: &str, error_code: u32, error: &T) {
47 println!("{}:", error_type);
48 println!("Error Code: {}", error_code);
49 println!("Error Type: {:?}", error);
50}
51
52fn parse_error_code(input: &str) -> Result<u32> {
53 if let Some(stripped) = input.strip_prefix("0x") {
54 u32::from_str_radix(stripped, 16).map_err(|_| anyhow!("Invalid hexadecimal error code"))
56 } else {
57 input
59 .parse::<u32>()
60 .map_err(|_| anyhow!("Invalid decimal error code"))
61 }
62}