cargo-ohos-app 0.1.81

Cargo subcommand for packaging Rust GUI apps as OHOS applications
Documentation
use std::path::PathBuf;

use clap::{Args, Parser, Subcommand, ValueEnum};

#[derive(Debug, Parser)]
#[command(
    bin_name = "cargo ohos-app",
    author,
    version,
    about = "Package Rust GUI applications as OHOS apps"
)]
pub struct Cli {
    #[command(subcommand)]
    pub command: Commands,
}

#[derive(Debug, Subcommand)]
pub enum Commands {
    Init(InitCommand),
    Build(BuildCommand),
    Package(PackageCommand),
}

#[derive(Debug, Clone, Args, Default)]
pub struct CommonArgs {
    #[arg(long)]
    pub deveco_studio_dir: Option<PathBuf>,
    #[arg(long)]
    pub ohpm_path: Option<PathBuf>,
    #[arg(long)]
    pub sdk_root: Option<PathBuf>,
    #[arg(long)]
    pub sdk_version: Option<String>,
    #[arg(long)]
    pub version_name: Option<String>,
    #[arg(long)]
    pub version_code: Option<u32>,
    #[arg(long)]
    pub manifest_path: Option<PathBuf>,
    #[arg(long)]
    pub target: Option<String>,
    #[arg(long)]
    pub out_dir: Option<PathBuf>,
    #[arg(long)]
    pub bundle_name: Option<String>,
    #[arg(long)]
    pub app_name: Option<String>,
    #[arg(long)]
    pub module_name: Option<String>,
    #[arg(long)]
    pub app_icon_path: Option<PathBuf>,
    #[arg(long)]
    pub start_icon_path: Option<PathBuf>,
    #[arg(long)]
    pub release: bool,
    #[arg(long)]
    pub dry_run: bool,
}

#[derive(Debug, Clone, Args)]
pub struct InitCommand {
    #[command(flatten)]
    pub common: CommonArgs,
}

#[derive(Debug, Clone, Args)]
pub struct BuildCommand {
    #[command(flatten)]
    pub common: CommonArgs,
}

#[derive(Debug, Clone, Args)]
pub struct PackageCommand {
    #[command(flatten)]
    pub common: CommonArgs,
    #[arg(long, value_enum, default_value_t = PackageArtifact::Hap)]
    pub artifact: PackageArtifact,
    #[arg(long)]
    pub skip_init: bool,
    #[arg(long)]
    pub skip_rust_build: bool,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq, ValueEnum)]
pub enum PackageArtifact {
    Hap,
    App,
}