// Copyright 2015-2017 Parity Technologies (UK) Ltd. // This file is part of Parity. // Parity is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // Parity is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with Parity. If not, see . use std::fmt; use std::io::Error as IoError; use ethkey::Error as EthKeyError; use crypto::Error as EthCryptoError; use ethkey::DerivationError; #[derive(Debug)] pub enum Error { Io(IoError), InvalidPassword, InvalidSecret, InvalidCryptoMeta, InvalidAccount, InvalidMessage, InvalidKeyFile(String), VaultsAreNotSupported, UnsupportedVault, InvalidVaultName, VaultNotFound, CreationFailed, EthKey(EthKeyError), EthCrypto(EthCryptoError), Derivation(DerivationError), Custom(String), } impl fmt::Display for Error { fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> { let s = match *self { Error::Io(ref err) => err.to_string(), Error::InvalidPassword => "Invalid password".into(), Error::InvalidSecret => "Invalid secret".into(), Error::InvalidCryptoMeta => "Invalid crypted metadata".into(), Error::InvalidAccount => "Invalid account".into(), Error::InvalidMessage => "Invalid message".into(), Error::InvalidKeyFile(ref reason) => format!("Invalid key file: {}", reason), Error::VaultsAreNotSupported => "Vaults are not supported".into(), Error::UnsupportedVault => "Vault is not supported for this operation".into(), Error::InvalidVaultName => "Invalid vault name".into(), Error::VaultNotFound => "Vault not found".into(), Error::CreationFailed => "Account creation failed".into(), Error::EthKey(ref err) => err.to_string(), Error::EthCrypto(ref err) => err.to_string(), Error::Derivation(ref err) => format!("Derivation error: {:?}", err), Error::Custom(ref s) => s.clone(), }; write!(f, "{}", s) } } impl From for Error { fn from(err: IoError) -> Self { Error::Io(err) } } impl From for Error { fn from(err: EthKeyError) -> Self { Error::EthKey(err) } } impl From for Error { fn from(err: EthCryptoError) -> Self { Error::EthCrypto(err) } } impl From for Error { fn from(err: DerivationError) -> Self { Error::Derivation(err) } }