Advertisement
Guest User

Untitled

a guest
Mar 21st, 2019
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.02 KB | None | 0 0
  1. use std::sync::RwLock;
  2. use std::collections::hash_map::HashMap;
  3. use std::sync::Arc;
  4.  
  5. struct User {
  6. token: String,
  7. }
  8.  
  9. struct MyStruct {
  10. users: RwLock<HashMap<String, Arc<RwLock<User>>>>
  11. }
  12.  
  13. impl MyStruct {
  14. pub fn get_mut(&self, uid: &str) -> Option<Arc<RwLock<User>>>
  15. {
  16. if let Some(u) = self.users.read().unwrap().get(uid)
  17. {
  18. Some(u.clone())
  19. }
  20. else
  21. {
  22. None
  23. }
  24. }
  25.  
  26. pub fn update_token(&self, uid: &str, token: &str)
  27. {
  28. if let Some(u) = self.get_mut(uid)
  29. {
  30. u.write().unwrap().token = token.to_string();
  31. }
  32. }
  33. }
  34.  
  35. fn main() {
  36. let db = MyStruct {
  37. users: RwLock::new(HashMap::new())
  38. };
  39. db.users.write().unwrap().insert("test".to_string(), Arc::new(RwLock::new(User {token: "test".to_string()})));
  40. let user = db.get_mut("test").unwrap();
  41. db.users.write().unwrap().clear();
  42. user.write().unwrap().token = "36".to_string();
  43. println!("{}", db.get_mut("test").unwrap().read().unwrap().token);
  44. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement