mod build;
mod host;
mod info;
mod init_cmd;
mod run;
mod sig;
mod wasm_target;
use std::path::PathBuf;
use anyhow::Result;
use clap::Subcommand;
#[derive(Debug, Subcommand)]
pub enum ModuleCommand {
Init {
#[arg(long)]
headless: bool,
#[arg(long)]
org: Option<String>,
#[arg(long)]
name: Option<String>,
#[arg(value_name = "PATH")]
path: Option<PathBuf>,
},
Run {
#[arg(long = "arg", value_parser = parse_value)]
args: Vec<surrealdb_types::Value>,
#[arg(long)]
fnc: Option<String>,
#[arg(value_name = "FILE")]
file: PathBuf,
},
Sig {
#[arg(long)]
fnc: Option<String>,
#[arg(value_name = "FILE")]
file: PathBuf,
},
Info {
#[arg(value_name = "FILE")]
file: PathBuf,
},
Build {
#[arg(long)]
debug: bool,
#[arg(short = 'o', long)]
out: Option<PathBuf>,
#[arg(value_name = "SOURCE_PATH")]
path: Option<PathBuf>,
},
}
pub(super) fn parse_value(s: &str) -> Result<surrealdb_types::Value, String> {
crate::core::syn::value(s).map_err(|e| format!("Invalid value: {e}"))
}
pub async fn init(cmd: ModuleCommand) -> Result<()> {
match cmd {
ModuleCommand::Init {
headless,
org,
name,
path,
} => init_cmd::init(path, org, name, headless).await,
ModuleCommand::Run {
args,
fnc,
file,
} => run::init(file, fnc, args).await,
ModuleCommand::Sig {
fnc,
file,
} => sig::init(file, fnc).await,
ModuleCommand::Info {
file,
} => info::init(file).await,
ModuleCommand::Build {
debug,
out,
path,
} => build::init(path, out, debug).await,
}
}