Added resolving paths.
This commit is contained in:
		
							parent
							
								
									6fe987a1d0
								
							
						
					
					
						commit
						ea3be48577
					
				| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
pub mod run;
 | 
			
		||||
| 
						 | 
				
			
			@ -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(())
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										32
									
								
								src/main.rs
								
								
								
								
							
							
						
						
									
										32
									
								
								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)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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<PathBuf, String> {
 | 
			
		||||
    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)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
pub mod file_resolvers;
 | 
			
		||||
		Loading…
	
		Reference in New Issue