2021-05-10 14:25:34 +03:00
|
|
|
/*
|
|
|
|
* Copyright 2020 Fluence Labs Limited
|
|
|
|
*
|
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
* you may not use this file except in compliance with the License.
|
|
|
|
* You may obtain a copy of the License at
|
|
|
|
*
|
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
*
|
|
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
* See the License for the specific language governing permissions and
|
|
|
|
* limitations under the License.
|
|
|
|
*/
|
|
|
|
|
2022-08-19 12:29:21 +03:00
|
|
|
pub use avm_interface::CallSeDeErrors;
|
|
|
|
use avm_interface::ErrorAVMOutcome;
|
2022-07-27 16:40:27 +03:00
|
|
|
use marine::IValue;
|
|
|
|
use marine::MarineError;
|
2021-05-10 14:25:34 +03:00
|
|
|
|
2021-10-04 10:58:00 +03:00
|
|
|
use serde_json::Error as SerdeError;
|
2021-05-10 14:25:34 +03:00
|
|
|
use thiserror::Error as ThisError;
|
|
|
|
|
|
|
|
use std::io::Error as IOError;
|
|
|
|
use std::path::PathBuf;
|
|
|
|
|
|
|
|
#[derive(Debug, ThisError)]
|
2021-10-04 10:58:00 +03:00
|
|
|
pub enum AVMError<E> {
|
|
|
|
/// This error contains interpreter outcome in case when execution failed on the interpreter
|
|
|
|
/// side. A host should match on this error type explicitly to save provided data.
|
|
|
|
#[error("interpreter failed with: {0:?}")]
|
|
|
|
InterpreterFailed(ErrorAVMOutcome),
|
2021-05-10 14:25:34 +03:00
|
|
|
|
2021-10-04 10:58:00 +03:00
|
|
|
/// This errors are encountered from an AVM runner.
|
|
|
|
#[error(transparent)]
|
|
|
|
RunnerError(RunnerError),
|
2021-06-30 18:58:54 +03:00
|
|
|
|
2021-10-04 10:58:00 +03:00
|
|
|
/// This errors are encountered from a data store object.
|
|
|
|
#[error(transparent)]
|
|
|
|
DataStoreError(#[from] E),
|
2022-06-23 15:24:00 +03:00
|
|
|
|
|
|
|
/// This errors are encountered from serialization of data tracked during an anomaly.
|
|
|
|
#[error(transparent)]
|
|
|
|
AnomalyDataSeError(SerdeError),
|
2021-10-04 10:58:00 +03:00
|
|
|
}
|
2021-06-30 18:58:54 +03:00
|
|
|
|
2021-10-04 10:58:00 +03:00
|
|
|
#[derive(Debug, ThisError)]
|
|
|
|
pub enum RunnerError {
|
|
|
|
/// This errors are encountered from FaaS.
|
|
|
|
#[error(transparent)]
|
2022-07-27 16:40:27 +03:00
|
|
|
MarineError(#[from] MarineError),
|
2021-05-10 14:25:34 +03:00
|
|
|
|
|
|
|
/// Specified path to AIR interpreter .wasm file was invalid
|
|
|
|
#[error("path to AIR interpreter .wasm ({invalid_path:?}) is invalid: {reason}; IO Error: {io_error:?}")]
|
|
|
|
InvalidAIRPath {
|
|
|
|
invalid_path: PathBuf,
|
|
|
|
io_error: Option<IOError>,
|
|
|
|
reason: &'static str,
|
|
|
|
},
|
2021-10-04 10:58:00 +03:00
|
|
|
|
|
|
|
/// AIR interpreter result deserialization errors.
|
|
|
|
#[error("{0}")]
|
|
|
|
InterpreterResultDeError(String),
|
|
|
|
|
2022-07-27 16:40:27 +03:00
|
|
|
/// Marine call returns Vec<IValue> to support multi-value in a future,
|
2021-10-04 10:58:00 +03:00
|
|
|
/// but actually now it could return empty vec or a vec with one value.
|
|
|
|
/// This error is encountered when it returns vec with not a one value.
|
2022-07-27 16:40:27 +03:00
|
|
|
#[error("result `{0:?}` returned from Marine should contain only one element")]
|
2021-10-04 10:58:00 +03:00
|
|
|
IncorrectInterpreterResult(Vec<IValue>),
|
|
|
|
|
|
|
|
/// This errors are encountered from an call results/params se/de.
|
|
|
|
#[error(transparent)]
|
|
|
|
CallSeDeErrors(#[from] CallSeDeErrors),
|
2023-06-23 03:12:37 +07:00
|
|
|
|
|
|
|
/// Invalid secret key.
|
|
|
|
#[error(transparent)]
|
|
|
|
KeyError(eyre::Error),
|
2021-05-10 14:25:34 +03:00
|
|
|
}
|