Add serde framework with Derive feature to use it in structures and functions. Also add a separate serde_json lib for converting into specifically JSON:
Add serde, then mark the structures with Serialise, Deserialise traits and use serde_json for serialising:
use serde::{Deserialize, Serialize};
#[derive(PartialEq, Debug, Clone, Serialize, Deserialize)]
pub enum LoginRole {
Admin,
User,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct User {
pub username: String,
pub password: String,
pub role: LoginRole,
}
pub fn get_default_users() -> HashMap<String, User> {
let mut users = HashMap::new();
users.insert(
"admin".to_string(),
User::new("admin", "password", LoginRole::Admin),
);
users.insert(
"bob".to_string(),
User::new("bob", "password", LoginRole::User),
);
users
}
pub fn get_users() -> HashMap<String, User> {
let users_path = Path::new("users.json");
if users_path.exists() {
// Load the file!
let users_json = std::fs::read_to_string(users_path).unwrap();
let users: HashMap<String, User> = serde_json::from_str(&users_json).unwrap();
users
} else {
// Create a file and return it
let users = get_default_users();
let users_json = serde_json::to_string(&users).unwrap();
std::fs::write(users_path, users_json).unwrap();
users
}