Skip to main content

serverust_cli/
cli.rs

1use std::path::PathBuf;
2
3use clap::{Parser, Subcommand, ValueEnum};
4
5/// CLI declarativa do serverust (paridade conceitual com @nestjs/cli).
6#[derive(Parser, Debug)]
7#[command(name = "serverust", version, about = "serverust framework CLI")]
8pub struct Cli {
9    #[command(subcommand)]
10    pub command: Command,
11}
12
13#[derive(Subcommand, Debug)]
14pub enum Command {
15    /// Cria um novo projeto serverust.
16    New {
17        /// Nome do projeto (vira o nome do diretório e do crate).
18        name: String,
19    },
20    /// Gera scaffolding de um recurso/módulo/componente.
21    Generate {
22        /// Tipo do artefato.
23        kind: GenerateKind,
24        /// Nome em snake/kebab case (`users`, `auth`, etc.).
25        name: String,
26    },
27    /// Sobe servidor local com hot-reload via `cargo watch`.
28    Dev,
29    /// Executa `cargo build`.
30    Build {
31        /// Builda em release mode.
32        #[arg(long)]
33        release: bool,
34    },
35    /// Faz deploy para alvos suportados.
36    Deploy {
37        #[command(subcommand)]
38        target: DeployTarget,
39    },
40    /// Imprime informações sobre a CLI e o ambiente.
41    Info,
42    /// Exporta o spec OpenAPI gerado pelo binário do projeto.
43    Openapi {
44        /// Caminho do arquivo de saída (ex.: openapi.json).
45        #[arg(long)]
46        out: PathBuf,
47    },
48}
49
50#[derive(Subcommand, Debug)]
51pub enum DeployTarget {
52    /// Deploy para AWS Lambda via `cargo lambda deploy`.
53    Lambda {
54        /// Arquitetura do binário Lambda.
55        #[arg(long, value_enum, default_value_t = Arch::Arm64)]
56        arch: Arch,
57    },
58}
59
60#[derive(Copy, Clone, Debug, PartialEq, Eq, ValueEnum)]
61pub enum Arch {
62    #[value(name = "arm64")]
63    Arm64,
64    #[value(name = "x86_64", alias = "x86-64")]
65    X86_64,
66}
67
68#[derive(Copy, Clone, Debug, PartialEq, Eq, ValueEnum)]
69pub enum GenerateKind {
70    Resource,
71    Module,
72    Controller,
73    Service,
74    Pipe,
75    Guard,
76    Interceptor,
77    Filter,
78}