use crate::contexts::prompt::domain::error::RepositoryError;
pub trait ErrorLogger {
fn log(&self, msg: &str);
}
#[derive(Clone, Copy)]
pub enum ErrorToken {
AuthRequired,
RateLimited,
ApiError,
}
pub trait ErrorPresenter {
fn show_error(&self, token: ErrorToken);
}
pub fn handle(
e: RepositoryError,
err_logger: &impl ErrorLogger,
err_presenter: &impl ErrorPresenter,
) {
match e {
RepositoryError::Unauthenticated => {
err_presenter.show_error(ErrorToken::AuthRequired);
}
RepositoryError::NotFound => {}
RepositoryError::RateLimited => {
err_logger.log("rate limit");
err_presenter.show_error(ErrorToken::RateLimited);
}
RepositoryError::Unexpected(msg) => {
err_logger.log(&msg);
err_presenter.show_error(ErrorToken::ApiError);
}
}
}