merge-ready 0.2.1

Show pull request merge blockers as concise prompt tokens
use super::super::domain::config::{Config, TokenConfig, render_token};
use super::super::domain::repository::ConfigRepository;

pub struct ConfigService(Config);

impl ConfigService {
    pub fn new(repo: &impl ConfigRepository) -> Self {
        Self(repo.load())
    }

    pub fn render_merge_ready(&self) -> String {
        render_token(
            self.0.merge_ready.as_ref().unwrap_or(&default_token()),
            "",
            "merge-ready",
        )
    }

    pub fn render_conflict(&self) -> String {
        render_token(
            self.0.conflict.as_ref().unwrap_or(&default_token()),
            "",
            "conflict",
        )
    }

    pub fn render_update_branch(&self) -> String {
        render_token(
            self.0.update_branch.as_ref().unwrap_or(&default_token()),
            "",
            "update-branch",
        )
    }

    pub fn render_sync_unknown(&self) -> String {
        render_token(
            self.0.sync_unknown.as_ref().unwrap_or(&default_token()),
            "?",
            "sync-unknown",
        )
    }

    pub fn render_ci_fail(&self) -> String {
        render_token(
            self.0.ci_fail.as_ref().unwrap_or(&default_token()),
            "",
            "ci-fail",
        )
    }

    pub fn render_ci_action(&self) -> String {
        render_token(
            self.0.ci_action.as_ref().unwrap_or(&default_token()),
            "",
            "ci-action",
        )
    }

    pub fn render_review(&self) -> String {
        render_token(
            self.0.review.as_ref().unwrap_or(&default_token()),
            "",
            "review",
        )
    }

    pub fn render_auth_required(&self) -> String {
        render_token(
            self.0
                .error
                .as_ref()
                .and_then(|ec| ec.auth_required.as_ref())
                .unwrap_or(&default_token()),
            "!",
            "gh auth login",
        )
    }

    pub fn render_rate_limited(&self) -> String {
        render_token(
            self.0
                .error
                .as_ref()
                .and_then(|ec| ec.rate_limited.as_ref())
                .unwrap_or(&default_token()),
            "",
            "rate-limited",
        )
    }

    pub fn render_api_error(&self) -> String {
        render_token(
            self.0
                .error
                .as_ref()
                .and_then(|ec| ec.api_error.as_ref())
                .unwrap_or(&default_token()),
            "",
            "api-error",
        )
    }
}

fn default_token() -> TokenConfig {
    TokenConfig {
        symbol: None,
        label: None,
        format: None,
    }
}