use serde::{Deserialize, Serialize}; use actix::prelude::*; // Message for client introduction #[derive(Message)] #[rtype(result = "()")] pub struct Introduction { pub public_key: String, } // Message for requesting a signature from a client #[derive(Message, Debug)] #[rtype(result = "()")] pub struct SignRequest { pub message: Vec, pub request_id: String, pub response_sender: Option>, } /// Response for a signature request #[derive(Message, Debug)] #[rtype(result = "()")] pub struct SignResponse { pub message: Vec, pub signature: Vec, pub request_id: String, } // Internal message for pending requests #[derive(Message)] #[rtype(result = "()")] pub struct PendingRequest { pub request_id: String, pub message: Vec, pub response_tx: tokio::sync::oneshot::Sender, } // Protocol enum for serializing/deserializing WebSocket messages #[derive(Serialize, Deserialize, Debug, Clone)] #[serde(tag = "type", content = "payload")] pub enum ProtocolMessage { Introduction(String), // Contains base64 encoded public key SignRequest(String), // Contains base64 encoded message to sign SignResponse(String), // Contains "message.signature" in base64 }