diff --git a/examples/empty/.git-keep b/examples/empty/.git-keep new file mode 100644 index 0000000..e69de29 diff --git a/examples/file_exists/rask.yaml b/examples/file_exists/rask.yaml new file mode 100644 index 0000000..e69de29 diff --git a/examples/file_renamed/running-tasks.yaml b/examples/file_renamed/running-tasks.yaml new file mode 100644 index 0000000..e69de29 diff --git a/src/commands/mod.rs b/src/commands/mod.rs new file mode 100644 index 0000000..a1f1444 --- /dev/null +++ b/src/commands/mod.rs @@ -0,0 +1 @@ +pub mod run; \ No newline at end of file diff --git a/src/commands/run.rs b/src/commands/run.rs new file mode 100644 index 0000000..f6d8e14 --- /dev/null +++ b/src/commands/run.rs @@ -0,0 +1,16 @@ +use clap::Args; +use crate::utils::file_resolvers::resolve_configuration_file; + +#[derive(Args, Debug)] +pub struct Arguments { + #[arg(default_value = ".")] + target: String +} + +pub fn run (arguments: &Arguments) -> Result<(), String> { + let target = resolve_configuration_file(&arguments.target)?; + + println!("{:?}", target); + + Ok(()) +} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index e7a11a9..1f6fabf 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,31 @@ -fn main() { - println!("Hello, world!"); +use std::process::exit; +use clap::{Parser, Subcommand}; +use commands::run; + +mod commands; +mod utils; + +#[derive(Subcommand, Debug)] +enum Command { + Run(run::Arguments) +} + +#[derive(Parser, Debug)] +#[command(author, version, about, long_about = None, propagate_version = true)] +struct Arguments { + #[command(subcommand)] + command: Command +} + +fn main() { + let arguments = Arguments::parse(); + + let result = match &arguments.command { + Command::Run(arguments) => { run::run(arguments) } + }; + + match result { + Ok(_) => exit(0), + Err(err) => eprintln!("{}", err) + } } diff --git a/src/utils/file_resolvers.rs b/src/utils/file_resolvers.rs new file mode 100644 index 0000000..06eadf7 --- /dev/null +++ b/src/utils/file_resolvers.rs @@ -0,0 +1,23 @@ +use std::path::{Path, PathBuf}; +use std::fs::canonicalize; + +const DEFAULT_FILENAME: &str = "rask.yaml"; + +pub fn resolve_configuration_file(target: &String) -> Result { + let target_path = Path::new(target); + + let mut target = match canonicalize(target_path) { + Ok(target) => target, + Err(_) => return Err(format!("Target does not exists: {:?}", target)) + }; + + if target.is_dir() { + target.push(DEFAULT_FILENAME); + } + + if !target.exists() { + return Err(format!("Target does not exists: {:?}", target)) + } + + Ok(target) +} diff --git a/src/utils/mod.rs b/src/utils/mod.rs new file mode 100644 index 0000000..b207fa4 --- /dev/null +++ b/src/utils/mod.rs @@ -0,0 +1 @@ +pub mod file_resolvers;