adjust AquamarineVM error mapping

This commit is contained in:
vms 2020-11-01 10:16:21 +03:00
parent d52eb4432f
commit f4680075f4
2 changed files with 97 additions and 108 deletions

62
Cargo.lock generated
View File

@ -2,11 +2,11 @@
# It is not intended for manual editing. # It is not intended for manual editing.
[[package]] [[package]]
name = "addr2line" name = "addr2line"
version = "0.13.0" version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b6a2d3371669ab3ca9797670853d61402b03d0b4b9ebf33d677dfa720203072" checksum = "7c0929d69e78dd9bf5408269919fcbcaeb2e35e5d43e5815517cdc6a8e11a423"
dependencies = [ dependencies = [
"gimli 0.22.0", "gimli 0.23.0",
] ]
[[package]] [[package]]
@ -96,9 +96,9 @@ checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
[[package]] [[package]]
name = "backtrace" name = "backtrace"
version = "0.3.53" version = "0.3.54"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "707b586e0e2f247cbde68cdd2c3ce69ea7b7be43e1c5b426e37c9319c4b9838e" checksum = "2baad346b2d4e94a24347adeee9c7a93f412ee94b9cc26e5b59dea23848e9f28"
dependencies = [ dependencies = [
"addr2line", "addr2line",
"cfg-if 1.0.0", "cfg-if 1.0.0",
@ -727,20 +727,20 @@ dependencies = [
[[package]] [[package]]
name = "fluence" name = "fluence"
version = "0.2.8" version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "git+https://github.com/fluencelabs/rust-sdk#a6c587db0b6f22c3d3af81f10b187f148f8e9d30"
checksum = "12efe44782ef6842b824dd281f79f808597a2c280d1facc06bb62b9cf8fbc2ef"
dependencies = [ dependencies = [
"fluence-sdk-macro 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "fluence-sdk-macro 0.2.8 (git+https://github.com/fluencelabs/rust-sdk)",
"fluence-sdk-main 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "fluence-sdk-main 0.2.8 (git+https://github.com/fluencelabs/rust-sdk)",
] ]
[[package]] [[package]]
name = "fluence" name = "fluence"
version = "0.2.8" version = "0.2.8"
source = "git+https://github.com/fluencelabs/rust-sdk#a6c587db0b6f22c3d3af81f10b187f148f8e9d30" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "12efe44782ef6842b824dd281f79f808597a2c280d1facc06bb62b9cf8fbc2ef"
dependencies = [ dependencies = [
"fluence-sdk-macro 0.2.8 (git+https://github.com/fluencelabs/rust-sdk)", "fluence-sdk-macro 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
"fluence-sdk-main 0.2.8 (git+https://github.com/fluencelabs/rust-sdk)", "fluence-sdk-main 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]] [[package]]
@ -780,6 +780,14 @@ dependencies = [
"wasmer-wasi-fl", "wasmer-wasi-fl",
] ]
[[package]]
name = "fluence-sdk-macro"
version = "0.2.8"
source = "git+https://github.com/fluencelabs/rust-sdk#a6c587db0b6f22c3d3af81f10b187f148f8e9d30"
dependencies = [
"fluence-sdk-wit 0.2.8 (git+https://github.com/fluencelabs/rust-sdk)",
]
[[package]] [[package]]
name = "fluence-sdk-macro" name = "fluence-sdk-macro"
version = "0.2.8" version = "0.2.8"
@ -790,11 +798,13 @@ dependencies = [
] ]
[[package]] [[package]]
name = "fluence-sdk-macro" name = "fluence-sdk-main"
version = "0.2.8" version = "0.2.8"
source = "git+https://github.com/fluencelabs/rust-sdk#a6c587db0b6f22c3d3af81f10b187f148f8e9d30" source = "git+https://github.com/fluencelabs/rust-sdk#a6c587db0b6f22c3d3af81f10b187f148f8e9d30"
dependencies = [ dependencies = [
"fluence-sdk-wit 0.2.8 (git+https://github.com/fluencelabs/rust-sdk)", "fluence-sdk-macro 0.2.8 (git+https://github.com/fluencelabs/rust-sdk)",
"log",
"serde",
] ]
[[package]] [[package]]
@ -808,21 +818,10 @@ dependencies = [
"serde", "serde",
] ]
[[package]]
name = "fluence-sdk-main"
version = "0.2.8"
source = "git+https://github.com/fluencelabs/rust-sdk#a6c587db0b6f22c3d3af81f10b187f148f8e9d30"
dependencies = [
"fluence-sdk-macro 0.2.8 (git+https://github.com/fluencelabs/rust-sdk)",
"log",
"serde",
]
[[package]] [[package]]
name = "fluence-sdk-wit" name = "fluence-sdk-wit"
version = "0.2.8" version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "git+https://github.com/fluencelabs/rust-sdk#a6c587db0b6f22c3d3af81f10b187f148f8e9d30"
checksum = "560baf91197ded38a99a5c94ff366a3dd971ebf33f5d987ecce31d3dedf86d17"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -835,7 +834,8 @@ dependencies = [
[[package]] [[package]]
name = "fluence-sdk-wit" name = "fluence-sdk-wit"
version = "0.2.8" version = "0.2.8"
source = "git+https://github.com/fluencelabs/rust-sdk#a6c587db0b6f22c3d3af81f10b187f148f8e9d30" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "560baf91197ded38a99a5c94ff366a3dd971ebf33f5d987ecce31d3dedf86d17"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -1016,9 +1016,9 @@ dependencies = [
[[package]] [[package]]
name = "gimli" name = "gimli"
version = "0.22.0" version = "0.23.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aaf91faf136cb47367fa430cd46e37a788775e7fa104f8b4bcb3861dc389b724" checksum = "f6503fe142514ca4799d4c26297c4248239fe8838d827db6bd6065c6ed29a6ce"
[[package]] [[package]]
name = "h2" name = "h2"
@ -1553,9 +1553,9 @@ dependencies = [
[[package]] [[package]]
name = "object" name = "object"
version = "0.21.1" version = "0.22.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37fd5004feb2ce328a52b0b3d01dbf4ffff72583493900ed15f22d4111c51693" checksum = "8d3b63360ec3cb337817c2dbd47ab4a0f170d285d8e5a2064600f3def1402397"
[[package]] [[package]]
name = "once_cell" name = "once_cell"

View File

@ -25,86 +25,77 @@ use std::error::Error;
#[derive(Debug, Default, Clone, PartialEq, Eq)] #[derive(Debug, Default, Clone, PartialEq, Eq)]
pub(crate) struct RawStepperOutcome { pub(crate) struct RawStepperOutcome {
pub ret_code: i32, pub ret_code: i32,
pub data: String, pub data: err_msg,
pub next_peer_pks: Vec<String>, pub next_peer_pks: Vec<err_msg>,
} }
#[derive(Debug, Default, Clone, PartialEq, Eq)] #[derive(Debug, Default, Clone, PartialEq, Eq)]
pub struct StepperOutcome { pub struct StepperOutcome {
pub data: String, pub data: err_msg,
pub next_peer_pks: Vec<String>, pub next_peer_pks: Vec<err_msg>,
} }
#[derive(Debug, Clone, PartialEq, Eq)] #[derive(Debug, Clone, PartialEq, Eq)]
pub enum StepperError { pub enum StepperError {
/// Errors occurred while parsing aqua script in the form of S expressions. /// Errors occurred while parsing aqua script in the form of S expressions.
SExprParseError(String), SExprParseError(err_msg),
/// Errors occurred on aqua data deserialization.
DataDeserializationError(String),
/// Errors occurred on aqua data serialization.
DataSerializationError(String),
/// Errors occurred while parsing function arguments of an expression. /// Errors occurred while parsing function arguments of an expression.
FuncArgsSerdeError(String), FuncArgsSerializationError(err_msg),
/// Errors occurred while parsing returned by call_service value. /// Errors occurred while parsing returned by call_service value.
CallServiceSerdeError(String), CallServiceResultDeserializationError(err_msg),
/// Indicates that environment variable with name CURRENT_PEER_ID isn't set. /// Indicates that environment variable with name CURRENT_PEER_ID isn't set.
CurrentPeerIdEnvError(String), CurrentPeerIdEnvError(err_msg),
/// Semantic errors in instructions. /// Semantic errors in instructions.
InstructionError(String), InstructionError(err_msg),
/// An error is occurred while calling local service via call_service. /// An error is occurred while calling local service via call_service.
LocalServiceError(String), LocalServiceError(err_msg),
/// Value for such name isn't presence in data. /// Value for such name isn't presence in data.
VariableNotFound(String), VariableNotFound(err_msg),
/// Multiple values for such name found. /// Multiple values for such name found.
MultipleVariablesFound(String), MultipleVariablesFound(err_msg),
/// Value with such path wasn't found in data with such error. /// Value with such path wasn't found in data with such error.
VariableNotInJsonPath(String), VariableNotInJsonPath(err_msg),
/// Value for such name isn't presence in data. /// Provided JValue has incompatible with target type.
IncompatibleJValueType(String), IncompatibleJValueType(err_msg),
/// Provided AValue has incompatible with target type.
IncompatibleAValueType(err_msg),
/// Multiple values found for such json path. /// Multiple values found for such json path.
MultipleValuesInJsonPath(String), MultipleValuesInJsonPath(err_msg),
/// Fold state wasn't found for such iterator name. /// Fold state wasn't found for such iterator name.
FoldStateNotFound(String), FoldStateNotFound(err_msg),
/// Multiple fold states found for such iterator name. /// Multiple fold states found for such iterator name.
MultipleFoldStates(String), MultipleFoldStates(err_msg),
/// Expected evidence state of different type. /// Expected evidence state of different type.
InvalidEvidenceState(String), InvalidEvidenceState(err_msg),
/// Related to such ret_code that doesn't have match with current StepperError.
UnknownError(String),
/// Errors occurred on call evidence deserialization. /// Errors occurred on call evidence deserialization.
CallEvidenceDeserializationError(String), CallEvidenceDeserializationError(err_msg),
/// Errors occurred on call evidence serialization. /// Errors occurred on call evidence serialization.
CallEvidenceSerializationError(String), CallEvidenceSerializationError(err_msg),
/// Errors occurred when reserved keyword is used for variable name.
ReservedKeywordError(String),
/// Errors occurred when previous and current evidence states are incompatible. /// Errors occurred when previous and current evidence states are incompatible.
IncompatibleEvidenceStates(String), IncompatibleEvidenceStates(err_msg),
/// Errors occurred when previous and current call results are incompatible. /// Errors occurred when previous and current call results are incompatible.
IncompatibleCallResults(String), IncompatibleCallResults(err_msg),
/// Errors occurred when evidence path contains less elements then corresponding Par has. /// Errors occurred when evidence path contains less elements then corresponding Par has.
EvidencePathTooSmall(String), EvidencePathTooSmall(err_msg),
} }
impl Error for StepperError {} impl Error for StepperError {}
@ -112,29 +103,28 @@ impl Error for StepperError {}
impl std::fmt::Display for StepperError { impl std::fmt::Display for StepperError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
match self { match self {
StepperError::SExprParseError(err_msg) => write!(f, "{}", err_msg), StepperError::SExprParseError(err_msg) => writeln!(f, "{}", err_msg),
StepperError::DataDeserializationError(err_msg) => write!(f, "{}", err_msg), StepperError::FuncArgsSerializationError(err_msg) => writeln!(f, "{}", err_msg),
StepperError::DataSerializationError(err_msg) => write!(f, "{}", err_msg), StepperError::CallServiceResultDeserializationError(err_msg) => {
StepperError::FuncArgsSerdeError(err_msg) => write!(f, "{}", err_msg), writeln!(f, "{}", err_msg)
StepperError::CallServiceSerdeError(err_msg) => write!(f, "{}", err_msg), }
StepperError::CurrentPeerIdEnvError(err_msg) => write!(f, "{}", err_msg), StepperError::CurrentPeerIdEnvError(err_msg) => writeln!(f, "{}", err_msg),
StepperError::InstructionError(err_msg) => write!(f, "{}", err_msg), StepperError::InstructionError(err_msg) => writeln!(f, "{}", err_msg),
StepperError::LocalServiceError(err_msg) => write!(f, "{}", err_msg), StepperError::LocalServiceError(err_msg) => writeln!(f, "{}", err_msg),
StepperError::VariableNotFound(err_msg) => write!(f, "{}", err_msg), StepperError::VariableNotFound(err_msg) => writeln!(f, "{}", err_msg),
StepperError::MultipleVariablesFound(err_msg) => write!(f, "{}", err_msg), StepperError::MultipleVariablesFound(err_msg) => writeln!(f, "{}", err_msg),
StepperError::VariableNotInJsonPath(err_msg) => write!(f, "{}", err_msg), StepperError::VariableNotInJsonPath(err_msg) => writeln!(f, "{}", err_msg),
StepperError::IncompatibleJValueType(err_msg) => write!(f, "{}", err_msg), StepperError::IncompatibleJValueType(err_msg) => writeln!(f, "{}", err_msg),
StepperError::MultipleValuesInJsonPath(err_msg) => write!(f, "{}", err_msg), StepperError::IncompatibleAValueType(err_msg) => writeln!(f, "{}", err_msg),
StepperError::FoldStateNotFound(err_msg) => write!(f, "{}", err_msg), StepperError::MultipleValuesInJsonPath(err_msg) => writeln!(f, "{}", err_msg),
StepperError::MultipleFoldStates(err_msg) => write!(f, "{}", err_msg), StepperError::FoldStateNotFound(err_msg) => writeln!(f, "{}", err_msg),
StepperError::InvalidEvidenceState(err_msg) => write!(f, "{}", err_msg), StepperError::MultipleFoldStates(err_msg) => writeln!(f, "{}", err_msg),
StepperError::CallEvidenceDeserializationError(err_msg) => write!(f, "{}", err_msg), StepperError::InvalidEvidenceState(err_msg) => writeln!(f, "{}", err_msg),
StepperError::CallEvidenceSerializationError(err_msg) => write!(f, "{}", err_msg), StepperError::CallEvidenceDeserializationError(err_msg) => writeln!(f, "{}", err_msg),
StepperError::ReservedKeywordError(err_msg) => write!(f, "{}", err_msg), StepperError::CallEvidenceSerializationError(err_msg) => writeln!(f, "{}", err_msg),
StepperError::IncompatibleEvidenceStates(err_msg) => write!(f, "{}", err_msg), StepperError::IncompatibleEvidenceStates(err_msg) => writeln!(f, "{}", err_msg),
StepperError::IncompatibleCallResults(err_msg) => write!(f, "{}", err_msg), StepperError::IncompatibleCallResults(err_msg) => writeln!(f, "{}", err_msg),
StepperError::EvidencePathTooSmall(err_msg) => write!(f, "{}", err_msg), StepperError::EvidencePathTooSmall(err_msg) => writeln!(f, "{}", err_msg),
StepperError::UnknownError(err_msg) => write!(f, "{}", err_msg),
} }
} }
} }
@ -157,26 +147,25 @@ impl TryFrom<RawStepperOutcome> for StepperOutcome {
next_peer_pks: raw_outcome.next_peer_pks, next_peer_pks: raw_outcome.next_peer_pks,
}), }),
1 => to_vm_error!(SExprParseError), 1 => to_vm_error!(SExprParseError),
2 => to_vm_error!(DataDeserializationError), 2 => to_vm_error!(FuncArgsSerializationError),
3 => to_vm_error!(DataSerializationError), 3 => to_vm_error!(CallServiceResultDeserializationError),
4 => to_vm_error!(FuncArgsSerdeError), 4 => to_vm_error!(CurrentPeerIdEnvError),
5 => to_vm_error!(CallServiceSerdeError), 5 => to_vm_error!(InstructionError),
6 => to_vm_error!(CurrentPeerIdEnvError), 6 => to_vm_error!(LocalServiceError),
7 => to_vm_error!(InstructionError), 7 => to_vm_error!(VariableNotFound),
8 => to_vm_error!(LocalServiceError), 8 => to_vm_error!(MultipleVariablesFound),
9 => to_vm_error!(VariableNotFound), 9 => to_vm_error!(VariableNotInJsonPath),
10 => to_vm_error!(MultipleVariablesFound), 10 => to_vm_error!(IncompatibleJValueType),
11 => to_vm_error!(VariableNotInJsonPath), 11 => to_vm_error!(IncompatibleAValueType),
12 => to_vm_error!(IncompatibleJValueType), 12 => to_vm_error!(MultipleValuesInJsonPath),
13 => to_vm_error!(MultipleValuesInJsonPath), 13 => to_vm_error!(FoldStateNotFound),
14 => to_vm_error!(FoldStateNotFound), 14 => to_vm_error!(MultipleFoldStates),
15 => to_vm_error!(MultipleFoldStates), 15 => to_vm_error!(InvalidEvidenceState),
16 => to_vm_error!(CallEvidenceDeserializationError), 16 => to_vm_error!(CallEvidenceDeserializationError),
17 => to_vm_error!(CallEvidenceSerializationError), 17 => to_vm_error!(CallEvidenceSerializationError),
18 => to_vm_error!(ReservedKeywordError), 18 => to_vm_error!(IncompatibleEvidenceStates),
19 => to_vm_error!(IncompatibleEvidenceStates), 19 => to_vm_error!(IncompatibleCallResults),
20 => to_vm_error!(IncompatibleCallResults), 20 => to_vm_error!(EvidencePathTooSmall),
21 => to_vm_error!(EvidencePathTooSmall),
_ => to_vm_error!(UnknownError), _ => to_vm_error!(UnknownError),
} }
} }