polysig-relay-server 0.8.0

Relay server for the polysig library
Documentation
use axum::extract::ws::Message;
use polysig_protocol::{MeetingId, SessionId};
use std::path::PathBuf;
use thiserror::Error;

/// Errors generated by the relay server.
#[derive(Debug, Error)]
pub enum Error {
    /// Error generated when a file is expected.
    #[error(r#"not a file "{0}""#)]
    NotFile(PathBuf),

    /// Error generated when permission is denied.
    #[error("permission denied")]
    PermissionDenied,

    /// Error generated when the config server key file was not specified.
    #[error("server config requires path to a key file")]
    KeyFileRequired,

    /// Error generated when the config server key file was not found.
    #[error(r#"key file "{0}" not found"#)]
    KeyNotFound(PathBuf),

    /// Error generated attempting to handshake with a peer that
    /// already exists.
    #[error("peer already exists")]
    PeerAlreadyExists,

    /// Error generated when a peer could not be found.
    #[error(r#"peer "{0}" not found "#)]
    PeerNotFound(String),

    /// Error generated when a file does not have a parent directory.
    #[error("no parent directory")]
    NoParentDir,

    /// Error generated when a participant expects to be in the handshake
    /// protocol state.
    #[error("not handshake protocol state")]
    NotHandshakeState,

    /// Error generated when a meeting could not be found.
    #[error(r#"meeting "{0}" not found"#)]
    MeetingNotFound(MeetingId),

    /// Error generated when a participant attempts to join a meeting
    /// that is full.
    #[error(r#"meeting "{0}" is full"#)]
    MeetingFull(MeetingId),

    /// Error generated when a session could not be found.
    #[error(r#"session "{0}" not found"#)]
    SessionNotFound(SessionId),

    /// Error generated attempting to relay to a peer in the context
    /// of a session but the target peer is not a session participant.
    #[error(r#"session "{0}" does not have participant "{1}""#)]
    NotSessionParticipant(SessionId, String),

    /// Error generated when the session timeout is not greater
    /// than the interval.
    #[error("session timeout must be greater than the interval")]
    SessionTimeoutConfig,

    /// Error generated when the session wait timeout is not greater
    /// than the wait interval.
    #[error(
        "session wait timeout must be greater than the wait interval"
    )]
    SessionWaitConfig,

    /// Error generated by input/output.
    #[error(transparent)]
    Io(#[from] std::io::Error),

    /// Error generated by the protocol library.
    #[error(transparent)]
    Protocol(#[from] polysig_protocol::Error),

    /// Error generated by the web server library.
    #[error(transparent)]
    Axum(#[from] axum::Error),

    /// Error generated by the noise protocol library.
    #[error(transparent)]
    Snow(#[from] polysig_protocol::snow::error::Error),

    /// Error generated parsing TOML.
    #[error(transparent)]
    Toml(#[from] toml::de::Error),

    /// Error generated when a header value is invalid.
    #[error(transparent)]
    HeaderValue(#[from] axum::http::header::InvalidHeaderValue),

    /// Error generated sending a buffer over a channel.
    #[error(transparent)]
    BufferMpscSend(
        #[from] tokio::sync::mpsc::error::SendError<Vec<u8>>,
    ),

    /// Error generated sending a message over a channel.
    #[error(transparent)]
    MessageMpscSend(
        #[from] tokio::sync::mpsc::error::SendError<Message>,
    ),
}