pub mod add;
pub mod admin;
pub mod build;
pub mod cloud;
pub mod cron;
pub mod deploy;
pub mod destroy;
pub mod dev;
pub mod env;
pub mod fe_runtime;
pub mod init;
pub mod login;
pub mod open;
pub mod project_config;
pub mod purge;
pub mod purge_page;
use clap::{Parser, Subcommand};
use std::path::PathBuf;
#[derive(Parser)]
#[command(name = "forte")]
#[command(about = "Forte - Fullstack Framework", long_about = None)]
pub struct Cli {
#[command(subcommand)]
pub command: Commands,
}
#[derive(Subcommand)]
pub enum Commands {
Dev {
#[arg(short, long)]
project: Option<PathBuf>,
#[arg(short = 'P', long)]
port: Option<u16>,
},
Init {
name: String,
#[arg(long)]
dev: bool,
},
Login {
#[arg(long)]
token: Option<String>,
},
Add {
#[command(subcommand)]
command: AddCommands,
},
Build {
#[arg(short, long)]
project: Option<PathBuf>,
},
Deploy {
#[arg(short, long)]
project: Option<PathBuf>,
},
Destroy {
#[arg(long)]
yes: bool,
},
Open {
#[arg(short, long)]
project: Option<PathBuf>,
#[arg(long)]
print: bool,
},
Purge {
#[arg(required = true)]
keys: Vec<String>,
#[arg(short, long)]
project: Option<PathBuf>,
},
PurgePage {
#[arg(required = true)]
paths: Vec<String>,
#[arg(short, long)]
project: Option<PathBuf>,
},
Admin {
#[command(subcommand)]
command: AdminCommands,
},
Cloud {
#[command(subcommand)]
command: CloudCommands,
},
Env {
#[command(subcommand)]
command: EnvCommands,
},
}
#[derive(Subcommand)]
pub enum EnvCommands {
Set {
key: String,
value: String,
#[arg(long)]
secret: bool,
#[arg(short, long)]
project: Option<PathBuf>,
},
Migrate {
#[arg(short, long)]
project: Option<PathBuf>,
},
}
#[derive(Subcommand)]
pub enum CloudCommands {
Init {
#[arg(short, long)]
project: Option<PathBuf>,
#[arg(
long,
help = "Project identity and DNS label; required for a new project"
)]
project_name: Option<String>,
#[arg(
long,
help = "Cloudflare zone name, not a zone ID; required for a new project"
)]
zone: Option<String>,
},
}
#[derive(Subcommand)]
pub enum AdminCommands {
Run {
task: String,
#[arg(short, long)]
project: Option<PathBuf>,
#[arg(long)]
input_file: Option<PathBuf>,
#[arg(long)]
input: Option<String>,
#[arg(long, default_value_t = 300)]
timeout_seconds: u64,
},
RunLocal {
task: String,
#[arg(short = 'P', long, default_value_t = 3000)]
port: u16,
#[arg(long)]
input_file: Option<PathBuf>,
#[arg(long)]
input: Option<String>,
#[arg(long, default_value_t = 300)]
timeout_seconds: u64,
},
}
#[derive(Subcommand)]
pub enum AddCommands {
Page { path: String },
Action { path: String },
}