From 9f8f49283d5932de91d189cd5a72309807ece00b Mon Sep 17 00:00:00 2001 From: Dennis Kobert Date: Tue, 3 Mar 2020 16:16:03 +0100 Subject: Restructure the project --- src/errors.rs | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 src/errors.rs (limited to 'src/errors.rs') diff --git a/src/errors.rs b/src/errors.rs new file mode 100644 index 0000000..d9893ba --- /dev/null +++ b/src/errors.rs @@ -0,0 +1,64 @@ +use rocket::http::ContentType; +use rocket::request::Request; +use rocket::response::{self, Responder, Response}; +use rspotify::spotify::client::ApiError; +use rspotify::spotify::oauth2::SpotifyOAuth; +use std::io::Cursor; +use std::sync::{MutexGuard, PoisonError}; +use tokio_postgres::error::Error as DbError; + +#[derive(Debug)] +pub enum Error { + Postgres(DbError), + Spotify(ApiError), + Misc(String), +} +impl From for Error { + fn from(error: DbError) -> Self { + Error::Postgres(error) + } +} +impl From for Error { + fn from(error: ApiError) -> Self { + Error::Spotify(error) + } +} +impl From<&str> for Error { + fn from(error: &str) -> Self { + Error::Misc(error.to_owned()) + } +} +impl From for Error { + fn from(error: String) -> Self { + Error::Misc(error) + } +} +impl<'a> From>>> for Error { + fn from(error: PoisonError>>) -> Self { + Error::Misc(format!("failed to lock the client mutex: {:?}", error)) + } +} +impl<'a> From>> for Error { + fn from(error: PoisonError>) -> Self { + Error::Misc(format!("failed to lock the client mutex: {:?}", error)) + } +} +impl<'a> From for Error { + fn from(error: std::option::NoneError) -> Self { + Error::Misc(format!("tried to unwrap none at: {:?}", error)) + } +} +impl<'a> Responder<'a> for Error { + fn respond_to(self, _: &Request) -> response::Result<'a> { + let response = match self { + Error::Postgres(e) => format!("DB Error: {:?}", e), + Error::Spotify(e) => format!("Spotify Error: {:?}", e), + Error::Misc(e) => format!("Error: {}", e), + }; + Response::build() + .header(ContentType::Plain) + .status(rocket::http::Status::raw(500)) + .sized_body(Cursor::new(response)) + .ok() + } +} -- cgit v1.2.3-54-g00ecf