ts-webapi 0.4.11

Library for my web API projects
Documentation
//! Trait for providing convenience functions to mark an error as a given type.

use core::error::Error;

use ts_error::{IntoReport, LogError};

use crate::error_response::ErrorResponse;

/// Trait for providing convenience functions to mark an error as a given type.
pub trait IntoErrorResponse<T> {
    /// Mark the error as an internal server error.
    #[track_caller]
    fn internal_server_error(self) -> Result<T, ErrorResponse>;

    /// Mark the error as caused because the resource could not be found.
    #[track_caller]
    fn not_found(self) -> Result<T, ErrorResponse>;
}

impl<T, E: Error + 'static> IntoErrorResponse<T> for Result<T, E> {
    #[track_caller]
    fn internal_server_error(self) -> Result<T, ErrorResponse> {
        match self.into_report().log_err() {
            Ok(v) => Ok(v),
            Err(_) => Err(ErrorResponse::InternalServerError),
        }
    }

    #[track_caller]
    fn not_found(self) -> Result<T, ErrorResponse> {
        match self {
            Ok(v) => Ok(v),
            Err(_) => Err(ErrorResponse::NotFound),
        }
    }
}

impl<T> IntoErrorResponse<T> for Option<T> {
    #[track_caller]
    fn internal_server_error(self) -> Result<T, ErrorResponse> {
        match self.log_err() {
            Some(v) => Ok(v),
            None => Err(ErrorResponse::InternalServerError),
        }
    }

    #[track_caller]
    fn not_found(self) -> Result<T, ErrorResponse> {
        match self {
            Some(v) => Ok(v),
            None => Err(ErrorResponse::NotFound),
        }
    }
}