Skip to main content

zoi_cli/cmd/package/
inspect.rs

1use anyhow::{Result, anyhow};
2use clap::Parser;
3use std::path::PathBuf;
4
5#[derive(Parser, Debug)]
6pub struct InspectCommand {
7    /// Path to the package file (e.g. path/to/name.pkg.lua)
8    #[arg(required = true)]
9    pub package_file: PathBuf,
10
11    /// Output the metadata as JSON
12    #[arg(long)]
13    pub json: bool,
14
15    /// Validate as this target platform (defaults to current platform)
16    #[arg(long)]
17    pub platform: Option<String>,
18
19    /// Override package version while inspecting
20    #[arg(long)]
21    pub version_override: Option<String>,
22}
23
24pub fn run(args: InspectCommand) -> Result<()> {
25    let platform = match args.platform {
26        Some(p) => p,
27        None => crate::pkg::utils::get_platform()?,
28    };
29
30    let file_path = args.package_file.to_str().ok_or_else(|| {
31        anyhow!(
32            "Path contains invalid UTF-8 characters: {:?}",
33            args.package_file
34        )
35    })?;
36
37    let package = crate::pkg::lua::parser::parse_lua_package_for_platform(
38        file_path,
39        &platform,
40        args.version_override.as_deref(),
41        None,
42        true,
43    )?;
44
45    if args.json {
46        let json = serde_json::to_string_pretty(&package)?;
47        println!("{}", json);
48    } else {
49        println!(
50            "{} {} - {}",
51            package.name,
52            package.version.as_deref().unwrap_or("latest"),
53            package.repo
54        );
55        println!("{}", package.description);
56    }
57
58    Ok(())
59}