From efff1323b081730579d8b3f1cc676cf77e34f498 Mon Sep 17 00:00:00 2001 From: Vincent Thomas Date: Thu, 28 Sep 2023 23:31:26 +0200 Subject: [PATCH] flyttat till monorepo --- Cargo.lock | 14 ++- Cargo.toml | 33 +----- Makefile | 9 +- clier.config.json | 3 - clier/Cargo.toml | 31 +++++ {benches => clier/benches}/parser_bench.rs | 0 {examples => clier/examples}/framework.rs | 0 {examples => clier/examples}/parser.rs | 0 {examples => clier/examples}/with_args.rs | 0 {src => clier/src}/builder/command.rs | 4 +- {src => clier/src}/builder/flag.rs | 0 {src => clier/src}/builder/mod.rs | 0 {src => clier/src}/error.rs | 0 {src => clier/src}/lib.rs | 3 +- {src => clier/src}/macros.rs | 0 {src => clier/src}/prelude.rs | 0 {src => clier/src}/run/help.rs | 16 ++- {src => clier/src}/run/mod.rs | 4 +- {src => clier/src}/run/resolver/command.rs | 95 +++------------- {src => clier/src}/run/resolver/flag.rs | 0 {src => clier/src}/run/resolver/mod.rs | 2 + clier/src/run/resolver/tests/command.rs | 106 ++++++++++++++++++ clier/src/run/resolver/tests/mod.rs | 1 + {src => clier/src}/runtime/display/mod.rs | 0 {src => clier/src}/runtime/hooks/mod.rs | 0 {src => clier/src}/runtime/hooks/use_flag.rs | 0 {src => clier/src}/runtime/hooks/use_flags.rs | 0 {src => clier/src}/runtime/mod.rs | 0 clier_app/Cargo.toml | 11 ++ clier_app/clier.config.json | 3 + .../src}/commands/generate.rs | 8 +- {src/app => clier_app/src}/commands/mod.rs | 0 {src/app => clier_app/src}/commands/new.rs | 13 +-- {src/app => clier_app/src}/config_parser.rs | 2 +- .../src}/generators/command.rs | 2 +- {src/app => clier_app/src}/generators/mod.rs | 0 .../src}/generators/project.rs | 2 +- {src => clier_app/src}/main.rs | 11 +- clier_parser/Cargo.toml | 7 ++ clier_parser/src/commands_argv.rs | 11 ++ .../parser => clier_parser/src}/flags_argv.rs | 0 src/parser/mod.rs => clier_parser/src/lib.rs | 0 {src/parser => clier_parser/src}/utils.rs | 0 src/app/mod.rs | 3 - src/parser/commands_argv.rs | 39 ------- 45 files changed, 241 insertions(+), 192 deletions(-) delete mode 100644 clier.config.json create mode 100644 clier/Cargo.toml rename {benches => clier/benches}/parser_bench.rs (100%) rename {examples => clier/examples}/framework.rs (100%) rename {examples => clier/examples}/parser.rs (100%) rename {examples => clier/examples}/with_args.rs (100%) rename {src => clier/src}/builder/command.rs (98%) rename {src => clier/src}/builder/flag.rs (100%) rename {src => clier/src}/builder/mod.rs (100%) rename {src => clier/src}/error.rs (100%) rename {src => clier/src}/lib.rs (98%) rename {src => clier/src}/macros.rs (100%) rename {src => clier/src}/prelude.rs (100%) rename {src => clier/src}/run/help.rs (87%) rename {src => clier/src}/run/mod.rs (100%) rename {src => clier/src}/run/resolver/command.rs (59%) rename {src => clier/src}/run/resolver/flag.rs (100%) rename {src => clier/src}/run/resolver/mod.rs (83%) create mode 100644 clier/src/run/resolver/tests/command.rs create mode 100644 clier/src/run/resolver/tests/mod.rs rename {src => clier/src}/runtime/display/mod.rs (100%) rename {src => clier/src}/runtime/hooks/mod.rs (100%) rename {src => clier/src}/runtime/hooks/use_flag.rs (100%) rename {src => clier/src}/runtime/hooks/use_flags.rs (100%) rename {src => clier/src}/runtime/mod.rs (100%) create mode 100644 clier_app/Cargo.toml create mode 100644 clier_app/clier.config.json rename {src/app => clier_app/src}/commands/generate.rs (94%) rename {src/app => clier_app/src}/commands/mod.rs (100%) rename {src/app => clier_app/src}/commands/new.rs (61%) rename {src/app => clier_app/src}/config_parser.rs (94%) rename {src/app => clier_app/src}/generators/command.rs (96%) rename {src/app => clier_app/src}/generators/mod.rs (100%) rename {src/app => clier_app/src}/generators/project.rs (93%) rename {src => clier_app/src}/main.rs (68%) create mode 100644 clier_parser/Cargo.toml create mode 100644 clier_parser/src/commands_argv.rs rename {src/parser => clier_parser/src}/flags_argv.rs (100%) rename src/parser/mod.rs => clier_parser/src/lib.rs (100%) rename {src/parser => clier_parser/src}/utils.rs (100%) delete mode 100644 src/app/mod.rs delete mode 100644 src/parser/commands_argv.rs diff --git a/Cargo.lock b/Cargo.lock index a21ca96..e59559f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -118,13 +118,25 @@ checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961" name = "clier" version = "0.5.0" dependencies = [ + "clier_parser", "console", "criterion", + "thiserror", +] + +[[package]] +name = "clier_app" +version = "0.1.0" +dependencies = [ + "clier", "serde", "serde_json", - "thiserror", ] +[[package]] +name = "clier_parser" +version = "0.5.0" + [[package]] name = "console" version = "0.15.7" diff --git a/Cargo.toml b/Cargo.toml index ad0d9ce..3703afd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,31 +1,2 @@ -[package] -name = "clier" -version = "0.5.0" -edition = "2021" -authors = ["Vincent Thomas"] -description = "A cli parser and framework for rust" -license = "MIT" -repository = "https://github.com/vincent-thomas/clier" -keywords = ["cli", "parser", "parse"] -documentation = "https://docs.rs/clier" - -[package.metadata.docs.rs] -all-features = true -rustdoc-args = ["--cfg", "docsrs"] - -[features] -macros = [] - -[[bench]] -name = "parser_bench" -harness = false - -[dependencies] -console = "0.15.7" -serde = {version = "1.0.188", features = ["derive"]} -serde_json = "1.0.106" -thiserror = "1.0.48" - -[dev-dependencies] -criterion = "0.5.1" - +[workspace] +members = ["clier", "clier_app", "clier_parser"] \ No newline at end of file diff --git a/Makefile b/Makefile index a56cf9e..21176f7 100644 --- a/Makefile +++ b/Makefile @@ -1,19 +1,16 @@ default: - @cargo clippy + @cargo clippy -q build: @cargo build build-release: - @cargo build -q --release - -build-examples: - @cargo build -q --examples + @cargo build --release test: - @cargo test + @cargo nextest r && cargo test --doc doc: @cargo doc --no-deps diff --git a/clier.config.json b/clier.config.json deleted file mode 100644 index 730dca2..0000000 --- a/clier.config.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "command_dir": "./src/app/commands" -} \ No newline at end of file diff --git a/clier/Cargo.toml b/clier/Cargo.toml new file mode 100644 index 0000000..e1a95fe --- /dev/null +++ b/clier/Cargo.toml @@ -0,0 +1,31 @@ +[package] +name = "clier" +version = "0.5.0" +edition = "2021" +authors = ["Vincent Thomas"] +description = "A cli parser and framework for rust" +license = "MIT" +repository = "https://github.com/vincent-thomas/clier" +keywords = ["cli", "parser", "parse"] +documentation = "https://docs.rs/clier" + +[package.metadata.docs.rs] +all-features = true +rustdoc-args = ["--cfg", "docsrs"] + +[features] +macros = [] + +[[bench]] +name = "parser_bench" +harness = false + +[dependencies] +console = "0.15.7" +thiserror = "1.0.48" +clier_parser = { version = "0.5.0", path = "../clier_parser" } + + +[dev-dependencies] +criterion = "0.5.1" + diff --git a/benches/parser_bench.rs b/clier/benches/parser_bench.rs similarity index 100% rename from benches/parser_bench.rs rename to clier/benches/parser_bench.rs diff --git a/examples/framework.rs b/clier/examples/framework.rs similarity index 100% rename from examples/framework.rs rename to clier/examples/framework.rs diff --git a/examples/parser.rs b/clier/examples/parser.rs similarity index 100% rename from examples/parser.rs rename to clier/examples/parser.rs diff --git a/examples/with_args.rs b/clier/examples/with_args.rs similarity index 100% rename from examples/with_args.rs rename to clier/examples/with_args.rs diff --git a/src/builder/command.rs b/clier/src/builder/command.rs similarity index 98% rename from src/builder/command.rs rename to clier/src/builder/command.rs index fa1144f..88cfad2 100644 --- a/src/builder/command.rs +++ b/clier/src/builder/command.rs @@ -17,8 +17,8 @@ pub struct CmdArgs { pub(crate) struct RunnableCommand { /// The function to run command. pub handler: Handler, - // / Usage of the command. Displayed in help. - // pub usage: Option, + /// Usage of the command. Displayed in help. + pub usage: Option, /// Registered Flags that are required for command to run. Passed down with [crate::hooks::use_flags] hook. pub flags: Option>, /// The description of the command. diff --git a/src/builder/flag.rs b/clier/src/builder/flag.rs similarity index 100% rename from src/builder/flag.rs rename to clier/src/builder/flag.rs diff --git a/src/builder/mod.rs b/clier/src/builder/mod.rs similarity index 100% rename from src/builder/mod.rs rename to clier/src/builder/mod.rs diff --git a/src/error.rs b/clier/src/error.rs similarity index 100% rename from src/error.rs rename to clier/src/error.rs diff --git a/src/lib.rs b/clier/src/lib.rs similarity index 98% rename from src/lib.rs rename to clier/src/lib.rs index 5a0d997..6063938 100644 --- a/src/lib.rs +++ b/clier/src/lib.rs @@ -64,9 +64,8 @@ pub mod macros; /// Run pub mod run; -mod parser; mod prelude; -pub use parser::Argv; +pub use clier_parser::Argv; use run::Meta; use std::env::args; diff --git a/src/macros.rs b/clier/src/macros.rs similarity index 100% rename from src/macros.rs rename to clier/src/macros.rs diff --git a/src/prelude.rs b/clier/src/prelude.rs similarity index 100% rename from src/prelude.rs rename to clier/src/prelude.rs diff --git a/src/run/help.rs b/clier/src/run/help.rs similarity index 87% rename from src/run/help.rs rename to clier/src/run/help.rs index 2666e68..1e8168c 100644 --- a/src/run/help.rs +++ b/clier/src/run/help.rs @@ -1,10 +1,12 @@ use std::collections::HashMap; use crate::builder::{RFlag, RunnableCommand}; -use crate::prelude::*; use crate::Meta; +use crate::{prelude::*, Argv}; use console::{style, Term}; +use super::resolver::command_fetcher; + fn help_renderer( root_command: HashMap, name: String, @@ -56,7 +58,7 @@ pub(crate) fn help(commands: &HashMap, args: &[String], options.name.to_string() }; - let matcher = commands.get(args.join(".").as_str()); + // let matcher = commands.get(args.join(".").as_str()); let children: Vec<(String, &RunnableCommand)> = if args.is_empty() { commands .iter() @@ -77,7 +79,10 @@ pub(crate) fn help(commands: &HashMap, args: &[String], }) .collect() }; - if commands.get(args.join(".").as_str()).is_none() { + + let (args, main_command) = command_fetcher(&Argv::from(args), commands.clone()); + + if main_command.is_none() { if args.is_empty() { help_renderer( HashMap::from_iter(children), @@ -90,12 +95,13 @@ pub(crate) fn help(commands: &HashMap, args: &[String], } return; }; - let flags = if let Some(m) = matcher { m.clone().flags.unwrap_or(vec![]) } else { vec![] }; + let flags = + if let Some(ref m) = main_command { m.clone().flags.unwrap_or(vec![]) } else { vec![] }; help_renderer( HashMap::from_iter(children), prog_name, - options.usage, + main_command.unwrap().usage, options.version, options.description, flags, diff --git a/src/run/mod.rs b/clier/src/run/mod.rs similarity index 100% rename from src/run/mod.rs rename to clier/src/run/mod.rs index f17f014..06976ec 100644 --- a/src/run/mod.rs +++ b/clier/src/run/mod.rs @@ -34,10 +34,10 @@ pub struct Meta { pub name: String, /// Description of the binary application pub description: String, - /// Usage examples. Used for clearance in help command - pub usage: Option, /// Version pub version: String, + /// Usage examples. Used for clearance in help command + pub usage: Option, } /// Trait Runnable diff --git a/src/run/resolver/command.rs b/clier/src/run/resolver/command.rs similarity index 59% rename from src/run/resolver/command.rs rename to clier/src/run/resolver/command.rs index d51621a..2bfe51d 100644 --- a/src/run/resolver/command.rs +++ b/clier/src/run/resolver/command.rs @@ -51,7 +51,7 @@ fn format_commands(registered_commands: &[RCommand]) -> HashMap HashMap Action { - let commands = format_commands(registered_commands); - match global_flags(argv) { - FlagsAction::ShowHelp => return Action::ShowHelp(commands), - FlagsAction::ShowVersion => return Action::ShowVersion, - FlagsAction::Nothing => {} - }; - - if let Some(command_to_run) = commands.get(argv.commands.join(".").as_str()) { - return Action::RunCommand(argv.commands.join("."), command_to_run.clone()); - } - +pub(crate) fn command_fetcher( + argv: &Argv, + commands: HashMap, +) -> (Vec, Option) { let valid_args = argv .commands .iter() @@ -86,76 +78,25 @@ pub(crate) fn resolve_command(argv: &Argv, registered_commands: &[RCommand]) -> .collect::>(); let mut command = commands.get(&valid_args.join(".")); - if command.is_none() && valid_args.is_empty() { command = commands.get("root"); } + (valid_args, command.cloned()) +} + +pub(crate) fn resolve_command(argv: &Argv, registered_commands: &[RCommand]) -> Action { + let commands = format_commands(registered_commands); + match global_flags(argv) { + FlagsAction::ShowHelp => return Action::ShowHelp(commands), + FlagsAction::ShowVersion => return Action::ShowVersion, + FlagsAction::Nothing => {} + }; + + let (valid_args, command) = command_fetcher(argv, commands.clone()); if let Some(command_to_run) = command { - Action::RunCommand(valid_args.join("."), command_to_run.clone()) + Action::RunCommand(valid_args.join("."), command_to_run) } else { Action::ShowHelp(commands) } } - -// Write test cases for the following functions: -// - global_flags -// - format_commands -// - resolve_command -#[test] -fn test_flags() { - let action = resolve_command( - &Argv { - commands: vec!["command".to_string(), "subcommands".to_string()], - flags: HashMap::from([ - ("version".to_string(), "true".to_string()), - ("help".to_string(), "false".to_string()), - ]), - }, - &[], - ); - - assert_eq!(action, Action::ShowVersion); - - let action = resolve_command( - &Argv { - commands: vec!["command".to_string(), "subcommands".to_string()], - flags: HashMap::from([ - ("version".to_string(), "false".to_string()), - ("help".to_string(), "true".to_string()), - ]), - }, - &[], - ); - - assert_eq!(action, Action::ShowHelp(HashMap::new())); -} - -#[test] -fn test_resolve_commands() { - // Måste vara funktion p.g.a man jämför minnesadresser till funktionen. - let handler = |_args| 0; - - let action = resolve_command( - &Argv { - commands: vec!["command".to_string(), "subcommands".to_string()], - flags: HashMap::new(), - }, - &[RCommand { - name: "command".to_string(), - description: "description".to_string(), - handler, - usage: None, - flags: None, - children: None, - }], - ); - - assert_eq!( - action, - Action::RunCommand( - "command".to_string(), - RunnableCommand { description: "description".to_string(), handler, flags: None } - ) - ); -} diff --git a/src/run/resolver/flag.rs b/clier/src/run/resolver/flag.rs similarity index 100% rename from src/run/resolver/flag.rs rename to clier/src/run/resolver/flag.rs diff --git a/src/run/resolver/mod.rs b/clier/src/run/resolver/mod.rs similarity index 83% rename from src/run/resolver/mod.rs rename to clier/src/run/resolver/mod.rs index 12605e9..e06ae13 100644 --- a/src/run/resolver/mod.rs +++ b/clier/src/run/resolver/mod.rs @@ -2,3 +2,5 @@ mod command; mod flag; pub use command::*; pub use flag::*; + +mod tests; diff --git a/clier/src/run/resolver/tests/command.rs b/clier/src/run/resolver/tests/command.rs new file mode 100644 index 0000000..b51e1c4 --- /dev/null +++ b/clier/src/run/resolver/tests/command.rs @@ -0,0 +1,106 @@ +#[test] +fn test_resolve_commands() { + use crate::run::resolver::resolve_command; + use std::collections::HashMap; + + use crate::{ + builder::{RCommand, RunnableCommand}, + run::resolver::Action, + Argv, + }; + // Måste vara funktion p.g.a man jämför minnesadresser till funktionen. + let handler = |_args| 0; + + let action = resolve_command( + &Argv { + commands: vec!["command".to_string(), "subcommands".to_string()], + flags: HashMap::new(), + }, + &[RCommand { + name: "command".to_string(), + description: "description".to_string(), + handler, + usage: Some("test".into()), + flags: None, + children: None, + }], + ); + + assert_eq!( + action, + Action::RunCommand( + "command".to_string(), + RunnableCommand { + description: "description".to_string(), + handler, + flags: None, + usage: Some("test".into()) + } + ) + ); + + let action = resolve_command( + &Argv { + commands: vec!["command".to_string(), "subcommand".to_string()], + flags: HashMap::new(), + }, + &[ + RCommand { + name: "command".to_string(), + description: "description".to_string(), + handler, + usage: None, + flags: None, + children: None, + }, + RCommand { + name: "command.subcommand".to_string(), + description: "description".to_string(), + handler, + usage: None, + flags: None, + children: None, + }, + ], + ); + + assert_eq!( + action, + Action::RunCommand( + "command.subcommand".to_string(), + RunnableCommand { description: "description".to_string(), handler, flags: None, usage: None } + ) + ); +} +#[test] +fn test_flags() { + use crate::run::resolver::{resolve_command, Action}; + use crate::Argv; + use std::collections::HashMap; + + let action = resolve_command( + &Argv { + commands: vec!["command".to_string(), "subcommands".to_string()], + flags: HashMap::from([ + ("version".to_string(), "true".to_string()), + ("help".to_string(), "false".to_string()), + ]), + }, + &[], + ); + + assert_eq!(action, Action::ShowVersion); + + let action = resolve_command( + &Argv { + commands: vec!["command".to_string(), "subcommands".to_string()], + flags: HashMap::from([ + ("version".to_string(), "false".to_string()), + ("help".to_string(), "true".to_string()), + ]), + }, + &[], + ); + + assert_eq!(action, Action::ShowHelp(HashMap::new())); +} diff --git a/clier/src/run/resolver/tests/mod.rs b/clier/src/run/resolver/tests/mod.rs new file mode 100644 index 0000000..264b05e --- /dev/null +++ b/clier/src/run/resolver/tests/mod.rs @@ -0,0 +1 @@ +mod command; diff --git a/src/runtime/display/mod.rs b/clier/src/runtime/display/mod.rs similarity index 100% rename from src/runtime/display/mod.rs rename to clier/src/runtime/display/mod.rs diff --git a/src/runtime/hooks/mod.rs b/clier/src/runtime/hooks/mod.rs similarity index 100% rename from src/runtime/hooks/mod.rs rename to clier/src/runtime/hooks/mod.rs diff --git a/src/runtime/hooks/use_flag.rs b/clier/src/runtime/hooks/use_flag.rs similarity index 100% rename from src/runtime/hooks/use_flag.rs rename to clier/src/runtime/hooks/use_flag.rs diff --git a/src/runtime/hooks/use_flags.rs b/clier/src/runtime/hooks/use_flags.rs similarity index 100% rename from src/runtime/hooks/use_flags.rs rename to clier/src/runtime/hooks/use_flags.rs diff --git a/src/runtime/mod.rs b/clier/src/runtime/mod.rs similarity index 100% rename from src/runtime/mod.rs rename to clier/src/runtime/mod.rs diff --git a/clier_app/Cargo.toml b/clier_app/Cargo.toml new file mode 100644 index 0000000..0c2dcc6 --- /dev/null +++ b/clier_app/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "clier_app" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +clier = { version = "0.5.0", path = "../clier" } +serde = "1.0.188" +serde_json = "1.0.107" diff --git a/clier_app/clier.config.json b/clier_app/clier.config.json new file mode 100644 index 0000000..540ed94 --- /dev/null +++ b/clier_app/clier.config.json @@ -0,0 +1,3 @@ +{ + "command_dir": "./src/commands" +} \ No newline at end of file diff --git a/src/app/commands/generate.rs b/clier_app/src/commands/generate.rs similarity index 94% rename from src/app/commands/generate.rs rename to clier_app/src/commands/generate.rs index c5128a7..14f5c64 100644 --- a/src/app/commands/generate.rs +++ b/clier_app/src/commands/generate.rs @@ -1,14 +1,12 @@ use std::fs; use std::io::ErrorKind; -use crate::{ - app::config_parser::Config, - builder::{CmdArgs, RCommand}, -}; +use crate::config_parser::Config; +use clier::builder::{CmdArgs, RCommand}; use clier::display::Displayer::*; use clier::hooks::use_flag; -use crate::app::generators::CommandGenerator; +use crate::generators::CommandGenerator; pub fn generate_command() -> RCommand { RCommand::new("generate", "Generates parts of program", command).usage("generate [--flags=value]") diff --git a/src/app/commands/mod.rs b/clier_app/src/commands/mod.rs similarity index 100% rename from src/app/commands/mod.rs rename to clier_app/src/commands/mod.rs diff --git a/src/app/commands/new.rs b/clier_app/src/commands/new.rs similarity index 61% rename from src/app/commands/new.rs rename to clier_app/src/commands/new.rs index 338d692..cd11bb9 100644 --- a/src/app/commands/new.rs +++ b/clier_app/src/commands/new.rs @@ -1,22 +1,19 @@ -// use clier::hooks::use_flags; - +use clier::display::Displayer::Error; use clier::hooks::{use_flag, FlagError}; -use crate::app::generators::ProjectGenerator; -use crate::builder::{CmdArgs, RCommand}; +use crate::generators::ProjectGenerator; +use clier::builder::{CmdArgs, RCommand}; const NAME: &str = "new"; const DESCRIPTION: &str = "Generate a new project in a subdir"; pub fn new_command() -> RCommand { - RCommand::new(NAME, DESCRIPTION, command) - .subcommand("testing", "test", Some("test"), command) - .subcommand("testtestsdfs", "test", Some("test"), command) + RCommand::new(NAME, DESCRIPTION, command).usage("new [options]") } fn command(args: CmdArgs) -> i32 { let project_name = args.args.commands.get(0).unwrap_or_else(|| { - eprintln!("Project name is required"); + Error.write("Project name is required"); std::process::exit(1); }); diff --git a/src/app/config_parser.rs b/clier_app/src/config_parser.rs similarity index 94% rename from src/app/config_parser.rs rename to clier_app/src/config_parser.rs index 09cd887..331538d 100644 --- a/src/app/config_parser.rs +++ b/clier_app/src/config_parser.rs @@ -5,7 +5,7 @@ use std::{ path::Path, }; -#[derive(Serialize, Deserialize, Debug, Clone)] +#[derive(Debug, Clone, Serialize, Deserialize)] pub struct Config { pub command_dir: String, } diff --git a/src/app/generators/command.rs b/clier_app/src/generators/command.rs similarity index 96% rename from src/app/generators/command.rs rename to clier_app/src/generators/command.rs index 48945bf..0078d66 100644 --- a/src/app/generators/command.rs +++ b/clier_app/src/generators/command.rs @@ -1,6 +1,6 @@ use std::{fs::File, io::Write, path::Path}; -use crate::app::config_parser::Config; +use crate::config_parser::Config; pub struct CommandGenerator; diff --git a/src/app/generators/mod.rs b/clier_app/src/generators/mod.rs similarity index 100% rename from src/app/generators/mod.rs rename to clier_app/src/generators/mod.rs diff --git a/src/app/generators/project.rs b/clier_app/src/generators/project.rs similarity index 93% rename from src/app/generators/project.rs rename to clier_app/src/generators/project.rs index 55c765c..b8d7600 100644 --- a/src/app/generators/project.rs +++ b/clier_app/src/generators/project.rs @@ -37,7 +37,7 @@ clier = \"{CLIER_VERSION}\" let _ = File::create(path.join("src/main.rs")) .unwrap() - .write_all(include_bytes!("../../../examples/parser.rs")); + .write_all(include_bytes!("../../../clier/examples/parser.rs")); let _ = File::create(path.join("clier.config.json")).unwrap().write_all( " diff --git a/src/main.rs b/clier_app/src/main.rs similarity index 68% rename from src/main.rs rename to clier_app/src/main.rs index bbc82dd..cde003a 100644 --- a/src/main.rs +++ b/clier_app/src/main.rs @@ -1,18 +1,19 @@ -mod app; +mod commands; +mod config_parser; +mod generators; -use app::commands::generate::generate_command; -use app::commands::new::new_command; -use clier::builder; use clier::error::Error; use clier::run::{Meta, Runnable}; use clier::Clier; +use commands::generate::generate_command; +use commands::new::new_command; const VERSION: &str = env!("CARGO_PKG_VERSION"); const NAME: &str = env!("CARGO_PKG_NAME"); const DESCRIPTION: &str = env!("CARGO_PKG_DESCRIPTION"); fn main() -> Result { - let meta = Meta::new(NAME, DESCRIPTION, VERSION).usage("THis is the usage"); + let meta = Meta::new(NAME, DESCRIPTION, VERSION).usage("This is the usage"); let app = Clier::parse().meta(&meta).command(generate_command()).command(new_command()); app.run() } diff --git a/clier_parser/Cargo.toml b/clier_parser/Cargo.toml new file mode 100644 index 0000000..e347aca --- /dev/null +++ b/clier_parser/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "clier_parser" +version = "0.5.0" +edition = "2021" +authors = ["Vincent Thomas"] +description = "The underlying parser for the cli framework clier" +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html \ No newline at end of file diff --git a/clier_parser/src/commands_argv.rs b/clier_parser/src/commands_argv.rs new file mode 100644 index 0000000..04875ef --- /dev/null +++ b/clier_parser/src/commands_argv.rs @@ -0,0 +1,11 @@ +use super::utils::{is_long_flag, is_short_flag}; + +pub fn filter_commands(index: &usize, command: &str, all_args: &[String]) -> bool { + let may_flag_index = (if *index == 0 { 1 } else { *index }) - 1; + + let is_current_flag = is_short_flag(command.clone()) || is_long_flag(command.clone()); + let may_flag = all_args.get(may_flag_index); + let is_before_flag = may_flag.is_some_and(|v| is_short_flag(v) || is_long_flag(v)); + + !(is_before_flag && is_current_flag || command.starts_with('-')) +} diff --git a/src/parser/flags_argv.rs b/clier_parser/src/flags_argv.rs similarity index 100% rename from src/parser/flags_argv.rs rename to clier_parser/src/flags_argv.rs diff --git a/src/parser/mod.rs b/clier_parser/src/lib.rs similarity index 100% rename from src/parser/mod.rs rename to clier_parser/src/lib.rs diff --git a/src/parser/utils.rs b/clier_parser/src/utils.rs similarity index 100% rename from src/parser/utils.rs rename to clier_parser/src/utils.rs diff --git a/src/app/mod.rs b/src/app/mod.rs deleted file mode 100644 index 9d86a50..0000000 --- a/src/app/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod commands; -pub mod config_parser; -pub mod generators; diff --git a/src/parser/commands_argv.rs b/src/parser/commands_argv.rs deleted file mode 100644 index dde356c..0000000 --- a/src/parser/commands_argv.rs +++ /dev/null @@ -1,39 +0,0 @@ -use super::utils::{is_long_flag, is_short_flag}; - -pub fn filter_commands(index: &usize, command: &str, all_args: &[String]) -> bool { - let may_flag_index = (if *index == 0 { 1 } else { *index }) - 1; - - let _is_current_flag = is_short_flag(command.clone()) || is_long_flag(command.clone()); - - let may_flag = all_args.get(may_flag_index); - - let _is_before_flag = may_flag.is_some_and(|v| is_short_flag(v) || is_long_flag(v)); - - if _is_before_flag && _is_current_flag || command.starts_with('-') { - return false; - } - - // let Some(cmd_before) = all_args.get(index_of_flag) else { - // return !is_current_flag; - // }; - // let is_before_flag = is_short_flag(cmd_before) || is_long_flag(cmd_before); - // let current_flag_value = is_before_flag && !is_current_flag; - - // if current_flag_value && cmd_before.starts_with("--no-") { - // return true; - // }; - - // if current_flag_value && cmd_before.contains('=') { - // return false; - // } - - true - - // !is_current_flag - - // match (current_flag_value, cmd_before.starts_with("--no-"), cmd_before.contains('=')) { - // (true, true, _) => true, - // (true, _, false) => false, - // (_, _, _) => !is_current_flag, - // } -}