use super::transcript::TranscriptError;
use ark_serialize::SerializationError;
use ark_std::string::String;
use displaydoc::Display;
#[cfg(feature = "icicle")]
use icicle_core::error::IcicleError;
#[cfg(feature = "icicle")]
use icicle_cuda_runtime::error::CudaError;
#[derive(Display, Debug)]
pub enum PCSError {
InvalidProver(String),
InvalidVerifier(String),
InvalidProof(String),
InvalidParameters(String),
SerializationError(SerializationError),
TranscriptError(TranscriptError),
UpstreamError(String),
#[cfg(feature = "icicle")]
IcicleError(String),
}
impl ark_std::error::Error for PCSError {}
impl From<SerializationError> for PCSError {
fn from(e: ark_serialize::SerializationError) -> Self {
Self::SerializationError(e)
}
}
impl From<TranscriptError> for PCSError {
fn from(e: TranscriptError) -> Self {
Self::TranscriptError(e)
}
}
#[cfg(feature = "icicle")]
impl From<IcicleError> for PCSError {
fn from(e: IcicleError) -> Self {
Self::IcicleError(ark_std::format!("{:?}", e))
}
}
#[cfg(feature = "icicle")]
impl From<CudaError> for PCSError {
fn from(e: CudaError) -> Self {
let icicle_err = IcicleError::from_cuda_error(e);
icicle_err.into()
}
}