nimiq-network 0.2.0

Nimiq's network implementation in Rust
use failure::Fail;
use tokio::io::Error as IoError;

use network_primitives::networks::NetworkId;
use network_primitives::address::peer_uri::PeerUriError;

use crate::websocket::error::ServerStartError;


#[derive(Fail, Debug)]
pub enum Error {
    #[fail(display = "PeerKey could not be deserialized")]
    InvalidPeerKey,
    #[fail(display = "PeerKey has not been initialized")]
    UninitializedPeerKey,
    #[fail(display = "{}", _0)]
    IoError(#[cause] IoError),
    #[fail(display = "{}", _0)]
    ServerStartError(#[cause] ServerStartError),
    #[fail(display = "Could not load network info for id {:?}", _0)]
    InvalidNetworkInfo(NetworkId),
    #[fail(display = "Could not add seed node {}", _0)]
    InvalidSeed(#[cause] SeedError)
}

impl From<IoError> for Error {
    fn from(e: IoError) -> Self {
        Error::IoError(e)
    }
}

impl From<ServerStartError> for Error {
    fn from(e: ServerStartError) -> Self {
        Error::ServerStartError(e)
    }
}

impl From<SeedError> for Error {
    fn from(e: SeedError) -> Self {
        Error::InvalidSeed(e)
    }
}

#[derive(Debug, Fail)]
pub enum SeedError {
    #[fail(display = "Invalid peer URI: {}", _0)]
    Peer(#[cause] PeerUriError),
    #[fail(display = "Invalid seed list URL: {}", _0)]
    Url(#[cause] url::ParseError)
}

impl From<PeerUriError> for SeedError {
    fn from(e: PeerUriError) -> SeedError {
        SeedError::Peer(e)
    }
}

impl From<url::ParseError> for SeedError {
    fn from(e: url::ParseError) -> SeedError {
        SeedError::Url(e)
    }
}