use json::{self, JsonValue, array}; use uuid::Uuid; use crate::users::contact::Contact; use crate::util::file_util::{load_file, save_file}; pub fn mod_user(storage_owner: Uuid, contact: &Contact) { let dir: &str = &format!("users/{}/contacts/", storage_owner); let s = load_file(dir, "contacts.json"); let mut contacts = if !s.is_empty() { json::parse(&s).unwrap_or(array![]) } else { array![] }; for i in 0..contacts.len() { if contacts[i]["user_id"].as_str() == Some(&contact.user_id.unwrap().to_string()) { contacts.array_remove(i); break; } } contacts.push(contact.to_json()).unwrap(); save_file(&dir, "contacts.json", &contacts.dump()); } pub fn get_user(storage_owner: Uuid, user_id: Uuid) -> Option { let dir = format!("users/{}/contacts/", storage_owner); let s = load_file(&dir, "contacts.json"); if s.is_empty() { return None; } if let Ok(contacts) = json::parse(&s) { for i in 0..contacts.len() { if let Some(uid) = contacts[i]["user_id"].as_str() { if Uuid::parse_str(uid).ok()? == user_id { return Option::from(Contact::from_json(&contacts[i])); } } } } None } pub fn get_users(storage_owner: Uuid) -> JsonValue { let dir: &str = &format!("users/{}/contacts/", storage_owner); let s = load_file(dir, "contacts.json"); let mut contacts_out = array![]; if !s.is_empty() { if let Ok(contacts) = json::parse(&s) { for i in 0..contacts.len() { let c = Contact::from_json(&contacts[i]); contacts_out.push(c.to_json()).unwrap(); } } } contacts_out }