huber 1.0.11

Huber, simplify GitHub package management
Documentation
use std::io::stdout;

use async_trait::async_trait;
use clap::{Args, ValueHint};
use libcli_rs::output;
use libcli_rs::output::{OutputFactory, OutputTrait};
use simpledi_rs::di::{DIContainer, DIContainerTrait};

use crate::cmd::CommandTrait;
use crate::model::config::Config;
use crate::service::package::PackageService;
use crate::service::release::ReleaseService;
use crate::service::ItemOperationTrait;

#[derive(Args)]
pub struct InfoArgs {
    #[arg(help = "Package name", num_args = 1, value_hint = ValueHint::Unknown)]
    name: String,
}

#[async_trait]
impl CommandTrait for InfoArgs {
    async fn run(&self, config: &Config, container: &DIContainer) -> anyhow::Result<()> {
        let pkg_service = container.get::<PackageService>().unwrap();
        let release_service = container.get::<ReleaseService>().unwrap();

        let pkg = pkg_service.get(&self.name)?;
        let release = release_service.get_latest(&pkg).await?;

        output!(
            config.output_format,
            .display(
                stdout(),
                &release.package,
                None,
                Some(vec!["detail"]),
            )
        )
    }
}