use alloc::string::String;
#[cfg(not(feature = "std"))]
use core::fmt;
#[derive(Debug)]
#[cfg_attr(feature = "std", derive(thiserror::Error))]
#[cfg_attr(feature = "std", error("Invalid instance: {message}"))]
pub struct InvalidInstance {
pub message: String,
}
impl InvalidInstance {
pub fn new(message: impl Into<String>) -> Self {
Self {
message: message.into(),
}
}
}
impl From<InvalidInstance> for Error {
fn from(_err: InvalidInstance) -> Self {
Error::InvalidInstanceWitnessPair
}
}
#[non_exhaustive]
#[derive(Debug)]
#[cfg_attr(feature = "std", derive(thiserror::Error))]
pub enum Error {
#[cfg_attr(feature = "std", error("Verification failed."))]
VerificationFailure,
#[cfg_attr(feature = "std", error("Invalid instance/witness pair."))]
InvalidInstanceWitnessPair,
#[cfg_attr(
feature = "std",
error("Uninitialized group element variable: {var_debug}")
)]
UnassignedGroupVar {
var_debug: String,
},
}
impl From<spongefish::VerificationError> for Error {
fn from(_value: spongefish::VerificationError) -> Self {
Error::VerificationFailure
}
}
#[cfg(not(feature = "std"))]
impl fmt::Display for InvalidInstance {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "Invalid instance: {}", self.message)
}
}
#[cfg(not(feature = "std"))]
impl fmt::Display for Error {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Error::VerificationFailure => write!(f, "Verification failed."),
Error::InvalidInstanceWitnessPair => write!(f, "Invalid instance/witness pair."),
Error::UnassignedGroupVar { var_debug } => {
write!(f, "Uninitialized group element variable: {}", var_debug)
}
}
}
}
pub type Result<T> = core::result::Result<T, Error>;
pub const fn Ok<T>(value: T) -> Result<T> {
Result::Ok(value)
}