rustybook 0.2.0

An ergonomic Facebook client in Rust
Documentation
use std::sync::RwLock;

/// Cache store for current user state.
#[derive(Debug)]
pub struct UserCache {
    user: RwLock<Option<crate::User>>,
}

impl UserCache {
    /// Creates user cache with optional initial value.
    pub fn new(user: Option<crate::User>) -> Self {
        Self {
            user: RwLock::new(user),
        }
    }

    /// Returns cached user.
    pub fn get(&self) -> Option<crate::User> {
        self.user.read().ok().and_then(|user| user.clone())
    }

    /// Updates cached user.
    pub fn set(&self, user: crate::User) {
        if let Ok(mut current) = self.user.write() {
            *current = Some(user);
        }
    }
}

impl Default for UserCache {
    fn default() -> Self {
        Self::new(None)
    }
}