1use core::fmt;
13use std::error::Error;
14
15use num_enum::IntoPrimitive;
16use num_enum::TryFromPrimitive;
17
18pub use crate::commit::{CommitLoadError, CommitVerifyError};
19use crate::file::FileError;
20use crate::log::*;
21use crate::object::Object;
22use crate::types::BlockId;
23
24#[derive(Debug, Eq, PartialEq, Clone)]
25#[repr(u16)]
26pub enum NgError {
27 InvalidSignature,
28 IncompleteSignature,
29 SerializationError,
30 EncryptionError,
31 DecryptionError,
32 InvalidValue,
33 ConnectionNotFound,
34 InvalidKey,
35 InvalidInvitation,
36 InvalidCreateAccount,
37 InvalidFileFormat,
38 InvalidArgument,
39 PermissionDenied,
40 InvalidPazzle,
41 InvalidMnemonic,
42 CommitLoadError(CommitLoadError),
43 ObjectParseError(ObjectParseError),
44 StorageError(StorageError),
45 NotFound,
46 JsStorageKeyNotFound,
47 IoError,
48 CommitVerifyError(CommitVerifyError),
49 LocalBrokerNotInitialized,
50 JsStorageReadError,
51 JsStorageWriteError(String),
52 CannotSaveWhenInMemoryConfig,
53 WalletNotFound,
54 WalletAlreadyAdded,
55 WalletAlreadyOpened,
56 WalletError(String),
57 BrokerError,
58 SessionNotFound,
59 SessionAlreadyStarted,
60 RepoNotFound,
61 BranchNotFound,
62 StoreNotFound,
63 UserNotFound,
64 TopicNotFound,
65 NotConnected,
66 ActorError,
67 ProtocolError(ProtocolError),
68 ServerError(ServerError),
69 InvalidResponse,
70 BootstrapError(String),
71 NotAServerError,
72 VerifierError(VerifierError),
73 SiteNotFoundOnBroker,
74 BrokerConfigErrorStr(&'static str),
75 BrokerConfigError(String),
76 MalformedEvent,
77 InvalidPayload,
78 WrongUploadId,
79 FileError(FileError),
80 InternalError,
81 OxiGraphError(String),
82 ConfigError(String),
83 LocalBrokerIsHeadless,
84 LocalBrokerIsNotHeadless,
85 InvalidNuri,
86 InvalidTarget,
87 InvalidQrCode,
88 NotImplemented,
89 NotARendezVous,
90 IncompatibleQrCode,
91 InvalidClass,
92 KeyShareNotFound,
93 BrokerNotFound,
94}
95
96impl Error for NgError {}
97
98impl fmt::Display for NgError {
99 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
100 match self {
101 Self::WalletError(string) => write!(f, "WalletError:{}", string),
102 Self::JsStorageWriteError(string) => write!(f, "JsStorageWriteError:{}", string),
103 Self::CommitVerifyError(commit_verify_error) => {
104 write!(f, "CommitVerifyError:{:?}", commit_verify_error)
105 }
106 Self::ProtocolError(error) => write!(f, "ProtocolError:{:?}", error),
107 Self::ServerError(error) => write!(f, "ServerError:{:?}", error),
108 Self::VerifierError(error) => write!(f, "VerifierError:{:?}", error),
109 Self::CommitLoadError(commit_load_error) => {
110 write!(f, "CommitLoadError:{:?}", commit_load_error)
111 }
112 Self::BootstrapError(error) => {
113 write!(f, "BootstrapError:{:?}", error)
114 }
115 Self::ObjectParseError(error) => write!(f, "ObjectParseError:{:?}", error),
116 Self::StorageError(storage_error) => write!(f, "StorageError:{:?}", storage_error),
117 Self::BrokerConfigErrorStr(s) => write!(f, "BrokerConfigError:{s}"),
118 Self::BrokerConfigError(s) => write!(f, "BrokerConfigError:{s}"),
119 _ => write!(f, "{:?}", self),
120 }
121 }
122}
123
124impl From<NgError> for std::io::Error {
125 fn from(err: NgError) -> std::io::Error {
126 match err {
127 NgError::InvalidArgument => std::io::Error::from(std::io::ErrorKind::InvalidInput),
128 NgError::PermissionDenied => std::io::Error::from(std::io::ErrorKind::PermissionDenied),
129 NgError::NotFound => std::io::Error::from(std::io::ErrorKind::NotFound),
130 _ => std::io::Error::new(std::io::ErrorKind::Other, err.to_string().as_str()),
131 }
132 }
133}
134
135impl From<serde_bare::error::Error> for NgError {
136 fn from(_e: serde_bare::error::Error) -> Self {
137 NgError::SerializationError
138 }
139}
140
141impl From<ed25519_dalek::ed25519::Error> for NgError {
142 fn from(_e: ed25519_dalek::ed25519::Error) -> Self {
143 NgError::InvalidSignature
144 }
145}
146
147impl From<CommitLoadError> for NgError {
148 fn from(e: CommitLoadError) -> Self {
149 NgError::CommitLoadError(e)
150 }
151}
152
153impl From<ObjectParseError> for NgError {
154 fn from(e: ObjectParseError) -> Self {
155 NgError::ObjectParseError(e)
156 }
157}
158
159impl From<FileError> for NgError {
160 fn from(e: FileError) -> Self {
161 NgError::FileError(e)
162 }
163}
164
165impl From<CommitVerifyError> for NgError {
166 fn from(e: CommitVerifyError) -> Self {
167 NgError::CommitVerifyError(e)
168 }
169}
170
171impl From<StorageError> for NgError {
172 fn from(e: StorageError) -> Self {
173 NgError::StorageError(e)
174 }
175}
176
177impl From<VerifierError> for NgError {
178 fn from(e: VerifierError) -> Self {
179 match e {
180 VerifierError::InvalidKey => NgError::InvalidKey,
181 VerifierError::SerializationError => NgError::SerializationError,
182 VerifierError::CommitLoadError(e) => NgError::CommitLoadError(e),
183 VerifierError::StorageError(e) => NgError::StorageError(e),
184 VerifierError::ObjectParseError(e) => NgError::ObjectParseError(e),
185 VerifierError::TopicNotFound => NgError::TopicNotFound,
186 VerifierError::RepoNotFound => NgError::RepoNotFound,
187 VerifierError::StoreNotFound => NgError::StoreNotFound,
188 VerifierError::BranchNotFound => NgError::BranchNotFound,
189 _ => NgError::VerifierError(e),
190 }
191 }
192}
193
194#[derive(Debug, PartialEq, Eq, Clone)]
196pub enum ObjectParseError {
197 MissingBlocks(Vec<BlockId>),
199 MissingRootKey,
201 InvalidBlockId,
203 InvalidChildren,
205 InvalidKeys,
207 InvalidHeader,
209 BlockDeserializeError,
211 ObjectDeserializeError,
213
214 MissingHeaderBlocks((Object, Vec<BlockId>)),
215
216 MalformedDag,
217 FilterDeserializationError,
218}
219
220#[derive(Debug, PartialEq, Eq, Clone)]
221pub enum StorageError {
222 NotFound,
223 InvalidValue,
224 DifferentValue,
225 BackendError,
226 SerializationError,
227 AlreadyExists,
228 DataCorruption,
229 UnknownColumnFamily,
230 PropertyNotFound,
231 NotAStoreRepo,
232 OverlayBranchNotFound,
233 Abort,
234 NotEmpty,
235 ServerAlreadyRunningInOtherProcess,
236 NgError(String),
237 NoDiscreteState,
238}
239
240impl core::fmt::Display for StorageError {
241 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
242 write!(f, "{:?}", self)
243 }
244}
245
246impl From<serde_bare::error::Error> for StorageError {
247 fn from(_e: serde_bare::error::Error) -> Self {
248 StorageError::SerializationError
249 }
250}
251
252impl From<NgError> for StorageError {
253 fn from(e: NgError) -> Self {
254 StorageError::NgError(e.to_string())
255 }
256}
257
258#[derive(Debug, Eq, PartialEq, TryFromPrimitive, IntoPrimitive, Clone)]
259#[repr(u16)]
260pub enum ServerError {
261 Ok = 0,
262 PartialContent,
263 EndOfStream,
264 False,
265 SequenceMismatch,
266 FileError,
267 RepoAlreadyOpened,
268 NotFound,
269 EmptyStream,
270 StorageError,
271 InvalidRequest,
272 InvalidSignature,
273 OtherError,
274 OverlayMismatch,
275 OverlayNotFound,
276 TopicNotFound,
277 AccessDenied,
278 InvalidHeader,
279 MalformedBranch,
280 BrokerError,
281 ProtocolError,
282 PeerAlreadySubscribed,
283 SubscriptionNotFound,
284 SessionNotFound,
285 SessionDetached,
286 OxiGraphError,
287 InvalidNuri,
288 InvalidTarget,
289 ExportWalletTimeOut,
290 NetError,
291}
292
293impl From<StorageError> for ServerError {
294 fn from(e: StorageError) -> Self {
295 match e {
296 StorageError::NotFound => ServerError::NotFound,
297 _ => ServerError::StorageError,
298 }
299 }
300}
301
302impl From<NetError> for ServerError {
303 fn from(e: NetError) -> Self {
304 match e {
305 _ => ServerError::NetError,
306 }
307 }
308}
309
310impl From<ProtocolError> for ServerError {
311 fn from(e: ProtocolError) -> Self {
312 match e {
313 ProtocolError::NotFound => ServerError::NotFound,
314 ProtocolError::BrokerError => ServerError::BrokerError,
315 _ => {
316 log_err!("{:?}", e);
317 ServerError::ProtocolError
318 }
319 }
320 }
321}
322
323impl From<NgError> for ServerError {
324 fn from(e: NgError) -> Self {
325 match e {
326 NgError::InvalidSignature => ServerError::InvalidSignature,
327 NgError::OxiGraphError(_) => ServerError::OxiGraphError,
328 NgError::InvalidNuri => ServerError::InvalidNuri,
329 NgError::InvalidTarget => ServerError::InvalidTarget,
330
331 _ => ServerError::OtherError,
332 }
333 }
334}
335
336impl ServerError {
337 pub fn is_stream(&self) -> bool {
338 *self == ServerError::PartialContent || *self == ServerError::EndOfStream
339 }
340 pub fn is_err(&self) -> bool {
341 *self != ServerError::Ok && !self.is_stream()
342 }
343}
344
345#[derive(Debug, Eq, PartialEq, Clone)]
346pub enum VerifierError {
347 MalformedDag,
348 MissingCommitInDag,
349 CommitBodyNotFound,
350 InvalidKey,
351 SerializationError,
352 OtherError(String),
353 CommitLoadError(CommitLoadError),
354 InvalidRepositoryCommit,
355 MissingRepoWriteCapSecret,
356 StorageError(StorageError),
357 ObjectParseError(ObjectParseError),
358 NotImplemented,
359 InvalidSignatureObject,
360 MalformedSyncSignatureAcks,
361 MalformedSyncSignatureDeps,
362 TopicNotFound,
363 RepoNotFound,
364 StoreNotFound,
365 OverlayNotFound,
366 BranchNotFound,
367 InvalidBranch,
368 NoBlockStorageAvailable,
369 RootBranchNotFound,
370 BranchNotOpened,
371 DoubleBranchSubscription,
372 InvalidCommit,
373 LocallyConnected,
374 InvalidTriple,
375 InvalidNamedGraph,
376 OxigraphError(String),
377 CannotRemoveTriplesWhenNewBranch,
378 PermissionDenied,
379 YrsError(String),
380 AutomergeError(String),
381 InvalidNuri,
382 InvalidJson,
383 NothingToSign,
384}
385
386impl Error for VerifierError {}
387
388impl core::fmt::Display for VerifierError {
389 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
390 write!(f, "{:?}", self)
391 }
392}
393
394impl From<serde_bare::error::Error> for VerifierError {
395 fn from(_e: serde_bare::error::Error) -> Self {
396 VerifierError::SerializationError
397 }
398}
399
400impl From<NgError> for VerifierError {
401 fn from(e: NgError) -> Self {
402 match e {
403 NgError::InvalidKey => VerifierError::InvalidKey,
404 NgError::RepoNotFound => VerifierError::RepoNotFound,
405 NgError::BranchNotFound => VerifierError::BranchNotFound,
406 NgError::SerializationError => VerifierError::SerializationError,
407 NgError::PermissionDenied => VerifierError::PermissionDenied,
408 NgError::VerifierError(e) => e,
409 _ => VerifierError::OtherError(e.to_string()),
414 }
415 }
416}
417
418impl From<CommitLoadError> for VerifierError {
419 fn from(e: CommitLoadError) -> Self {
420 VerifierError::CommitLoadError(e)
421 }
422}
423
424impl From<ObjectParseError> for VerifierError {
425 fn from(e: ObjectParseError) -> Self {
426 VerifierError::ObjectParseError(e)
427 }
428}
429
430impl From<StorageError> for VerifierError {
431 fn from(e: StorageError) -> Self {
432 VerifierError::StorageError(e)
433 }
434}
435
436#[derive(Debug, Eq, PartialEq, TryFromPrimitive, IntoPrimitive, Clone)]
437#[repr(u16)]
438pub enum NetError {
439 DirectionAlreadySet = 1,
440 WsError,
441 IoError,
442 ConnectionError,
443 SerializationError,
444 ProtocolError,
445 AccessDenied,
446 InternalError,
447 PeerAlreadyConnected,
448 Closing,
449} impl Error for NetError {}
452
453impl fmt::Display for NetError {
454 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
455 write!(f, "{:?}", self)
456 }
457}
458
459#[derive(Debug, Eq, PartialEq, TryFromPrimitive, IntoPrimitive, Clone)]
460#[repr(u16)]
461pub enum ProtocolError {
462 NoError = 0,
463
464 IoError,
465 WsError,
466 ActorError,
467 InvalidState,
468 InvalidSignature,
469 SerializationError,
470 AccessDenied,
471 InvitationRequired,
472 BrokerError,
473 NoLocalBrokerFound,
474 NotFound,
475 MissingBlocks,
476 ObjectParseError,
477 InvalidValue,
478 AlreadyExists,
479 RepoIdRequired,
480 InvalidPublisherAdvert,
481
482 ConnectionError,
483 Timeout,
484 Expired,
485
486 PeerAlreadyConnected,
487 UserNotConnected,
488 PeerNotConnected,
489 OtherError,
490 NetError,
491 StorageError,
492 ServerError,
493 Closing,
494 FsmNotReady,
495 MustBeEncrypted,
496 NoiseHandshakeFailed,
497 DecryptionError,
498 EncryptionError,
499 WhereIsTheMagic,
500
501 InvalidNonce,
502 InvalidMessage,
503} impl From<NetError> for ProtocolError {
506 fn from(e: NetError) -> Self {
507 match e {
508 NetError::IoError => ProtocolError::IoError,
509 NetError::WsError => ProtocolError::WsError,
510 NetError::ConnectionError => ProtocolError::ConnectionError,
511 NetError::SerializationError => ProtocolError::SerializationError,
512 NetError::ProtocolError => ProtocolError::OtherError,
513 NetError::AccessDenied => ProtocolError::AccessDenied,
514 NetError::PeerAlreadyConnected => ProtocolError::PeerAlreadyConnected,
515 NetError::Closing => ProtocolError::Closing,
516 _ => ProtocolError::NetError,
517 }
518 }
519}
520
521impl From<StorageError> for ProtocolError {
522 fn from(e: StorageError) -> Self {
523 match e {
524 StorageError::NotFound => ProtocolError::NotFound,
525 StorageError::InvalidValue => ProtocolError::InvalidValue,
526 StorageError::BackendError => ProtocolError::StorageError,
527 StorageError::SerializationError => ProtocolError::SerializationError,
528 StorageError::AlreadyExists => ProtocolError::AlreadyExists,
529 _ => ProtocolError::StorageError,
530 }
531 }
532}
533
534impl From<ProtocolError> for NgError {
535 fn from(e: ProtocolError) -> Self {
536 NgError::ProtocolError(e)
537 }
538}
539
540impl From<ServerError> for NgError {
541 fn from(e: ServerError) -> Self {
542 NgError::ServerError(e)
543 }
544}
545
546impl ProtocolError {
547 pub fn is_err(&self) -> bool {
548 *self != ProtocolError::NoError
549 }
550}
551
552impl Error for ProtocolError {}
553
554impl fmt::Display for ProtocolError {
555 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
556 write!(f, "{:?}", self)
557 }
558}
559
560impl From<NgError> for ProtocolError {
561 fn from(e: NgError) -> Self {
562 match e {
563 NgError::InvalidSignature => ProtocolError::InvalidSignature,
564 NgError::SerializationError => ProtocolError::SerializationError,
565 _ => ProtocolError::OtherError,
566 }
567 }
568}
569
570impl From<ObjectParseError> for ProtocolError {
571 fn from(_e: ObjectParseError) -> Self {
572 ProtocolError::ObjectParseError
573 }
574}
575
576impl From<serde_bare::error::Error> for ProtocolError {
577 fn from(_e: serde_bare::error::Error) -> Self {
578 ProtocolError::SerializationError
579 }
580}
581
582impl From<serde_bare::error::Error> for NetError {
583 fn from(_e: serde_bare::error::Error) -> Self {
584 NetError::SerializationError
585 }
586}