use anyhow::Result;
use camino::Utf8PathBuf;
use clap::{Args, Parser};
use uniffi_bindgen::bindings::{generate_swift_bindings, SwiftBindingsOptions};
#[derive(Debug, Parser)]
#[command(version, about, long_about = None)]
struct Cli {
#[command(flatten)]
kinds: Kinds,
#[clap(name = "PATH_TO_LIBRARY_OR_UDL")]
source: Utf8PathBuf,
out_dir: Utf8PathBuf,
#[arg(long)]
xcframework: bool,
#[arg(long)]
module_name: Option<String>,
#[arg(long)]
modulemap_filename: Option<String>,
#[clap(long)]
metadata_no_deps: bool,
#[arg(long)]
link_frameworks: Vec<String>,
}
#[derive(Debug, Args)]
#[group(required = true, multiple = true)]
struct Kinds {
#[arg(long)]
swift_sources: bool,
#[arg(long)]
headers: bool,
#[arg(long)]
modulemap: bool,
}
pub fn run_main() -> Result<()> {
let cli = Cli::parse();
generate_swift_bindings(cli.into())
}
impl From<Cli> for SwiftBindingsOptions {
fn from(cli: Cli) -> Self {
Self {
generate_swift_sources: cli.kinds.swift_sources,
generate_headers: cli.kinds.headers,
generate_modulemap: cli.kinds.modulemap,
source: cli.source,
out_dir: cli.out_dir,
xcframework: cli.xcframework,
module_name: cli.module_name,
modulemap_filename: cli.modulemap_filename,
metadata_no_deps: cli.metadata_no_deps,
link_frameworks: cli.link_frameworks,
}
}
}