use std::collections::HashMap;
use rocket::serde::{Deserialize, Serialize};
use tandem::{states::Msg, Circuit};
use crate::msg_queue::MessageId;
pub type EngineId = String;
pub type MessageLog = Vec<(Msg, MessageId)>;
pub type HandleMpcRequestFn = Box<dyn Fn(MpcRequest) -> Result<MpcSession, String> + Send + Sync>;
#[derive(Debug, Clone)]
pub struct MpcSession {
pub circuit: Circuit,
pub input_from_server: Vec<bool>,
pub request_headers: HashMap<String, String>,
}
pub struct MpcRequest {
pub plaintext_metadata: String,
pub program: String,
pub function: String,
}
#[derive(Debug, PartialEq, Eq)]
pub(crate) struct EngineMessages {
log: MessageLog,
last_durably_received_client_event_offset: MessageId,
}
#[derive(Serialize, Deserialize, Debug, PartialEq, Eq)]
#[serde(crate = "rocket::serde")]
pub(crate) struct EngineCreationResult {
pub engine_id: String,
pub request_headers: HashMap<String, String>,
pub server_version: String,
}