use crate::{http::login::login_error::LoginError, packet::message::UIMessage};
use serde::{Deserialize, Serialize};
use thiserror::Error;
#[derive(Debug, Clone, Error, Serialize, Deserialize)]
#[error("{message}")]
pub struct MailboxSessionError {
pub message: String,
}
#[derive(Debug, Clone, Error, Serialize, Deserialize)]
#[error("{message}")]
pub struct CircuitCodeError {
pub message: String,
}
#[derive(Debug, Clone, Error, Serialize, Deserialize)]
#[error("{message}")]
pub struct CompleteAgentMovementError {
pub message: String,
}
#[derive(Debug, Clone, Error, Serialize, Deserialize)]
#[error("{message}")]
pub struct AckError {
pub message: String,
}
#[derive(Debug, Clone, Error, Serialize, Deserialize)]
#[error("{message}")]
pub struct CapabilityError {
pub message: String,
}
#[derive(Clone, Debug, Error, Serialize, Deserialize)]
pub enum FeatureError {
#[error("Inventory: {0}")]
Inventory(String),
}
#[derive(Clone, Debug, Error, Serialize, Deserialize)]
pub enum SessionError {
#[error("CircuitCodeError: {0}")]
CircuitCode(#[from] CircuitCodeError),
#[error("CompleteAgentMovementError: {0}")]
CompleteAgentMovement(#[from] CompleteAgentMovementError),
#[error("{0}")]
Login(#[from] LoginError),
#[error("ClientConnectionError: {0}")]
MailboxSession(#[from] MailboxSessionError),
#[error("AckError: {0}")]
AckError(#[from] AckError),
#[error("CapabilityError: {0}")]
Capability(#[from] CapabilityError),
#[error("FeatureError: {0}")]
FeatureError(#[from] FeatureError),
#[error("IOError: {0}")]
IOError(String),
}
impl From<std::io::Error> for SessionError {
fn from(err: std::io::Error) -> Self {
Self::IOError(err.to_string())
}
}
impl UIMessage {
pub fn new_session_error(data: SessionError) -> Self {
UIMessage::Error(data)
}
}