use clap::{Parser, Subcommand};
#[derive(Parser, Debug)]
#[command(name = "gout", version, about = "轻量内网穿透工具")]
pub struct Cli {
#[command(subcommand)]
pub command: Command,
}
#[derive(Subcommand, Debug)]
pub enum Command {
Login {
server: String,
key: String,
},
Tcp {
port: u16,
},
Udp {
port: u16,
},
Http {
port: u16,
},
List,
}
impl Cli {
pub fn run() -> anyhow::Result<()> {
let cli = Cli::parse();
match cli.command {
Command::Login { server, key } => crate::cmd_login(&server, &key),
Command::Tcp { port } => crate::cmd_tunnel("tcp", port),
Command::Udp { port } => crate::cmd_tunnel("udp", port),
Command::Http { port } => crate::cmd_tunnel("http", port),
Command::List => crate::cmd_list(),
}
}
}