core_crypto/transaction_context/
error.rs

1// We allow missing documentation in the error module because the types are generally self-descriptive.
2#![allow(missing_docs)]
3
4use super::e2e_identity;
5use crate::mls::conversation::pending_conversation::PendingConversation;
6
7/// A module-specific [Result][core::result::Result] type with a default error variant.
8pub type Result<T, E = Error> = core::result::Result<T, E>;
9
10/// Errors produced during a transaction
11#[derive(Debug, thiserror::Error)]
12pub enum Error {
13    #[error("caller error: {0}")]
14    CallerError(&'static str),
15    #[error("This transaction context has already been finished and can no longer be used.")]
16    InvalidTransactionContext,
17    #[error("The conversation with the specified id is pending")]
18    PendingConversation(PendingConversation),
19    #[error("Couldn't find client")]
20    ClientNotFound(crate::ClientId),
21    #[error("Proteus client hasn't been initialized")]
22    ProteusNotInitialized,
23    #[error("Serializing {item} for TLS")]
24    TlsSerialize {
25        item: &'static str,
26        #[source]
27        source: tls_codec::Error,
28    },
29    #[error("Deserializing {item} for TLS")]
30    TlsDeserialize {
31        item: &'static str,
32        #[source]
33        source: tls_codec::Error,
34    },
35    #[error(transparent)]
36    E2EIdentity(#[from] e2e_identity::Error),
37    #[error(transparent)]
38    Keystore(#[from] crate::KeystoreError),
39    #[error(transparent)]
40    Mls(#[from] crate::MlsError),
41    #[error("{0}")]
42    Leaf(#[from] crate::LeafError),
43    #[error(transparent)]
44    Recursive(#[from] crate::RecursiveError),
45}
46
47impl Error {
48    pub fn tls_serialize(item: &'static str) -> impl FnOnce(tls_codec::Error) -> Self {
49        move |source| Self::TlsSerialize { item, source }
50    }
51
52    pub fn tls_deserialize(item: &'static str) -> impl FnOnce(tls_codec::Error) -> Self {
53        move |source| Self::TlsDeserialize { item, source }
54    }
55}