feat: add clap-test-3

This commit is contained in:
2025-08-03 16:33:52 +08:00
parent 6d7273c6a3
commit 814b5e9442
4 changed files with 430 additions and 2 deletions
+158
View File
@@ -0,0 +1,158 @@
use clap::Parser;
// https://github.com/fastn-stack/kulfi/blob/main/malai/src/main.rs
fn main() {
let cli = Cli::parse();
println!("{:?}", cli);
}
#[derive(clap::Parser, Debug)]
#[command(version, about, long_about = None)]
pub struct Cli {
#[command(flatten)]
verbose: clap_verbosity_flag::Verbosity,
#[command(subcommand)]
pub command: Option<Command>,
// adding these two because when we run `cargo tauri dev,` it automatically passes these
// arguments. need to figure out why and how to disable that, till then this is a workaround
#[arg(default_value = "true", long, hide = true)]
no_default_features: bool,
#[arg(default_value = "auto", long, hide = true)]
color: String,
}
#[derive(clap::Subcommand, Debug)]
pub enum Command {
// TODO: add this to the docs when we have ACL
// By default it allows any peer to connect to the HTTP(s) service. You can pass --what-to-do
// argument to specify a What To Do service that can be used to add access control."
#[clap(about = "Expose HTTP Service on kulfi, connect using kulfi or browser")]
Http {
port: u16,
#[arg(
long,
default_value = "127.0.0.1",
help = "Host serving the http service."
)]
host: String,
#[arg(
long,
default_value = "kulfi.site",
help = "Use this for the HTTP bridge. To run an HTTP bridge, use `malai http-bridge`",
env = "MALAI_HTTP_BRIDGE"
)]
bridge: String,
#[arg(
long,
help = "Make the exposed service public. Anyone will be able to access."
)]
public: bool,
// #[arg(
// long,
// default_value_t = false,
// help = "Use this if the service is HTTPS"
// )]
// secure: bool,
// #[arg(
// long,
// help = "The What To Do Service that can be used to add access control."
// )]
// this will be the id52 of the identity server that should be consulted
// what_to_do: Option<String>,
},
#[clap(about = "Browse a kulfi site.")]
Browse {
#[arg(help = "The Kulfi URL to browse. Should look like kulfi://<id52>/<path>")]
url: String,
},
#[clap(about = "Expose TCP Service on kulfi.")]
Tcp {
port: u16,
#[arg(
long,
default_value = "127.0.0.1",
help = "Host serving the TCP service."
)]
host: String,
#[arg(
long,
help = "Make the exposed service public. Anyone will be able to access."
)]
public: bool,
},
#[clap(
about = "Run an http server that forwards requests to the given id52 taken from the HOST header"
)]
HttpBridge {
#[arg(
long,
short('t'),
help = "The id52 to which this bridge will forward incoming HTTP request. By default it forwards to every id52."
)]
proxy_target: Option<String>,
#[arg(
long,
short('p'),
help = "The port on which this bridge will listen for incoming HTTP requests. If you pass 0, it will bind to a random port.",
default_value = "0"
)]
port: u16,
},
#[clap(about = "Run a TCP server that forwards incoming requests to the given id52.")]
TcpBridge {
#[arg(help = "The id52 to which this bridge will forward incoming TCP request.")]
proxy_target: String,
#[arg(
help = "The port on which this bridge will listen for incoming TCP requests. If you pass 0, it will bind to a random port.",
default_value = "0"
)]
port: u16,
},
#[clap(about = "Expose a folder to kulfi network")]
Folder {
#[arg(help = "The folder to expose.")]
path: String,
#[arg(
long,
default_value = "kulfi.site",
help = "Use this for the HTTP bridge. To run an HTTP bridge, use `malai http-bridge`",
env = "MALAI_HTTP_BRIDGE"
)]
bridge: String,
#[arg(long, help = "Make the folder public. Anyone will be able to access.")]
public: bool,
},
#[clap(about = "Run all the services")]
Run {
#[arg(long, help = "Malai Home", env = "MALAI_HOME")]
home: Option<String>,
},
#[clap(about = "Run an iroh remote server that handles requests from http-proxy.")]
HttpProxyRemote {
#[arg(long, help = "Make the proxy public. Anyone will be able to access.")]
public: bool,
},
#[clap(about = "Run a http proxy server that forwards incoming requests to http-proxy-remote.")]
HttpProxy {
#[arg(help = "The id52 of remote to which this http proxy will forward request to.")]
remote: String,
#[arg(
help = "The port on which this proxy will listen for incoming TCP requests. If you pass 0, it will bind to a random port.",
default_value = "0"
)]
port: u16,
},
#[clap(about = "Generate a new identity.")]
Keygen {
#[arg(
long,
short,
num_args=0..=1,
//default_missing_value=kulfi_utils::SECRET_KEY_FILE,
help = "The file where the private key of the identity will be stored. If not provided, the private key will be printed to stdout."
)]
file: Option<String>,
},
}