polyphony_types/
errors.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, thiserror::Error)]
4pub enum Error {
5    #[cfg(feature = "sqlx")]
6    #[error("SQLX error: {0}")]
7    SQLX(#[from] sqlx::Error),
8
9    #[error("serde: {0}")]
10    Serde(#[from] serde_json::Error),
11
12    #[error(transparent)]
13    IO(#[from] std::io::Error),
14
15    #[error(transparent)]
16    FieldFormat(#[from] FieldFormatError),
17}
18
19#[derive(Debug, PartialEq, Eq, thiserror::Error)]
20pub enum FieldFormatError {
21    #[error("Password must be between 1 and 72 characters.")]
22    PasswordError,
23    #[error("Username must be between 2 and 32 characters.")]
24    UsernameError,
25    #[error("Consent must be 'true' to register.")]
26    ConsentError,
27    #[error("The provided email address is in an invalid format.")]
28    EmailError,
29}
30
31#[derive(Serialize, Deserialize, Debug)]
32pub struct ErrorResponse {
33    pub code: i32,
34    pub message: String,
35    pub errors: IntermittentError,
36}
37
38#[derive(Serialize, Deserialize, Debug)]
39pub struct IntermittentError {
40    #[serde(flatten)]
41    pub errors: std::collections::HashMap<String, ErrorField>,
42}
43
44#[derive(Serialize, Deserialize, Debug, Default)]
45pub struct ErrorField {
46    #[serde(default)]
47    pub _errors: Vec<APIError>,
48}
49
50#[derive(Serialize, Deserialize, Debug)]
51pub struct APIError {
52    pub message: String,
53    pub code: String,
54}