This commit is contained in:
neza 2023-03-03 07:10:07 +03:00
commit b30fd4b299
7 changed files with 89 additions and 0 deletions

4
.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
/target
.*~
*~
Session.vim

7
Cargo.lock generated Normal file
View File

@ -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"

8
Cargo.toml Normal file
View File

@ -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]

2
README.md Normal file
View File

@ -0,0 +1,2 @@
*New git.org.ru repo tutorial*
*Rust programming language*

6
src/main.rs Normal file
View File

@ -0,0 +1,6 @@
mod os;
use os::args as ar;
fn main() {
ar::run();
}

61
src/os/args.rs Normal file
View File

@ -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);
}

1
src/os/mod.rs Normal file
View File

@ -0,0 +1 @@
pub mod args;