use super::PluginIosFramework;
use crate::{
error::{Context, ErrorExt},
Result,
};
use clap::Parser;
use std::path::PathBuf;
#[derive(Debug, Parser)]
#[clap(about = "Initializes a new Tauri plugin project")]
pub struct Options {
plugin_name: String,
#[clap(long)]
no_api: bool,
#[clap(long)]
no_example: bool,
#[clap(short, long)]
directory: Option<String>,
#[clap(short, long)]
author: Option<String>,
#[clap(long)]
android: bool,
#[clap(long)]
ios: bool,
#[clap(long)]
mobile: bool,
#[clap(long)]
#[clap(default_value_t = PluginIosFramework::default())]
pub(crate) ios_framework: PluginIosFramework,
#[clap(long)]
github_workflows: bool,
#[clap(long, hide(true))]
tauri: bool,
#[clap(short, long)]
tauri_path: Option<PathBuf>,
}
impl From<Options> for super::init::Options {
fn from(o: Options) -> Self {
Self {
plugin_name: Some(o.plugin_name),
no_api: o.no_api,
no_example: o.no_example,
directory: o.directory.unwrap(),
author: o.author,
android: o.android,
ios: o.ios,
mobile: o.mobile,
ios_framework: o.ios_framework,
github_workflows: o.github_workflows,
tauri: o.tauri,
tauri_path: o.tauri_path,
}
}
}
pub fn command(mut options: Options) -> Result<()> {
let cwd = std::env::current_dir().context("failed to get current directory")?;
if let Some(dir) = &options.directory {
std::fs::create_dir_all(cwd.join(dir))
.fs_context("failed to create crate directory", cwd.join(dir))?;
} else {
let target = cwd.join(format!("tauri-plugin-{}", options.plugin_name));
std::fs::create_dir_all(&target)
.fs_context("failed to create crate directory", target.clone())?;
options.directory.replace(target.display().to_string());
}
super::init::command(options.into())
}