persistant_relational/
error.rs1use std::fmt;
3
4#[derive(Debug, Clone, PartialEq, Eq)]
7#[non_exhaustive]
8pub enum RelError {
9 UniqueViolation {
11 constraint: Option<String>,
13 },
14 ForeignKeyViolation {
16 constraint: Option<String>,
18 },
19 CheckViolation {
21 constraint: Option<String>,
23 },
24 Serialization,
26 Deadlock,
28 Unavailable(String),
30 Unsupported(String),
32 Backend(String),
34}
35
36impl fmt::Display for RelError {
37 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
38 let c = |c: &Option<String>| c.as_deref().unwrap_or("?").to_string();
39 match self {
40 RelError::UniqueViolation { constraint } => {
41 write!(f, "unique violation ({})", c(constraint))
42 }
43 RelError::ForeignKeyViolation { constraint } => {
44 write!(f, "foreign key violation ({})", c(constraint))
45 }
46 RelError::CheckViolation { constraint } => {
47 write!(f, "check violation ({})", c(constraint))
48 }
49 RelError::Serialization => f.write_str("serialization failure"),
50 RelError::Deadlock => f.write_str("deadlock detected"),
51 RelError::Unavailable(m) => write!(f, "database unavailable: {m}"),
52 RelError::Unsupported(m) => write!(f, "database does not support: {m}"),
53 RelError::Backend(m) => write!(f, "database: {m}"),
54 }
55 }
56}
57
58impl std::error::Error for RelError {}