fvm_shared/address/
errors.rs

1// Copyright 2021-2023 Protocol Labs
2// Copyright 2019-2022 ChainSafe Systems
3// SPDX-License-Identifier: Apache-2.0, MIT
4
5use std::{io, num};
6
7use data_encoding::DecodeError;
8use thiserror::Error;
9use unsigned_varint::decode::Error as VarintError;
10
11use super::{BLS_PUB_LEN, SECP_PUB_LEN};
12
13/// Address error
14#[derive(Debug, PartialEq, Eq, Error)]
15pub enum Error {
16    #[error("Unknown address network")]
17    UnknownNetwork,
18    #[error("Unknown address protocol")]
19    UnknownProtocol,
20    #[error("Invalid address payload")]
21    InvalidPayload,
22    #[error("Invalid address length")]
23    InvalidLength,
24    #[error("Invalid payload length: {0}")]
25    InvalidPayloadLength(usize),
26    #[error("Invalid BLS pub key length, wanted: {exp} got: {0}", exp=BLS_PUB_LEN)]
27    InvalidBLSLength(usize),
28    #[error("Invalid SECP pub key length, wanted: {exp} got: {0}", exp=SECP_PUB_LEN)]
29    InvalidSECPLength(usize),
30    #[error("Invalid address checksum")]
31    InvalidChecksum,
32    #[error("Decoding for address failed: {0}")]
33    Base32Decoding(#[from] DecodeError),
34    #[error("Cannot get id from non id address")]
35    NonIDAddress,
36    #[error("Cannot get delegated address from non delegate address")]
37    NonDelegatedAddress,
38}
39
40impl From<num::ParseIntError> for Error {
41    fn from(_: num::ParseIntError) -> Error {
42        Error::InvalidPayload
43    }
44}
45
46impl From<io::Error> for Error {
47    fn from(_: io::Error) -> Error {
48        Error::InvalidPayload
49    }
50}
51impl From<VarintError> for Error {
52    fn from(_: VarintError) -> Error {
53        Error::InvalidPayload
54    }
55}