first
This commit is contained in:
commit
b30fd4b299
|
@ -0,0 +1,4 @@
|
|||
/target
|
||||
.*~
|
||||
*~
|
||||
Session.vim
|
|
@ -0,0 +1,7 @@
|
|||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "ds"
|
||||
version = "0.1.0"
|
|
@ -0,0 +1,8 @@
|
|||
[package]
|
||||
name = "ds"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
|
@ -0,0 +1,2 @@
|
|||
*New git.org.ru repo tutorial*
|
||||
*Rust programming language*
|
|
@ -0,0 +1,6 @@
|
|||
mod os;
|
||||
use os::args as ar;
|
||||
|
||||
fn main() {
|
||||
ar::run();
|
||||
}
|
|
@ -0,0 +1,61 @@
|
|||
use std::{env, process};
|
||||
|
||||
//#[derive(Debug)]
|
||||
struct Args {
|
||||
flags: Vec<char>,
|
||||
script: String,
|
||||
files: Vec<String>,
|
||||
}
|
||||
|
||||
pub fn run() {
|
||||
let ret = get_args();
|
||||
println!("{:?} {:?} {:?}", ret.flags, ret.script, ret.files);
|
||||
}
|
||||
|
||||
fn get_args() -> Args {
|
||||
let args: Vec<String> = env::args().skip(1).collect();
|
||||
let mut flags = Vec::new();
|
||||
let usage: &str = "Usage: ds -[vn](e|f) script files...";
|
||||
for (ind, item) in args.iter().enumerate() {
|
||||
if item.starts_with('-') {
|
||||
for (i, sw) in item.chars().skip(1).enumerate() {
|
||||
match sw {
|
||||
'h' => {
|
||||
println!("{}", usage);
|
||||
process::exit(0);
|
||||
}
|
||||
'f' | 'e' => {
|
||||
if i + 2 != item.len() {
|
||||
eprintln!("-{} it is not last flag", sw);
|
||||
process::exit(1);
|
||||
}
|
||||
let script = match args.get(ind + 1) {
|
||||
None => {
|
||||
eprintln!("not argument script");
|
||||
process::exit(1);
|
||||
}
|
||||
Some(x) => x.to_owned(),
|
||||
};
|
||||
let files = match args.get(ind + 2..) {
|
||||
//.unwrap_or(&[]).to_vec();
|
||||
None | Some([]) => {
|
||||
eprintln!("not argument files");
|
||||
process::exit(1);
|
||||
}
|
||||
Some(x) => x.to_vec(),
|
||||
};
|
||||
flags.push(sw);
|
||||
return Args {
|
||||
flags,
|
||||
script,
|
||||
files,
|
||||
};
|
||||
}
|
||||
x => flags.push(x),
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
eprintln!("{}", usage);
|
||||
process::exit(1);
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
pub mod args;
|
Loading…
Reference in New Issue