1use clap::{Parser, Subcommand};
8
9pub use config::ConfigManager;
11pub use logging::LogFormatter;
12pub use utils::ProgressBar;
13
14pub mod commands;
16pub mod config;
17pub mod logging;
18pub mod utils;
19
20#[derive(Parser)]
23#[command(name = "kotoba")]
24#[command(about = "Kotoba - GP2-based Graph Rewriting Language")]
25#[command(version = env!("CARGO_PKG_VERSION"))]
26pub struct Cli {
27 #[command(subcommand)]
28 pub command: Commands,
29}
30
31#[derive(Subcommand)]
34pub enum Commands {
35 Info {
37 #[arg(short, long)]
39 verbose: bool,
40 },
41
42 #[command(subcommand)]
44 Docs(DocsCommand),
45}
46
47#[derive(Subcommand)]
50pub enum DocsCommand {
51 Generate {
53 #[arg(short, long, default_value = "src")]
55 source: String,
56
57 #[arg(short, long, default_value = "docs")]
59 output: String,
60
61 #[arg(short, long)]
63 config: Option<String>,
64
65 #[arg(short, long)]
67 watch: bool,
68 },
69
70 Serve {
72 #[arg(short, long, default_value = "3000")]
74 port: u16,
75
76 #[arg(short, long, default_value = "127.0.0.1")]
78 host: String,
79
80 #[arg(short, long, default_value = "docs")]
82 dir: String,
83
84 #[arg(short, long)]
86 open: bool,
87 },
88
89 Search {
91 query: String,
93
94 #[arg(short, long, default_value = "docs")]
96 dir: String,
97
98 #[arg(short, long)]
100 json: bool,
101 },
102
103 Init {
105 #[arg(short, long, default_value = "kdoc.toml")]
107 config: String,
108
109 #[arg(short, long)]
111 force: bool,
112 },
113}