stored/
error.rs

1// Storage daemon (stored): microservice frontend for different storage backends
2// used in LNP/BP nodes.
3//
4// Written in 2022 by
5//     Dr. Maxim Orlovsky <orlovsky@lnp-bp.org>
6//
7// Copyright (C) 2022 by LNP/BP Standards Association, Switzerland.
8//
9// You should have received a copy of the MIT License along with this software.
10// If not, see <https://opensource.org/licenses/MIT>.
11
12use microservices::rpc;
13use store_rpc::{FailureCode, Reply};
14
15#[derive(Clone, PartialEq, Eq, Debug, Display, Error, From)]
16#[display(doc_comments)]
17pub enum LaunchError {
18    #[from]
19    #[display(inner)]
20    Database(sled::Error),
21}
22
23impl microservices::error::Error for LaunchError {}
24
25#[derive(Clone, PartialEq, Eq, Debug, Display, Error, From)]
26#[display(doc_comments)]
27pub enum DaemonError {
28    #[from]
29    #[display(inner)]
30    Database(sled::Error),
31
32    /// unknown database table '{0}'
33    UnknownTable(String),
34
35    #[from]
36    #[display(inner)]
37    Encoding(strict_encoding::Error),
38}
39
40impl microservices::error::Error for DaemonError {}
41
42impl From<DaemonError> for Reply {
43    fn from(err: DaemonError) -> Self {
44        let code = match err {
45            DaemonError::Database(_) => FailureCode::Database,
46            DaemonError::UnknownTable(_) => FailureCode::Database,
47            DaemonError::Encoding(_) => FailureCode::Encoding,
48        };
49        Reply::Failure(rpc::Failure {
50            code: code.into(),
51            info: err.to_string(),
52        })
53    }
54}