1pub type Result<T> = std::result::Result<T, Error>;
5
6#[derive(thiserror::Error, Debug)]
8pub enum Error {
9 #[error("Invalid http request: {0}")]
11 HttpRequestError(#[from] reqwest::Error),
12 #[error("Error on load witness calculator at path {0}")]
14 WASMFailedToLoad(String),
15 #[error("Failed to load witnesses: {0}")]
17 WitnessFailedOnLoad(String),
18 #[error("Error on witness compiling: {0}")]
20 WitnessWasmRuntimeError(Box<wasmer::RuntimeError>),
21 #[error("Error on create wasm instance: {0}")]
23 WitnessWasmInstanceError(Box<wasmer::InstantiationError>),
24 #[error("Error on create wasm memory: {0}")]
26 WitnessWasmMemoryError(String),
27 #[error("Error on wasm runtime: {0}")]
29 WitnessCompileError(Box<wasmer::CompileError>),
30 #[error("Wasm export not found: {0}")]
32 WitnessMissingExport(String),
33 #[error("Invalid wasm return from {function}: expected {expected}, got {actual}")]
35 WitnessInvalidReturn {
36 function: String,
38 expected: &'static str,
40 actual: String,
42 },
43 #[error("Unsupported Circom version: {0}")]
45 WitnessUnsupportedCircomVersion(u32),
46 #[error("Invalid U256 word length: expected {expected}, got {actual}")]
48 WitnessInvalidU256WordLength {
49 expected: usize,
51 actual: usize,
53 },
54 #[error("Error on load wasm module: {0}")]
56 WitnessIoCompileError(Box<wasmer::IoCompileError>),
57 #[error("Error on load r1cs: {0}")]
59 LoadR1CS(String),
60 #[error("Invalid data: {0}")]
62 InvalidDataWhenReadingR1CS(String),
63 #[error("IO error: {0}")]
65 IOError(#[from] std::io::Error),
66 #[error("Error on nova snark: {0}")]
68 NovaError(#[from] nova_snark::errors::NovaError),
69}
70
71impl From<wasmer::RuntimeError> for Error {
72 fn from(e: wasmer::RuntimeError) -> Self {
73 Self::WitnessWasmRuntimeError(Box::new(e))
74 }
75}
76
77impl From<wasmer::InstantiationError> for Error {
78 fn from(e: wasmer::InstantiationError) -> Self {
79 Self::WitnessWasmInstanceError(Box::new(e))
80 }
81}
82
83impl From<wasmer::CompileError> for Error {
84 fn from(e: wasmer::CompileError) -> Self {
85 Self::WitnessCompileError(Box::new(e))
86 }
87}
88
89impl From<wasmer::IoCompileError> for Error {
90 fn from(e: wasmer::IoCompileError) -> Self {
91 Self::WitnessIoCompileError(Box::new(e))
92 }
93}