pub enum ClientError { BadJsonBody(String), BadAuthTokenHeader(String), UsernameIsTaken { username: String }, InvalidPassword, NotAuthorized, UserNotFound { id: i64 }, QueueNotFound { id: i64 }, } impl ClientError { pub fn kind(&self) -> String { match self { Self::BadJsonBody(..) => "BadJsonBody", Self::BadAuthTokenHeader(..) => "BadAuthTokenHeader", Self::UsernameIsTaken { .. } => "UsernameIsTaken", Self::InvalidPassword => "InvalidPassword", Self::NotAuthorized => "NotAuthorized", Self::UserNotFound { .. } => "UserNotFound", Self::QueueNotFound { .. } => "QueueNotFound", } .to_string() } pub fn into_message(self) -> String { match self { Self::BadJsonBody(msg) => msg, Self::BadAuthTokenHeader(msg) => msg, Self::UsernameIsTaken { username } => { format!("username `{}` is taken", username) } Self::InvalidPassword => format!("password is invalid"), Self::NotAuthorized => format!("user is not authorized"), Self::UserNotFound { id } => format!("user with id `{}` not found", id), Self::QueueNotFound { id } => format!("queue with id `{}` not found", id), } } }