torrust-tracker 3.0.0

A feature rich BitTorrent tracker.
Documentation
use std::net::SocketAddr;

use aquatic_udp_protocol::Response;
use serde::Serialize;
use thiserror::Error;

use crate::shared::bit_torrent::tracker::udp;

pub mod app;
pub mod checker;
pub mod responses;

#[derive(Error, Debug, Clone, Serialize)]
#[serde(into = "String")]
pub enum Error {
    #[error("Failed to Connect to: {remote_addr}, with error: {err}")]
    UnableToBindAndConnect { remote_addr: SocketAddr, err: udp::Error },

    #[error("Failed to send a connection request, with error: {err}")]
    UnableToSendConnectionRequest { err: udp::Error },

    #[error("Failed to receive a connect response, with error: {err}")]
    UnableToReceiveConnectResponse { err: udp::Error },

    #[error("Failed to send a announce request, with error: {err}")]
    UnableToSendAnnounceRequest { err: udp::Error },

    #[error("Failed to receive a announce response, with error: {err}")]
    UnableToReceiveAnnounceResponse { err: udp::Error },

    #[error("Failed to send a scrape request, with error: {err}")]
    UnableToSendScrapeRequest { err: udp::Error },

    #[error("Failed to receive a scrape response, with error: {err}")]
    UnableToReceiveScrapeResponse { err: udp::Error },

    #[error("Failed to receive a response, with error: {err}")]
    UnableToReceiveResponse { err: udp::Error },

    #[error("Failed to get local address for connection: {err}")]
    UnableToGetLocalAddr { err: udp::Error },

    #[error("Failed to get a connection response: {response:?}")]
    UnexpectedConnectionResponse { response: Response },
}

impl From<Error> for String {
    fn from(value: Error) -> Self {
        value.to_string()
    }
}