craken_cli/lib.rs
1use clap::{Parser, Subcommand};
2
3pub mod generate;
4pub mod hot_reload;
5
6/// The Craken command-line interface.
7#[derive(Parser)]
8#[command(
9 name = "craken",
10 version = "0.1.0",
11 about = "Craken — batteries-included Rust web framework"
12)]
13pub struct Cli {
14 #[command(subcommand)]
15 pub command: Commands,
16}
17
18#[derive(Subcommand)]
19pub enum Commands {
20 /// Scaffold a new Craken project with the default directory layout.
21 ///
22 /// craken new my-app
23 New {
24 /// Project name (used as the crate name and root directory).
25 name: String,
26 },
27
28 /// Start the production HTTP server.
29 ///
30 /// craken serve --addr 0.0.0.0:8080
31 Serve {
32 /// Address to bind (default: 127.0.0.1:8080).
33 #[arg(short, long, default_value = "127.0.0.1:8080")]
34 addr: String,
35 },
36
37 /// Start the development server with hot-reload on source file changes.
38 ///
39 /// craken dev --addr 127.0.0.1:3000
40 Dev {
41 /// Address to bind (default: 127.0.0.1:8080).
42 #[arg(short, long, default_value = "127.0.0.1:8080")]
43 addr: String,
44 },
45
46 /// Code generators — scaffold controllers, services, and modules.
47 Make {
48 #[command(subcommand)]
49 target: MakeTarget,
50 },
51
52 /// Run database migrations.
53 Migrate,
54
55 /// Rollback the last database migration.
56 #[command(name = "migrate:rollback")]
57 Rollback,
58}
59
60/// Targets for `craken make <target> <Name>`.
61#[derive(Subcommand)]
62pub enum MakeTarget {
63 /// Generate a controller.
64 ///
65 /// craken make controller UserController
66 Controller {
67 /// PascalCase name, e.g. `UserController`.
68 name: String,
69 },
70
71 /// Generate a service.
72 ///
73 /// craken make service UserService
74 Service {
75 /// PascalCase name, e.g. `UserService`.
76 name: String,
77 },
78
79 /// Generate a self-contained module (controller + service + mod.rs).
80 ///
81 /// craken make module Blog
82 Module {
83 /// PascalCase name, e.g. `Blog`.
84 name: String,
85 },
86
87 /// Generate a new migration file.
88 ///
89 /// craken make migration create_users_table
90 #[command(name = "migration")]
91 Migration {
92 /// Snake_case name, e.g. `create_users_table`.
93 name: String,
94 },
95}