use serde::{Deserialize, Serialize};
use sp1_prover::{worker::ProofFromNetwork, SP1VerifyingKey};
use sp1_prover_types::network_base_types::ProofMode;
use crate::CudaClientError;
use sp1_core_machine::io::SP1Stdin;
#[derive(Serialize, Deserialize)]
pub enum Request {
Setup { elf: Vec<u8> },
ProveWithMode { mode: ProofMode, key: [u8; 32], stdin: SP1Stdin, proof_nonce: [u32; 4] },
Destroy { key: [u8; 32] },
}
#[derive(Serialize, Deserialize)]
pub enum Response {
Ok,
Setup { id: [u8; 32], vk: SP1VerifyingKey },
Proof { proof: ProofFromNetwork },
ProverError(String),
InternalError(String),
ConnectionClosed,
}
impl Response {
pub(crate) const fn type_of(&self) -> &'static str {
match self {
Response::Ok => "Ok",
Response::Setup { .. } => "Setup",
Response::Proof { .. } => "Proof",
Response::InternalError(_) => "InternalError",
Response::ProverError(_) => "ProverError",
Response::ConnectionClosed => "ConnectionClosed",
}
}
pub(crate) fn into_result(self) -> Result<Self, CudaClientError> {
match self {
Self::InternalError(e) => Err(CudaClientError::ServerError(e)),
Self::ProverError(e) => {
Err(CudaClientError::ServerError(e))
}
_ => Ok(self),
}
}
}