Skip to content

Commit

Permalink
Merge pull request #28 from tomaka/rework
Browse files Browse the repository at this point in the history
General rework of the library
  • Loading branch information
tomaka committed Mar 5, 2018
2 parents fa4b9ff + 9772818 commit fa1a700
Show file tree
Hide file tree
Showing 6 changed files with 686 additions and 376 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ extern crate multiaddr;

use multiaddr::{Multiaddr, ToMultiaddr};

let address = Multiaddr::new("/ip4/127.0.0.1/udp/1234").unwrap();
let address = "/ip4/127.0.0.1/udp/1234".parse::<Multiaddr>().unwrap();
// or directly from a string
let other = "/ip4/127.0.0.1".to_multiaddr().unwrap();

Expand Down
55 changes: 33 additions & 22 deletions src/errors.rs
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
use std::{net, fmt, error, io, num};
use std::{net, fmt, error, io, num, string};
use cid;
use byteorder;

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

/// Error types
#[derive(PartialEq, Eq, Clone, Copy, Debug)]
#[derive(Debug)]
pub enum Error {
UnkownProtocol,
UnkownProtocolString,
UnknownProtocol,
UnknownProtocolString,
InvalidMultiaddr,
MissingAddress,
ParsingError,
ParsingError(Box<error::Error + Send + Sync>),
}

impl fmt::Display for Error {
Expand All @@ -22,45 +22,56 @@ impl fmt::Display for Error {

impl error::Error for Error {
fn description(&self) -> &str {
use self::Error::*;
match *self {
Error::UnknownProtocol => "unknown protocol",
Error::UnknownProtocolString => "unknown protocol string",
Error::InvalidMultiaddr => "invalid multiaddr",
Error::MissingAddress => "protocol requires address, none given",
Error::ParsingError(_) => "failed to parse",
}
}

#[inline]
fn cause(&self) -> Option<&error::Error> {
match *self {
UnkownProtocol => "Unkown protocol",
UnkownProtocolString => "Unkown protocol string",
InvalidMultiaddr => "Invalid multiaddr",
MissingAddress => "protocol requires address, none given",
ParsingError => "failed to parse",
Error::ParsingError(ref err) => Some(&**err),
_ => None
}
}
}

impl From<io::Error> for Error {
fn from(_: io::Error) -> Error {
Error::ParsingError
fn from(err: io::Error) -> Error {
Error::ParsingError(err.into())
}
}

impl From<cid::Error> for Error {
fn from(_: cid::Error) -> Error {
Error::ParsingError
fn from(err: cid::Error) -> Error {
Error::ParsingError(err.into())
}
}

impl From<net::AddrParseError> for Error {
fn from(_: net::AddrParseError) -> Error {
Error::ParsingError
fn from(err: net::AddrParseError) -> Error {
Error::ParsingError(err.into())
}
}

impl From<byteorder::Error> for Error {
fn from(_: byteorder::Error) -> Error {
Error::ParsingError
fn from(err: byteorder::Error) -> Error {
Error::ParsingError(err.into())
}
}


impl From<num::ParseIntError> for Error {
fn from(_: num::ParseIntError) -> Error {
Error::ParsingError
fn from(err: num::ParseIntError) -> Error {
Error::ParsingError(err.into())
}
}

impl From<string::FromUtf8Error> for Error {
fn from(err: string::FromUtf8Error) -> Error {
Error::ParsingError(err.into())
}
}

0 comments on commit fa1a700

Please sign in to comment.