pub type Result<T> = std::result::Result<T, Error>;
#[derive(thiserror::Error, Debug)]
pub enum Error {
#[error("Invalid http request: {0}")]
HttpRequestError(#[from] reqwest::Error),
#[error("Error on load witness calculator at path {0}")]
WASMFailedToLoad(String),
#[error("Failed to load witnesses: {0}")]
WitnessFailedOnLoad(String),
#[error("Error on witness compilling: {0}")]
WitnessWasmRuntimeError(Box<wasmer::RuntimeError>),
#[error("Error on create wasm instance: {0}")]
WitnessWasmInstanceError(Box<wasmer::InstantiationError>),
#[error("Error on wasm runtime: {0}")]
WitnessCompileError(Box<wasmer::CompileError>),
#[error("Error on load wasm module: {0}")]
WitnessIoCompileError(Box<wasmer::IoCompileError>),
#[error("Error on load r1cs: {0}")]
LoadR1CS(String),
#[error("Invalid data: {0}")]
InvalidDataWhenReadingR1CS(String),
#[error("IO error: {0}")]
IOError(#[from] std::io::Error),
#[error("Error on nova snark: {0}")]
NovaError(#[from] nova_snark::errors::NovaError),
}
impl From<wasmer::RuntimeError> for Error {
fn from(e: wasmer::RuntimeError) -> Self {
Self::WitnessWasmRuntimeError(Box::new(e))
}
}
impl From<wasmer::InstantiationError> for Error {
fn from(e: wasmer::InstantiationError) -> Self {
Self::WitnessWasmInstanceError(Box::new(e))
}
}
impl From<wasmer::CompileError> for Error {
fn from(e: wasmer::CompileError) -> Self {
Self::WitnessCompileError(Box::new(e))
}
}
impl From<wasmer::IoCompileError> for Error {
fn from(e: wasmer::IoCompileError) -> Self {
Self::WitnessIoCompileError(Box::new(e))
}
}