ipmb 0.8.5

Inter-process message bus
Documentation
use crate::{platform::Remote, Version};
use thiserror::Error;

#[derive(Debug, Error)]
pub enum Error {
    #[error("encode error")]
    Encode(#[from] bincode::error::EncodeError),
    #[error("decode error")]
    Decode(#[from] bincode::error::DecodeError),
    #[error("type uuid not found")]
    TypeUuidNotFound,
    #[error("timeout")]
    Timeout,
    #[error("disconnected")]
    Disconnect,
    #[error("version mismatch: {0}")]
    VersionMismatch(Version, Option<Remote>),
    #[error("token mismatch")]
    TokenMismatch,
    #[error("identifier in use")]
    IdentifierInUse,
    #[error("identifier not in use")]
    IdentifierNotInUse,
    #[cfg(target_os = "windows")]
    #[error("win error: {0}")]
    WinError(#[from] windows::core::Error),
    #[error("io error: {0}")]
    IoError(#[from] std::io::Error),
    #[error("memory region mapping error")]
    MemoryRegionMapping,
    #[error("permission denied")]
    PermissionDenied,
    #[error("unknown error")]
    Unknown,
}

#[derive(Debug, Error)]
pub enum JoinError {
    #[error("version mismatch: {0}")]
    VersionMismatch(Version),
    #[error("token mismatch")]
    TokenMismatch,
    #[error("timeout")]
    Timeout,
    #[error("permission denied")]
    PermissionDenied,
}

#[derive(Debug, Error)]
pub enum SendError {
    #[error("timeout")]
    Timeout,
    #[error("version mismatch: {0}")]
    VersionMismatch(Version),
    #[error("token mismatch")]
    TokenMismatch,
    #[error("permission denied")]
    PermissionDenied,
}

impl From<JoinError> for SendError {
    fn from(value: JoinError) -> Self {
        match value {
            JoinError::VersionMismatch(v) => Self::VersionMismatch(v),
            JoinError::TokenMismatch => Self::TokenMismatch,
            JoinError::Timeout => Self::Timeout,
            JoinError::PermissionDenied => Self::PermissionDenied,
        }
    }
}

#[derive(Debug, Error)]
pub enum RecvError {
    #[error("decode error")]
    Decode(#[from] bincode::error::DecodeError),
    #[error("timeout")]
    Timeout,
    #[error("version mismatch: {0}")]
    VersionMismatch(Version),
    #[error("token mismatch")]
    TokenMismatch,
    #[error("permission denied")]
    PermissionDenied,
}

impl From<JoinError> for RecvError {
    fn from(value: JoinError) -> Self {
        match value {
            JoinError::VersionMismatch(v) => Self::VersionMismatch(v),
            JoinError::TokenMismatch => Self::TokenMismatch,
            JoinError::Timeout => Self::Timeout,
            JoinError::PermissionDenied => Self::PermissionDenied,
        }
    }
}