1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
use crate::dbs;
use crate::messaging::{data::Error as ErrorMessage, MessageId};
use crate::routing::Prefix;
use crate::types::{convert_dt_error_to_error_message, DataAddress, PublicKey};
use std::io;
use thiserror::Error;
use xor_name::XorName;
pub type Result<T, E = Error> = std::result::Result<T, E>;
#[allow(clippy::large_enum_variant)]
#[derive(Error, Debug)]
#[non_exhaustive]
pub enum Error {
#[error("Attempted Adult operation when not an Adult")]
NotAnAdult,
#[error("Attempted Elder operation when not an Elder")]
NotAnElder,
#[error("Not enough Adults available in Section({0:?}) to perform operation")]
NoAdults(Prefix),
#[error("Database error:: {0}")]
Database(#[from] dbs::Error),
#[error("Not section public key returned from routing")]
NoSectionPublicKey,
#[error("Not section public key set returned from routing")]
NoSectionPublicKeySet,
#[error("Not section public key returned from routing for xorname {0}")]
NoSectionPublicKeyKnown(XorName),
#[error("No such data: {0:?}")]
NoSuchData(DataAddress),
#[error("Could not create temp store: {0}")]
TempDirCreationFailed(String),
#[error("Data already exists at this node")]
DataExists,
#[error("I/O error: {0}")]
Io(#[from] io::Error),
#[error("JSON serialisation error:: {0}")]
JsonSerialisation(#[from] serde_json::Error),
#[error("Bincode error:: {0}")]
Bincode(#[from] bincode::Error),
#[error("Network service message error:: {0}")]
ServiceMsg(#[from] crate::messaging::data::Error),
#[error("Service error:: {0:?}")]
ServiceError(crate::messaging::data::ServiceError),
#[error("Network message error:: {0}")]
Message(#[from] crate::messaging::Error),
#[error("Network data error:: {0}")]
NetworkData(#[from] crate::types::Error),
#[error("Routing error:: {0}")]
Routing(#[from] crate::routing::Error),
#[error("Message with id: '{0:?}' is invalid. {1}")]
InvalidMessage(MessageId, String),
#[error("Provided PublicKey is not a valid owner. Provided PublicKey: {0}")]
InvalidOwner(PublicKey),
#[error("Invalid operation: {0}")]
InvalidOperation(String),
#[error("No mapping to sn_messages error is set up for this NodeError {0}")]
NoErrorMapping(String),
#[error("Logic error: {0}")]
Logic(String),
#[error("Timeout when trying to join the network")]
JoinTimeout,
#[error("Configuration error: {0}")]
Configuration(String),
#[error("Sled error:: {0}")]
Sled(#[from] sled::Error),
}
pub(crate) fn convert_to_error_message(error: Error) -> ErrorMessage {
match error {
Error::InvalidOperation(msg) => ErrorMessage::InvalidOperation(msg),
Error::InvalidMessage(_, msg) => ErrorMessage::InvalidOperation(msg),
Error::InvalidOwner(key) => ErrorMessage::InvalidOwner(key),
Error::NoSuchData(address) => ErrorMessage::DataNotFound(address),
Error::TempDirCreationFailed(_) => ErrorMessage::FailedToWriteFile,
Error::DataExists => ErrorMessage::DataExists,
Error::NetworkData(error) => convert_dt_error_to_error_message(error),
other => {
ErrorMessage::InvalidOperation(format!("Failed to perform operation: {:?}", other))
}
}
}