malvin 0.2.9

Non-interactive research and coding agent
use super::{Exit, print_command_error};
use crate::cli::args::Cli;

fn entrypoint_doc_exit(cli: &Cli) -> Exit {
    match crate::cli::command_docs::print_doc_for_cli(cli) {
        Ok(()) => Exit::Success,
        Err(e) => {
            print_command_error(&e);
            Exit::Failure
        }
    }
}

fn entrypoint_advice_exit(tag: &str) -> Exit {
    match crate::cli::advice_cmd::print_advice(tag) {
        Ok(()) => Exit::Success,
        Err(e) => {
            print_command_error(&e);
            Exit::Failure
        }
    }
}

fn entrypoint_advice_list_exit() -> Exit {
    match crate::cli::advice_cmd::print_advice_list() {
        Ok(()) => Exit::Success,
        Err(e) => {
            print_command_error(&e);
            Exit::Failure
        }
    }
}

fn entrypoint_credits_exit() -> Exit {
    match crate::cli::credits_cmd::print_credits() {
        Ok(()) => Exit::Success,
        Err(e) => {
            print_command_error(&e);
            Exit::Failure
        }
    }
}

pub(crate) fn entrypoint_advice_or_doc_exit(cli: &Cli) -> Option<Exit> {
    if cli.shared.credits {
        return Some(entrypoint_credits_exit());
    }
    if let Some(tag) = cli.shared.advice.as_deref() {
        if tag.is_empty() {
            return Some(entrypoint_advice_list_exit());
        }
        return Some(entrypoint_advice_exit(tag));
    }
    if cli.shared.doc {
        return Some(entrypoint_doc_exit(cli));
    }
    None
}