nrc_mls_sqlite_storage/
error.rs1use std::fmt;
4
5#[derive(Debug)]
7pub enum Error {
8 Database(String),
10 Rusqlite(rusqlite::Error),
12 Refinery(refinery::Error),
14 OpenMls(String),
16}
17
18impl std::error::Error for Error {}
19
20impl fmt::Display for Error {
21 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
22 match self {
23 Self::Database(msg) => write!(f, "Database error: {}", msg),
24 Self::Rusqlite(err) => write!(f, "SQLite error: {}", err),
25 Self::Refinery(msg) => write!(f, "Migration error: {}", msg),
26 Self::OpenMls(msg) => write!(f, "OpenMLS error: {}", msg),
27 }
28 }
29}
30
31impl From<rusqlite::Error> for Error {
32 fn from(e: rusqlite::Error) -> Self {
33 Self::Rusqlite(e)
34 }
35}
36
37impl From<refinery::Error> for Error {
38 fn from(e: refinery::Error) -> Self {
39 Self::Refinery(e)
40 }
41}
42
43impl From<std::io::Error> for Error {
44 fn from(e: std::io::Error) -> Self {
45 Self::Database(format!("IO error: {}", e))
46 }
47}
48
49impl From<Error> for rusqlite::Error {
50 fn from(err: Error) -> Self {
51 rusqlite::Error::FromSqlConversionFailure(
52 0,
53 rusqlite::types::Type::Text,
54 Box::new(std::io::Error::new(
55 std::io::ErrorKind::InvalidData,
56 err.to_string(),
57 )),
58 )
59 }
60}