use std::path::PathBuf;
use clap::Args;
use crate::wiki::{Wiki, WikiError};
mod branch;
mod cmp;
#[derive(Args, Debug, Clone)]
pub struct StatusParameter {
#[arg(index = 1, required = true)]
pub req_folder: PathBuf,
#[arg(long, alias = "branch-name", required = false, default_value = "main")]
pub branch: String,
#[arg(long, alias = "repo")]
pub repo_name: Option<String>,
#[arg(long)]
pub cmp_branch: Option<String>,
#[arg(long, alias = "cmp-repo")]
pub cmp_repo_name: Option<String>,
#[arg(long)]
pub detail_ready: bool,
#[arg(long)]
pub detail_active: bool,
#[arg(long)]
pub detail_deprecated: bool,
#[arg(long)]
pub detail_manual: bool,
}
pub fn status(param: &StatusParameter) -> Result<(), StatusError> {
let wiki = Wiki::try_from(¶m.req_folder)?;
let overview = match ¶m.cmp_branch {
Some(branch_b) => self::cmp::status_cmp(
&wiki,
param.repo_name.as_deref(),
¶m.branch,
param.cmp_repo_name.as_deref(),
branch_b,
),
None => self::branch::status_branch(&wiki, param),
};
println!("{overview}");
Ok(())
}
#[derive(Debug, thiserror::Error, logid::ErrLogId)]
pub enum StatusError {
#[error("Failed to parse the wiki.")]
WikiSetup,
}
impl From<WikiError> for StatusError {
fn from(_value: WikiError) -> Self {
StatusError::WikiSetup
}
}