1use clap::Args;
8use std::env;
9use std::path::PathBuf;
10
11use crate::core::error::Result;
12
13#[derive(Args, Debug)]
15#[command(after_help = "EXAMPLES:
16 greppy web Start web UI on localhost:3000
17 greppy web --port 8080 Use custom port
18 greppy web --open Auto-open browser
19 greppy web -p ~/project Specify project path")]
20pub struct WebArgs {
21 #[arg(short, long)]
23 pub project: Option<PathBuf>,
24
25 #[arg(long, default_value = "3000")]
27 pub port: u16,
28
29 #[arg(long)]
31 pub open: bool,
32}
33
34pub async fn run(args: WebArgs) -> Result<()> {
36 let project_path = args
37 .project
38 .unwrap_or_else(|| env::current_dir().expect("Failed to get current directory"));
39
40 crate::web::server::run(project_path, args.port, args.open).await
41}