From c55fe7dde48fc7eaa6d655a0feac4bc924aafa0f Mon Sep 17 00:00:00 2001 From: Valerio Ageno Date: Sun, 12 May 2024 21:40:46 +0200 Subject: [PATCH] feat: create cargo workspace --- .gitignore | 16 +++++++++++++++ Cargo.toml | 5 +++++ crates/cli/Cargo.toml | 15 ++++++++++++++ crates/cli/README.md | 1 + crates/cli/src/actions/build.rs | 12 +++++++++++ crates/cli/src/actions/dev.rs | 3 +++ crates/cli/src/actions/mod.rs | 3 +++ crates/cli/src/actions/new.rs | 3 +++ crates/cli/src/lib.rs | 35 +++++++++++++++++++++++++++++++++ crates/cli/src/main.rs | 5 +++++ 10 files changed, 98 insertions(+) create mode 100644 Cargo.toml create mode 100644 crates/cli/Cargo.toml create mode 100644 crates/cli/README.md create mode 100644 crates/cli/src/actions/build.rs create mode 100644 crates/cli/src/actions/dev.rs create mode 100644 crates/cli/src/actions/mod.rs create mode 100644 crates/cli/src/actions/new.rs create mode 100644 crates/cli/src/lib.rs create mode 100644 crates/cli/src/main.rs diff --git a/.gitignore b/.gitignore index dc5a252b..f8a92087 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,19 @@ pnpm-lock.yaml examples/playground/ +## Rust related ignores + +# Generated by Cargo +# will have compiled files and executables +**/debug/ +**/target/ + +# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries +# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html +**/Cargo.lock + +# These are backup files generated by rustfmt +**/*.rs.bk + +# MSVC Windows builds of rustc generate these, which store debugging information +*.pdb diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 00000000..8fb18b08 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,5 @@ +[workspace] +members = [ + "crates/cli" +] + diff --git a/crates/cli/Cargo.toml b/crates/cli/Cargo.toml new file mode 100644 index 00000000..91e125df --- /dev/null +++ b/crates/cli/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "tuono" +version = "0.0.1" +edition = "2021" +authors = ["V. Ageno "] + +[lib] +name = "tuono" +path = "src/lib.rs" + +[dependencies] +clap = { version = "4.5.4", features = ["derive"] } +cargo-watch = "8.5.2" + + diff --git a/crates/cli/README.md b/crates/cli/README.md new file mode 100644 index 00000000..3099d07c --- /dev/null +++ b/crates/cli/README.md @@ -0,0 +1 @@ +# Tuono diff --git a/crates/cli/src/actions/build.rs b/crates/cli/src/actions/build.rs new file mode 100644 index 00000000..a4363213 --- /dev/null +++ b/crates/cli/src/actions/build.rs @@ -0,0 +1,12 @@ +fn is_valid_project_folder(_directory: &String) -> bool { + true +} + +pub fn run(directory: String) { + if !is_valid_project_folder(&directory) { + println!("It does not seem to be a valid project folder"); + return; + } + + todo!() +} diff --git a/crates/cli/src/actions/dev.rs b/crates/cli/src/actions/dev.rs new file mode 100644 index 00000000..9d9e91f8 --- /dev/null +++ b/crates/cli/src/actions/dev.rs @@ -0,0 +1,3 @@ +pub fn run() { + println!("Running dev environment"); +} diff --git a/crates/cli/src/actions/mod.rs b/crates/cli/src/actions/mod.rs new file mode 100644 index 00000000..2029ac58 --- /dev/null +++ b/crates/cli/src/actions/mod.rs @@ -0,0 +1,3 @@ +pub mod build; +pub mod dev; +pub mod new; diff --git a/crates/cli/src/actions/new.rs b/crates/cli/src/actions/new.rs new file mode 100644 index 00000000..a3fa6c62 --- /dev/null +++ b/crates/cli/src/actions/new.rs @@ -0,0 +1,3 @@ +pub fn run() { + println!("Scaffold new project"); +} diff --git a/crates/cli/src/lib.rs b/crates/cli/src/lib.rs new file mode 100644 index 00000000..05a6ccfa --- /dev/null +++ b/crates/cli/src/lib.rs @@ -0,0 +1,35 @@ +use clap::{Parser, Subcommand}; +pub mod actions; + +#[derive(Subcommand, Debug)] +enum Actions { + /// Start the development environment + Dev, + /// Build the production assets + Build { + #[arg(short, long, default_value_t = String::from("."))] + directory: String, + }, + /// Create a new project folder + New { + #[arg(short, long, default_value_t = String::from("."))] + _directory: String, + }, +} + +#[derive(Parser, Debug)] +#[command(version, about = "The react/rust fullstack framework")] +struct Args { + #[command(subcommand)] + action: Option, +} + +pub fn cli() { + let args = Args::parse(); + + match args.action.unwrap() { + Actions::Dev => actions::dev::run(), + Actions::Build { directory } => actions::build::run(directory), + Actions::New { _directory } => actions::new::run(), + } +} diff --git a/crates/cli/src/main.rs b/crates/cli/src/main.rs new file mode 100644 index 00000000..1b51545e --- /dev/null +++ b/crates/cli/src/main.rs @@ -0,0 +1,5 @@ +use tuono::cli; + +fn main() { + cli(); +}