61 lines
1.5 KiB
Rust
61 lines
1.5 KiB
Rust
use std::io;
|
|
use std::io::Write;
|
|
|
|
pub fn do_math(arguments: String, operator: char) -> u32 {
|
|
let split_args = arguments.split("-").collect::<Vec<&str>>();
|
|
|
|
let num1: u32 = match split_args[0].parse() {
|
|
Ok(num) => num,
|
|
Err(_e) => panic!("ArgumentError: Not a number: {}", split_args[0]),
|
|
};
|
|
|
|
let num2: u32 = match split_args[1].parse() {
|
|
Ok(num) => num,
|
|
Err(_e) => panic!("ArgumentError: Not a number: {}", split_args[1]),
|
|
};
|
|
|
|
match operator {
|
|
'+' => num1 + num2,
|
|
'-' => num1 - num2,
|
|
'*' => num1 * num2,
|
|
'/' => num1 / num2,
|
|
_ => panic!("SyntaxError: Unknown operator {}", operator),
|
|
}
|
|
}
|
|
|
|
pub fn args_or_comments(arguments: &str) -> String {
|
|
let argument_vec: Vec<char> = arguments.chars().collect();
|
|
let mut builder: String = String::from("");
|
|
|
|
for char in argument_vec {
|
|
if char == '#' {
|
|
break;
|
|
} else {
|
|
builder.push_str(&char.to_string());
|
|
}
|
|
}
|
|
|
|
builder
|
|
}
|
|
|
|
pub fn read_stdin(prompt: &str) -> String {
|
|
print!("{}", prompt);
|
|
io::stdout().flush().unwrap();
|
|
|
|
let mut result = String::new();
|
|
io::stdin().read_line(&mut result).expect("Expected a string!");
|
|
|
|
result.trim().to_string()
|
|
}
|
|
|
|
pub fn inp_or_normal(value: &str) -> String {
|
|
let value_vec: Vec<char> = value.chars().collect();
|
|
|
|
if value_vec[0] == '<' {
|
|
let prompt: String = value_vec[1..].into_iter().collect();
|
|
|
|
return read_stdin(&prompt);
|
|
} else {
|
|
return value.to_string();
|
|
}
|
|
} |