forked from mars/breed
1
0
Fork 0

better argument parsing

This commit is contained in:
Emma Tebibyte 2023-04-11 18:26:02 -04:00
parent 71490f7421
commit 1e69ae5e98
1 changed files with 27 additions and 16 deletions

View File

@ -19,13 +19,14 @@
use std::{ use std::{
env::args, env::args,
fs::File,
io::{ io::{
Read, Read,
stdin,
stdout, stdout,
Stdout, Stdout,
Write, Write,
}, },
os::fd::FromRawFd,
}; };
use crossterm::{ use crossterm::{
@ -353,24 +354,34 @@ fn screen_main(stdout: &mut Stdout, mut state: State) -> Result<()> {
fn main() -> Result<()> { fn main() -> Result<()> {
let argv = args().collect::<Vec<String>>(); let argv = args().collect::<Vec<String>>();
let mut buf = Vec::new();
let text: String; let text: String;
if !argv.get(1).is_some() { text = match argv.get(1) {
text = "".to_string(); Some(path) => {
} else { match path.as_str() {
let mut buf = Vec::new(); "-" => unsafe { File::from_raw_fd(0) },
std::fs::File::open(argv[1].clone()).unwrap_or_else(|_| { _ => {
eprintln!("{}: {}: No such file.", argv[0], argv[1]); std::fs::File::open(path).unwrap_or_else(|_| {
exit(EX_UNAVAILABLE); eprintln!(
}).read_to_end(&mut buf).unwrap(); "{}: {}: No such file or directory.",
argv[0],
argv[1]
);
exit(EX_UNAVAILABLE);
})
},
}.read_to_end(&mut buf).unwrap();
text = String::from_utf8(buf).unwrap_or_else(|_| { String::from_utf8(buf).unwrap_or_else(|_| {
eprintln!( eprintln!(
"{}: {}: File contents are invalid UTF-8.", argv[0], argv[1] "{}: {}: File contents are invalid UTF-8.", argv[0], argv[1]
); );
exit(EX_DATAERR); exit(EX_DATAERR);
}); })
} },
None => "".to_string(),
};
let state = State::from_str(&text)?; let state = State::from_str(&text)?;
let mut stdout = stdout(); let mut stdout = stdout();