1use std::array::TryFromSliceError;
2
3use {
4 derive_more::{Display, Error},
5 ed25519_dalek::ed25519,
6 solana_client::client_error::ClientError,
7 solana_program::program_error::ProgramError,
8 std::string::FromUtf8Error,
9};
10
11#[derive(Debug, Display, Error)]
12pub enum SnsError {
13 #[display(fmt = "")]
14 InvalidDomain,
15 SolanaClient(ClientError),
16 SolanaProgramError(ProgramError),
17 InvalidReverse,
18 ED25519(ed25519::Error),
19 BorshError(std::io::Error),
20 UnsupportedMint,
21 SerializationError,
22 InvalidPubkey,
23 Utf8(FromUtf8Error),
24 Bech32(bech32::Error),
25 InvalidRecordData,
26 Hex(hex::FromHexError),
27 UnrecognizedRecord,
28 Punycode,
29 InvalidEvmAddress,
30 InvalidInjectiveAddress,
31 InvalidIpv4,
32 InvalidIpv6,
33 SolRecordNotSupported,
34 NftRecordDoesNotExist,
35 Casting,
36 TryFromSlice(std::array::TryFromSliceError),
37 RecordsError(sns_records::error::SnsRecordsError),
38 StaleRecord,
39 UnverifiedRecord,
40}
41
42impl From<ClientError> for SnsError {
43 fn from(e: ClientError) -> Self {
44 Self::SolanaClient(e)
45 }
46}
47
48impl From<ProgramError> for SnsError {
49 fn from(e: ProgramError) -> Self {
50 Self::SolanaProgramError(e)
51 }
52}
53
54impl From<ed25519::Error> for SnsError {
55 fn from(e: ed25519::Error) -> Self {
56 Self::ED25519(e)
57 }
58}
59
60impl From<std::io::Error> for SnsError {
61 fn from(value: std::io::Error) -> Self {
62 Self::BorshError(value)
63 }
64}
65
66impl From<FromUtf8Error> for SnsError {
67 fn from(e: FromUtf8Error) -> Self {
68 Self::Utf8(e)
69 }
70}
71
72impl From<bech32::Error> for SnsError {
73 fn from(e: bech32::Error) -> Self {
74 Self::Bech32(e)
75 }
76}
77
78impl From<hex::FromHexError> for SnsError {
79 fn from(e: hex::FromHexError) -> Self {
80 Self::Hex(e)
81 }
82}
83
84impl From<bytemuck::PodCastError> for SnsError {
85 fn from(_: bytemuck::PodCastError) -> Self {
86 Self::Casting
87 }
88}
89
90impl From<TryFromSliceError> for SnsError {
91 fn from(e: std::array::TryFromSliceError) -> Self {
92 Self::TryFromSlice(e)
93 }
94}
95
96impl From<sns_records::error::SnsRecordsError> for SnsError {
97 fn from(value: sns_records::error::SnsRecordsError) -> Self {
98 Self::RecordsError(value)
99 }
100}