use std::{error, fmt};
pub type Result<T> = std::result::Result<T, Error>;
#[derive(PartialEq, Eq, Clone, Copy, Debug)]
pub enum Error {
UnknownCodec,
InputTooShort,
ParsingError,
InvalidCidVersion,
InvalidCidV0Codec,
InvalidCidV0Multihash,
VarIntDecodeError,
}
impl error::Error for Error {}
impl fmt::Display for Error {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
use self::Error::*;
let error = match *self {
UnknownCodec => "Unknown codec",
InputTooShort => "Input too short",
ParsingError => "Failed to parse multihash",
InvalidCidVersion => "Unrecognized CID version",
InvalidCidV0Codec => "CIDv0 requires a DagPB codec",
InvalidCidV0Multihash => "CIDv0 requires a Sha-256 multihash",
VarIntDecodeError => "Failed to decode unsigned varint format",
};
f.write_str(error)
}
}
impl From<multibase::Error> for Error {
fn from(_: multibase::Error) -> Error {
Error::ParsingError
}
}
impl From<multihash::EncodeError> for Error {
fn from(_: multihash::EncodeError) -> Error {
Error::ParsingError
}
}
impl From<multihash::DecodeError> for Error {
fn from(_: multihash::DecodeError) -> Error {
Error::ParsingError
}
}
impl From<multihash::DecodeOwnedError> for Error {
fn from(_: multihash::DecodeOwnedError) -> Error {
Error::ParsingError
}
}
impl From<unsigned_varint::decode::Error> for Error {
fn from(_: unsigned_varint::decode::Error) -> Self {
Error::VarIntDecodeError
}
}