ferry-core 0.1.1

Core protocol, discovery, transfer, manifest, trust, and filesystem logic for FileFerry.
Documentation
use std::net::AddrParseError;
use std::path::PathBuf;

#[derive(Debug, thiserror::Error)]
pub enum Error {
    #[error("invalid peer address: {0}")]
    InvalidPeerAddress(#[from] AddrParseError),

    #[error("invalid transfer input: {0}")]
    InvalidInput(String),

    #[error("peer not found: {0}")]
    PeerNotFound(String),

    #[error("peer lookup is ambiguous: {0}")]
    AmbiguousPeer(String),

    #[error("filesystem error at {}: {source}", path.display())]
    IoPath {
        path: PathBuf,
        #[source]
        source: std::io::Error,
    },

    #[error("filesystem error: {0}")]
    Io(#[from] std::io::Error),

    #[error("configuration directory is unavailable")]
    ConfigDirUnavailable,

    #[error("configuration parse failed: {0}")]
    ConfigParse(String),

    #[error("configuration serialization failed: {0}")]
    ConfigSerialize(String),

    #[error("mDNS discovery failed: {0}")]
    Discovery(String),

    #[error("certificate generation failed: {0}")]
    CertificateGeneration(#[from] rcgen::Error),

    #[error("TLS configuration failed: {0}")]
    Tls(#[from] rustls::Error),

    #[error("QUIC connection failed: {0}")]
    Connect(#[from] quinn::ConnectError),

    #[error("QUIC connection closed: {0}")]
    Connection(#[from] quinn::ConnectionError),

    #[error("QUIC read failed: {0}")]
    Read(#[from] quinn::ReadError),

    #[error("QUIC exact read failed: {0}")]
    ReadExact(#[from] quinn::ReadExactError),

    #[error("QUIC write failed: {0}")]
    Write(#[from] quinn::WriteError),

    #[error("QUIC stream is closed: {0}")]
    ClosedStream(#[from] quinn::ClosedStream),

    #[error("QUIC endpoint connection refused")]
    NoIncomingConnection,

    #[error("crypto configuration failed: {0}")]
    CryptoConfig(String),

    #[error("protocol error: {0}")]
    Protocol(String),

    #[error("transfer failed: {0}")]
    Transfer(String),

    #[error("{0} is not implemented yet")]
    NotImplemented(&'static str),
}

pub type Result<T> = std::result::Result<T, Error>;