Skip to main content

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}