feat: prepare initial cli layout
Made initial command scopes d -> docker related commands dc -> docker compose related commands dj -> django related commands pg -> postgres related commands
This commit is contained in:
		
							
								
								
									
										37
									
								
								src/cli/ahab.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								src/cli/ahab.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,37 @@
 | 
				
			|||||||
 | 
					use super::{Django, Docker, DockerCompose, Postgres};
 | 
				
			||||||
 | 
					use clap::{Parser, Subcommand};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// A program for interacting with various dockerized applications.
 | 
				
			||||||
 | 
					#[derive(Parser, Debug)]
 | 
				
			||||||
 | 
					#[command(author, version, about, long_about=None)]
 | 
				
			||||||
 | 
					pub struct Ahab {
 | 
				
			||||||
 | 
					    #[command(subcommand)]
 | 
				
			||||||
 | 
					    pub command: Commands,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[derive(Debug, Subcommand)]
 | 
				
			||||||
 | 
					pub enum Commands {
 | 
				
			||||||
 | 
					    /// Docker related subcommands
 | 
				
			||||||
 | 
					    D {
 | 
				
			||||||
 | 
					        #[command(subcommand)]
 | 
				
			||||||
 | 
					        command: Docker,
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Docker compose related subcommands
 | 
				
			||||||
 | 
					    Dc {
 | 
				
			||||||
 | 
					        #[command(subcommand)]
 | 
				
			||||||
 | 
					        command: DockerCompose,
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Docker compose related subcommands
 | 
				
			||||||
 | 
					    Dj {
 | 
				
			||||||
 | 
					        #[command(subcommand)]
 | 
				
			||||||
 | 
					        command: Django,
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Postgres related subcommands
 | 
				
			||||||
 | 
					    Pg {
 | 
				
			||||||
 | 
					        #[command(subcommand)]
 | 
				
			||||||
 | 
					        command: Postgres,
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										29
									
								
								src/cli/django.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								src/cli/django.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
				
			|||||||
 | 
					use std::path::PathBuf;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use clap::Parser;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[derive(Parser, Debug)]
 | 
				
			||||||
 | 
					pub enum Django {
 | 
				
			||||||
 | 
					    /// Prepare empty management command 'command' in app 'app'.
 | 
				
			||||||
 | 
					    MakeCommand {
 | 
				
			||||||
 | 
					        #[arg(value_enum)]
 | 
				
			||||||
 | 
					        app: PathBuf,
 | 
				
			||||||
 | 
					        #[arg(value_enum)]
 | 
				
			||||||
 | 
					        command: String,
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Run Django's manage.py makemigrations.
 | 
				
			||||||
 | 
					    Makemigrations,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Pass arguments to Django's manage.py.
 | 
				
			||||||
 | 
					    Manage {
 | 
				
			||||||
 | 
					        #[arg(value_enum)]
 | 
				
			||||||
 | 
					        rest: Vec<String>,
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Run Django's manage.py migrate.
 | 
				
			||||||
 | 
					    Migrate,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Run Django's manage.py shell.
 | 
				
			||||||
 | 
					    Shell,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										7
									
								
								src/cli/docker.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								src/cli/docker.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					use clap::Parser;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[derive(Parser, Debug)]
 | 
				
			||||||
 | 
					pub enum Docker {
 | 
				
			||||||
 | 
					    /// Stop all containers via `docker stop $(docker ps -q)`
 | 
				
			||||||
 | 
					    StopAll,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										26
									
								
								src/cli/docker_compose.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								src/cli/docker_compose.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
				
			|||||||
 | 
					use clap::Subcommand;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Wraper for docker compose; autodiscover compose file and source .env file.
 | 
				
			||||||
 | 
					#[derive(Subcommand, Debug)]
 | 
				
			||||||
 | 
					pub enum DockerCompose {
 | 
				
			||||||
 | 
					    /// Build containers.
 | 
				
			||||||
 | 
					    Build,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Down containers.
 | 
				
			||||||
 | 
					    Down,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Stop, build and start containers.
 | 
				
			||||||
 | 
					    Rebuild,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Stop and start containers.
 | 
				
			||||||
 | 
					    Restart,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Start containers.
 | 
				
			||||||
 | 
					    Start,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Stop containers.
 | 
				
			||||||
 | 
					    Stop,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Up containers.
 | 
				
			||||||
 | 
					    Up,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										11
									
								
								src/cli/mod.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								src/cli/mod.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					mod ahab;
 | 
				
			||||||
 | 
					mod django;
 | 
				
			||||||
 | 
					mod docker;
 | 
				
			||||||
 | 
					mod docker_compose;
 | 
				
			||||||
 | 
					mod postgres;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub use ahab::{Ahab, Commands};
 | 
				
			||||||
 | 
					pub use django::Django;
 | 
				
			||||||
 | 
					pub use docker::Docker;
 | 
				
			||||||
 | 
					pub use docker_compose::DockerCompose;
 | 
				
			||||||
 | 
					pub use postgres::Postgres;
 | 
				
			||||||
							
								
								
									
										18
									
								
								src/cli/postgres.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								src/cli/postgres.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					use std::path::PathBuf;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use clap::Subcommand;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[derive(Subcommand, Debug)]
 | 
				
			||||||
 | 
					pub enum Postgres {
 | 
				
			||||||
 | 
					    /// Import dump via pg_restore
 | 
				
			||||||
 | 
					    Import {
 | 
				
			||||||
 | 
					        #[arg(value_enum)]
 | 
				
			||||||
 | 
					        path: PathBuf,
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Dump via pg_dump with format=c
 | 
				
			||||||
 | 
					    Dump {
 | 
				
			||||||
 | 
					        #[arg(value_enum)]
 | 
				
			||||||
 | 
					        path: PathBuf,
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										34
									
								
								src/main.rs
									
									
									
									
									
								
							
							
						
						
									
										34
									
								
								src/main.rs
									
									
									
									
									
								
							@@ -1,5 +1,39 @@
 | 
				
			|||||||
 | 
					mod cli;
 | 
				
			||||||
 | 
					mod scripts;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use anyhow::Result;
 | 
					use anyhow::Result;
 | 
				
			||||||
 | 
					use clap::Parser;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn main() -> Result<()> {
 | 
					fn main() -> Result<()> {
 | 
				
			||||||
 | 
					    let args = cli::Ahab::parse();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    match args.command {
 | 
				
			||||||
 | 
					        cli::Commands::D { command } => match command {
 | 
				
			||||||
 | 
					            cli::Docker::StopAll => scripts::docker::stop_all(),
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        cli::Commands::Dc { command } => match command {
 | 
				
			||||||
 | 
					            cli::DockerCompose::Build => scripts::docker_compose::build(),
 | 
				
			||||||
 | 
					            cli::DockerCompose::Down => scripts::docker_compose::down(),
 | 
				
			||||||
 | 
					            cli::DockerCompose::Rebuild => scripts::docker_compose::rebuild(),
 | 
				
			||||||
 | 
					            cli::DockerCompose::Restart => scripts::docker_compose::restart(),
 | 
				
			||||||
 | 
					            cli::DockerCompose::Start => scripts::docker_compose::start(),
 | 
				
			||||||
 | 
					            cli::DockerCompose::Stop => scripts::docker_compose::stop(),
 | 
				
			||||||
 | 
					            cli::DockerCompose::Up => scripts::docker_compose::up(),
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        cli::Commands::Dj { command } => match command {
 | 
				
			||||||
 | 
					            cli::Django::MakeCommand { app, command } => {
 | 
				
			||||||
 | 
					                scripts::django::make_command(&app, &command)
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            cli::Django::Makemigrations => scripts::django::makemigrations(),
 | 
				
			||||||
 | 
					            cli::Django::Manage { rest } => scripts::django::manage(&rest),
 | 
				
			||||||
 | 
					            cli::Django::Migrate => scripts::django::migrate(),
 | 
				
			||||||
 | 
					            cli::Django::Shell => scripts::django::shell(),
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        cli::Commands::Pg { command } => match command {
 | 
				
			||||||
 | 
					            cli::Postgres::Import { path } => scripts::postgres::import(&path),
 | 
				
			||||||
 | 
					            cli::Postgres::Dump { path } => scripts::postgres::dump(&path),
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Ok(())
 | 
					    Ok(())
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										19
									
								
								src/scripts/django.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								src/scripts/django.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					use std::path::PathBuf;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub fn make_command(app: &PathBuf, command: &str) {
 | 
				
			||||||
 | 
					    println!("{app:?} and {command:?}");
 | 
				
			||||||
 | 
					    todo!()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					pub fn makemigrations() {
 | 
				
			||||||
 | 
					    todo!()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					pub fn manage(command: &[String]) {
 | 
				
			||||||
 | 
					    println!("{command:?}");
 | 
				
			||||||
 | 
					    todo!()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					pub fn migrate() {
 | 
				
			||||||
 | 
					    todo!()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					pub fn shell() {
 | 
				
			||||||
 | 
					    todo!()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										3
									
								
								src/scripts/docker.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								src/scripts/docker.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					pub fn stop_all() {
 | 
				
			||||||
 | 
					    todo!()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										21
									
								
								src/scripts/docker_compose.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								src/scripts/docker_compose.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
				
			|||||||
 | 
					pub fn build() {
 | 
				
			||||||
 | 
					    todo!()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					pub fn down() {
 | 
				
			||||||
 | 
					    todo!()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					pub fn rebuild() {
 | 
				
			||||||
 | 
					    todo!()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					pub fn restart() {
 | 
				
			||||||
 | 
					    todo!()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					pub fn start() {
 | 
				
			||||||
 | 
					    todo!()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					pub fn stop() {
 | 
				
			||||||
 | 
					    todo!()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					pub fn up() {
 | 
				
			||||||
 | 
					    todo!()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										4
									
								
								src/scripts/mod.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								src/scripts/mod.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					pub mod django;
 | 
				
			||||||
 | 
					pub mod docker;
 | 
				
			||||||
 | 
					pub mod docker_compose;
 | 
				
			||||||
 | 
					pub mod postgres;
 | 
				
			||||||
							
								
								
									
										11
									
								
								src/scripts/postgres.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								src/scripts/postgres.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					use std::path::PathBuf;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub fn import(path: &PathBuf) {
 | 
				
			||||||
 | 
					    println!("{path:?}");
 | 
				
			||||||
 | 
					    todo!()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub fn dump(path: &PathBuf) {
 | 
				
			||||||
 | 
					    println!("{path:?}");
 | 
				
			||||||
 | 
					    todo!()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user