1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
use serde::Serialize; use thiserror::Error as ThisError; use crate::data::{RowError, TableError, ValueError}; use crate::executor::{ AggregateError, BlendError, EvaluateError, ExecuteError, FetchError, FilterError, JoinError, LimitError, SelectError, UpdateError, }; #[cfg(feature = "alter-table")] use crate::store::AlterTableError; #[derive(ThisError, Serialize, Debug)] pub enum Error { #[cfg(feature = "alter-table")] #[error(transparent)] AlterTable(#[from] AlterTableError), #[error(transparent)] #[serde(with = "stringify")] Storage(#[from] Box<dyn std::error::Error>), #[error(transparent)] Execute(#[from] ExecuteError), #[error(transparent)] Fetch(#[from] FetchError), #[error(transparent)] Evaluate(#[from] EvaluateError), #[error(transparent)] Select(#[from] SelectError), #[error(transparent)] Join(#[from] JoinError), #[error(transparent)] Blend(#[from] BlendError), #[error(transparent)] Aggregate(#[from] AggregateError), #[error(transparent)] Update(#[from] UpdateError), #[error(transparent)] Filter(#[from] FilterError), #[error(transparent)] Limit(#[from] LimitError), #[error(transparent)] Row(#[from] RowError), #[error(transparent)] Table(#[from] TableError), #[error(transparent)] Value(#[from] ValueError), } pub type Result<T> = std::result::Result<T, Error>; pub type MutResult<T, U> = std::result::Result<(T, U), (T, Error)>; impl PartialEq for Error { fn eq(&self, other: &Error) -> bool { use Error::*; match (self, other) { #[cfg(feature = "alter-table")] (AlterTable(e), AlterTable(e2)) => e == e2, (Execute(e), Execute(e2)) => e == e2, (Fetch(e), Fetch(e2)) => e == e2, (Evaluate(e), Evaluate(e2)) => e == e2, (Select(e), Select(e2)) => e == e2, (Join(e), Join(e2)) => e == e2, (Blend(e), Blend(e2)) => e == e2, (Aggregate(e), Aggregate(e2)) => e == e2, (Update(e), Update(e2)) => e == e2, (Filter(e), Filter(e2)) => e == e2, (Limit(e), Limit(e2)) => e == e2, (Row(e), Row(e2)) => e == e2, (Table(e), Table(e2)) => e == e2, (Value(e), Value(e2)) => e == e2, _ => false, } } } mod stringify { use serde::Serializer; use std::fmt::Display; pub fn serialize<T, S>(value: &T, serializer: S) -> Result<S::Ok, S::Error> where T: Display, S: Serializer, { serializer.collect_str(value) } }