use crate::formulation_provider::{CommandProvider, ExecMode, MyCommand};
use clap::Parser;
use std::process::Command;
#[derive(Parser, Debug)]
#[command(name = "o2-rust-webapp")]
pub struct O2RustWebAppContext {
#[arg(short, long)]
pub project_name: String,
#[arg(long, default_value_t = false)]
pub wants_frontend: bool,
#[arg(short, long, default_value = "aws")]
pub cloud_provider: String,
}
pub struct O2RustWebAppProvider;
impl CommandProvider for O2RustWebAppProvider {
type Context = O2RustWebAppContext;
fn init_context() -> std::io::Result<Self::Context> {
let ctx = O2RustWebAppContext::parse();
Ok(ctx)
}
fn get_commands(ctx: &Self::Context) -> Vec<MyCommand> {
let mut cmds = Vec::new();
let mut build_cmd = Command::new("echo");
build_cmd.arg(format!("Building project: {}", ctx.project_name));
cmds.push(MyCommand::new(build_cmd, ExecMode::Sequential));
if ctx.wants_frontend {
let mut frontend_cmd = Command::new("echo");
frontend_cmd.arg("Setting up frontend for o2-rust-webapp");
cmds.push(MyCommand::new(frontend_cmd, ExecMode::Sequential));
}
let mut cloud_cmd = Command::new("echo");
cloud_cmd.arg(format!(
"Deploying to cloud provider: {}",
ctx.cloud_provider
));
cmds.push(MyCommand::new(cloud_cmd, ExecMode::Parallel));
cmds
}
}