I'm new to Rust, coming from C++, and so to increase my knowledge of Rust I made a small program to manage an array. You can add, insert, delete, print and more an array or its elements.
I don't really care much about performance at this point, but more on readability, good practices and so on.
So, what could I have done better?
use std::io;
fn get_element() -> i64 {
println!("Enter the element: ");
let mut element = String::new();
io::stdin().read_line(&mut element).expect("Failed to read line!");
match element.trim().parse() {
Ok(num) => num,
Err(_) => {
println!("Invalid number! Try again.");
get_element()
}
}
}
fn get_index(length: usize) -> usize {
println!("Enter the index: ");
let mut index = String::new();
io::stdin().read_line(&mut index).expect("Failed to read line!");
match index.trim().parse() {
Ok(index) if index < length => index,
Ok(index) => {
println!("Invalid index! {} is not in range [0, {})! Try again.", index, length);
get_index(length)
},
Err(_) => {
println!("Invalid number! Try again.");
get_index(length)
}
}
}
fn main() {
println!("Welcome to the Vector application!");
let mut vec: Vec<i64> = Vec::new();
loop {
println!("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-");
println!("What do you want to do?");
println!("1. Clear the vector");
println!("2. Add element");
println!("3. Insert element at pos");
println!("4. Delete an element at index");
println!("5. Print an element");
println!("6. Print vector");
println!("*. Exit");
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed to read line");
let input: u8 = match input.trim().parse() {
Ok(num) if num < 7 => num,
Ok(num) => {
println!("{} is not in the range [0, 6]!", num);
continue;
}
Err(_) => {
break;
}
};
let length = vec.len();
if input == 1 {
vec.clear();
}
else if input == 2 {
vec.push(get_element());
}
else if input == 3 {
vec.insert(get_index(length), get_element());
}
else if input == 4 {
vec.remove(get_index(length));
}
else if input == 5 {
println!("The element is: {}", match vec.get(get_index(vec.len())) {
Some(element) => element,
None => {
println!("Invalid index!");
continue;
}
});
}
else if input == 6 {
for i in &vec {
println!("{} ", i.to_string());
}
}
}
}