nomad_protocol/core/
error.rs1use thiserror::Error;
4
5#[derive(Debug, Error, Clone)]
7pub enum ApplyError {
8 #[error("invalid diff format")]
10 InvalidFormat,
11
12 #[error("diff version mismatch: expected {expected}, got {actual}")]
14 VersionMismatch {
15 expected: u64,
17 actual: u64,
19 },
20
21 #[error("state corruption detected")]
23 StateCorruption,
24}
25
26#[derive(Debug, Error, Clone)]
28pub enum DecodeError {
29 #[error("invalid encoding: {0}")]
31 InvalidEncoding(String),
32
33 #[error("unexpected end of data")]
35 UnexpectedEof,
36
37 #[error("unsupported version: {0}")]
39 UnsupportedVersion(u8),
40}
41
42#[derive(Debug, Error)]
44pub enum CryptoError {
45 #[error("handshake failed: {0}")]
47 HandshakeFailed(String),
48
49 #[error("AEAD encryption failed")]
51 EncryptionFailed,
52
53 #[error("AEAD decryption failed (invalid tag or corrupted)")]
55 DecryptionFailed,
56
57 #[error("nonce counter exhausted - session must terminate")]
59 CounterExhaustion,
60
61 #[error("epoch exhausted - session must terminate")]
63 EpochExhaustion,
64
65 #[error("replay detected")]
67 ReplayDetected,
68
69 #[error("key derivation failed")]
71 KeyDerivationFailed,
72}
73
74#[derive(Debug, Error)]
76pub enum SyncError {
77 #[error("apply error: {0}")]
79 Apply(#[from] ApplyError),
80
81 #[error("decode error: {0}")]
83 Decode(#[from] DecodeError),
84}
85
86#[derive(Debug, Error)]
88pub enum NomadError {
89 #[error("sync error: {0}")]
91 Sync(#[from] SyncError),
92
93 #[error("crypto error: {0}")]
95 Crypto(#[from] CryptoError),
96
97 #[error("configuration error: {0}")]
99 Config(String),
100
101 #[error("i/o error: {0}")]
103 Io(#[from] std::io::Error),
104}