polyphony_types/
errors.rs1use 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}