From ea3be485778de8d6b442ab8048cb77fe6c00f686 Mon Sep 17 00:00:00 2001 From: Ian Wijma Date: Mon, 1 Apr 2024 23:15:55 +1100 Subject: [PATCH] Added resolving paths. --- examples/empty/.git-keep | 0 examples/file_exists/rask.yaml | 0 examples/file_renamed/running-tasks.yaml | 0 src/commands/mod.rs | 1 + src/commands/run.rs | 16 ++++++++++++ src/main.rs | 32 ++++++++++++++++++++++-- src/utils/file_resolvers.rs | 23 +++++++++++++++++ src/utils/mod.rs | 1 + 8 files changed, 71 insertions(+), 2 deletions(-) create mode 100644 examples/empty/.git-keep create mode 100644 examples/file_exists/rask.yaml create mode 100644 examples/file_renamed/running-tasks.yaml create mode 100644 src/commands/mod.rs create mode 100644 src/commands/run.rs create mode 100644 src/utils/file_resolvers.rs create mode 100644 src/utils/mod.rs 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;