I want to put variable in file.write_all() function. in the documentation they don't show how to do that, so how to do that?
Here's is the code
use std::io;
use std::io::prelude::*;
use std::process;
use std::fs::File;
fn main() {
loop {
println!("View People or add a new Person? (view/add/quit)");
// asking user if they want to view people or add a new person
let mut view_or_add: String = String::new();
io::stdin()
.read_line(&mut view_or_add)
.expect("Something went wrong");
let view_or_add: String = view_or_add.trim().to_lowercase();
match view_or_add.as_str() {
"view" => view_people(),
"add" => add_person(),
"quit" => process::exit(0),
_ => {
println!("Invalid command");
continue;
},
};
};
}
fn add_person() {
// person name
println!("Person name >>");
let mut person_name: String = String::new();
io::stdin()
.read_line(&mut person_name)
.expect("Something went wrong");
let name: &str = person_name.trim();
// person age
let age: u32 = loop {
println!("Person age >>");
let mut person_age: String = String::new();
io::stdin()
.read_line(&mut person_age)
.expect("Something went wrong");
let person_age: u32 = match person_age.trim().parse() {
Ok(num) => num,
Err(_) => {
println!("It's not a valid age!");
continue;
},
};
break person_age;
};
// person hobby
println!("Person hobby >>");
let mut person_hobby: String = String::new();
io::stdin()
.read_line(&mut person_hobby)
.expect("Something went wrong");
let hobby: &str = person_hobby.trim();
let person_data = format!("name: {}, age: {}, hobby: {}", name, age, hobby);
let mut file = File::create("people_list.txt").expect("Oops Something Went Wrong");
file.write_all(b"{}", person_data);
println!("Successfully added");
}
fn view_people() {
// get people list from people_list.txt file
let mut file = File::open("people_list.txt").expect("Oops Something Went Wrong");
let mut contents = String::new();
file.read_to_string(&mut contents);
println!("The people list:");
println!("{}", contents);
}