use anyhow::Result;
use std::{path::PathBuf, process::Command, str::FromStr};
pub struct BuildOptions<'a> {
pub layer: Option<&'a str>,
pub input: Option<&'a str>,
pub output: Option<&'a str>,
}
pub fn build(options: BuildOptions) -> Result<()> {
let layer = options.layer.unwrap_or("Main");
let input = PathBuf::from_str(options.input.unwrap_or("."))?;
let output = PathBuf::from_str(options.output.unwrap_or("."))?;
let mut cmd = Command::new("idl");
cmd.arg("server");
cmd.arg(format!("--output={}", output.to_str().unwrap()))
.arg(format!("--input={}", input.to_str().unwrap()))
.arg("--language=rust")
.arg(format!("--layer={}", layer));
let mut child = cmd.spawn()?;
child.wait()?;
Ok(())
}
pub fn package(options: BuildOptions) -> Result<()> {
let layer = options.layer.unwrap_or("Main");
let input = PathBuf::from_str(options.input.unwrap_or("."))?;
let output = PathBuf::from_str(options.output.unwrap_or("."))?;
let mut cmd = Command::new("idl");
cmd.arg("server")
.arg("package")
.arg(format!("--output={}", output.to_str().unwrap()))
.arg(format!("--input={}", input.to_str().unwrap()))
.arg("--language=rust")
.arg(format!("--layer={}", layer));
let mut child = cmd.spawn()?;
child.wait()?;
Ok(())
}