use std::collections::{HashMap, HashSet};
use std::io;
fn get_user_input(title: &str) -> String {
let mut user_input_str = String::new();
println!("{}", title);
io::stdin()
.read_line(&mut user_input_str)
.expect("Failed to read line");
user_input_str
}
fn main() {
let mut departments = HashMap::new();
loop {
let user_command = get_user_input("Enter command:\n - Add [Someone] to [department]\n - List departments\n - List employees by [department]\n - List all\n - Quit");
let mut command_iter = user_command.split_whitespace();
let command = command_iter.next();
let mut params = Vec::new();
for word in command_iter {
params.push(word);
}
match command {
Some("Add") => {
if params.len() == 3 && params[1] == "to" {
let employee_name = params[0];
let department = params[2];
let employees = departments.entry(department.to_string()).or_insert( HashSet::new());
employees.insert(employee_name.to_string());
} else {
println!("Invalid params");
}
},
Some("List") => {
if params.len() == 1 && params[0] == "all" {
println!("{:#?}", departments);
} else if params.len() == 1 && params[0] == "departments" {
println!("departments: {:?}", departments.keys());
} else if params.len() == 3 && params[0] == "employees" && params[1] == "by" {
let department = params[2];
if departments.contains_key(department) {
println!("{}: {:?}", department, departments.get(department).unwrap());
} else {
println!("department not exist");
}
} else {
println!("Invalid params");
}
},
Some("Quit") => {
break;
}
_ => println!("Invalid command")
}
}
}