1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
use thiserror::Error;
pub type CliTypedResult<T> = Result<T, CliError>;
#[derive(Debug, Error)]
pub enum CliError {
#[error("Aborted command")]
AbortedError,
#[error("API error: {0}")]
ApiError(String),
#[error("Error (de)serializing '{0}': {1}")]
BCS(&'static str, #[source] bcs::Error),
#[error("Invalid arguments: {0}")]
CommandArgumentError(String),
#[error("Unable to load config: {0} {1}")]
ConfigLoadError(String, String),
#[error("Unable to find config {0}, have you run `aptos init`?")]
ConfigNotFoundError(String),
#[error("Error accessing '{0}': {1}")]
IO(String, #[source] std::io::Error),
#[error("Move compilation failed: {0}")]
MoveCompilationError(String),
#[error("Move unit tests failed: {0}")]
MoveTestError(String),
#[error("Unable to parse '{0}': error: {1}")]
UnableToParse(&'static str, String),
#[error("Unable to read file '{0}', error: {1}")]
UnableToReadFile(String, String),
#[error("Unexpected error: {0}")]
UnexpectedError(String),
}
impl CliError {
pub fn to_str(&self) -> &'static str {
match self {
CliError::AbortedError => "AbortedError",
CliError::ApiError(_) => "ApiError",
CliError::BCS(_, _) => "BCS",
CliError::CommandArgumentError(_) => "CommandArgumentError",
CliError::ConfigLoadError(_, _) => "ConfigLoadError",
CliError::ConfigNotFoundError(_) => "ConfigNotFoundError",
CliError::IO(_, _) => "IO",
CliError::MoveCompilationError(_) => "MoveCompilationError",
CliError::MoveTestError(_) => "MoveTestError",
CliError::UnableToParse(_, _) => "UnableToParse",
CliError::UnableToReadFile(_, _) => "UnableToReadFile",
CliError::UnexpectedError(_) => "UnexpectedError",
}
}
}
impl From<serde_yaml::Error> for CliError {
fn from(e: serde_yaml::Error) -> Self {
CliError::UnexpectedError(e.to_string())
}
}
impl From<base64::DecodeError> for CliError {
fn from(e: base64::DecodeError) -> Self {
CliError::UnexpectedError(e.to_string())
}
}
impl From<std::string::FromUtf8Error> for CliError {
fn from(e: std::string::FromUtf8Error) -> Self {
CliError::UnexpectedError(e.to_string())
}
}
impl From<aptos_crypto::CryptoMaterialError> for CliError {
fn from(e: aptos_crypto::CryptoMaterialError) -> Self {
CliError::UnexpectedError(e.to_string())
}
}
impl From<hex::FromHexError> for CliError {
fn from(e: hex::FromHexError) -> Self {
CliError::UnexpectedError(e.to_string())
}
}
impl From<anyhow::Error> for CliError {
fn from(e: anyhow::Error) -> Self {
CliError::UnexpectedError(e.to_string())
}
}
impl From<bcs::Error> for CliError {
fn from(e: bcs::Error) -> Self {
CliError::UnexpectedError(e.to_string())
}
}