tensor_eigen/commands/error/
mod.rs

1use 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        // Parse hexadecimal
55        u32::from_str_radix(stripped, 16).map_err(|_| anyhow!("Invalid hexadecimal error code"))
56    } else {
57        // Parse decimal
58        input
59            .parse::<u32>()
60            .map_err(|_| anyhow!("Invalid decimal error code"))
61    }
62}