Skip to main content

serverust_cli/
commands.rs

1use std::path::Path;
2use std::process::Command;
3
4use crate::cli::Arch;
5
6/// `cargo build [--release]`.
7pub fn build_cargo_command(release: bool) -> Command {
8    let mut cmd = Command::new("cargo");
9    cmd.arg("build");
10    if release {
11        cmd.arg("--release");
12    }
13    cmd
14}
15
16/// `cargo watch -x run` — hot-reload local.
17pub fn dev_cargo_command() -> Command {
18    let mut cmd = Command::new("cargo");
19    cmd.arg("watch").arg("-x").arg("run");
20    cmd
21}
22
23/// `cargo lambda deploy --<arch>` — deploy Lambda.
24pub fn deploy_lambda_cargo_command(arch: Arch) -> Command {
25    let mut cmd = Command::new("cargo");
26    cmd.arg("lambda").arg("deploy");
27    match arch {
28        Arch::Arm64 => cmd.arg("--arm64"),
29        Arch::X86_64 => cmd.arg("--x86-64"),
30    };
31    cmd
32}
33
34/// `cargo run --quiet -- --serverust-emit-openapi <out>` — extrai o spec OpenAPI
35/// do binário do projeto sem subir o servidor. O runtime `serverust_lambda::run`
36/// (ou um handler equivalente no `main`) detecta a flag, escreve o spec e sai.
37pub fn openapi_export_command(out: &Path) -> Command {
38    let mut cmd = Command::new("cargo");
39    cmd.arg("run")
40        .arg("--quiet")
41        .arg("--")
42        .arg("--serverust-emit-openapi")
43        .arg(out);
44    cmd
45}
46
47/// Texto exibido pelo subcomando `info`.
48///
49/// As features listadas são as do framework serverust-telemetry disponíveis
50/// para projetos gerados (não as do próprio binário CLI).
51pub fn info_text() -> String {
52    let framework_features = ["otel (opt-in)", "dynamodb (opt-in)"];
53    format!(
54        "serverust-cli {version}\narch: {arch}\nframework features: {features}",
55        version = env!("CARGO_PKG_VERSION"),
56        arch = std::env::consts::ARCH,
57        features = framework_features.join(", "),
58    )
59}