1use std::array::TryFromSliceError;
2use std::error::Error as StdError;
3use std::fmt::Debug;
4use std::fmt::Display;
5use std::io::Error as StdioError;
6use std::num::{ParseFloatError, ParseIntError};
7use std::sync::MutexGuard;
8use std::sync::PoisonError;
9
10use sq3_parser::Sq3ParserError;
11
12use crate::io::SqliteRawIo;
13
14pub type SqliteResult<T> = Result<T, SqliteError>;
15
16#[derive(Debug)]
17pub enum SqliteError {
18 EmptyDb,
19 InvalidFileUriMode,
20 HeaderValidationError(String),
21 TryFromSliceError(TryFromSliceError),
22 ParseFloatError(ParseFloatError),
23 ParseIntError(ParseIntError),
24 StdioError(StdioError),
25 Custom(String),
26 ParsingField(FieldParsingError),
27 InvalidPayloadSize(InvalidPayloadSizeError),
28 SqlParser(Sq3ParserError),
29 SqliteIoMutexPoisonError,
30}
31
32impl From<Sq3ParserError> for SqliteError {
33 fn from(error: Sq3ParserError) -> Self {
34 Self::SqlParser(error)
35 }
36}
37
38impl From<PoisonError<MutexGuard<'_, (dyn SqliteRawIo + 'static)>>> for SqliteError {
39 fn from(_: PoisonError<MutexGuard<'_, (dyn SqliteRawIo + 'static)>>) -> Self {
40 Self::SqliteIoMutexPoisonError
41 }
42}
43#[derive(Debug)]
44pub struct FieldParsingError(pub String);
45
46#[derive(Debug)]
47pub struct InvalidPayloadSizeError(pub String);
48
49impl Display for SqliteError {
50 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
51 write!(f, "{:?}", self)
53 }
54}
55
56impl From<TryFromSliceError> for SqliteError {
57 fn from(error: TryFromSliceError) -> Self {
58 Self::TryFromSliceError(error)
59 }
60}
61
62impl From<ParseFloatError> for SqliteError {
63 fn from(error: ParseFloatError) -> Self {
64 Self::ParseFloatError(error)
65 }
66}
67
68impl From<ParseIntError> for SqliteError {
69 fn from(error: ParseIntError) -> Self {
70 Self::ParseIntError(error)
71 }
72}
73
74impl StdError for SqliteError {}
75
76impl From<StdioError> for SqliteError {
77 fn from(io_error: StdioError) -> Self {
78 Self::StdioError(io_error)
79 }
80}