futu_cache/
login_cache.rs1use parking_lot::RwLock;
4
5#[derive(Debug, Clone)]
7pub struct LoginState {
8 pub user_id: u32,
10 pub is_logged_in: bool,
12 pub login_account: String,
14 pub region: String,
16 pub user_attribution: Option<i32>,
18 pub server_addr: String,
20}
21
22pub struct LoginCache {
24 state: RwLock<Option<LoginState>>,
25}
26
27impl LoginCache {
28 pub fn new() -> Self {
29 Self {
30 state: RwLock::new(None),
31 }
32 }
33
34 pub fn set_login_state(&self, state: LoginState) {
35 *self.state.write() = Some(state);
36 }
37
38 pub fn get_login_state(&self) -> Option<LoginState> {
39 self.state.read().clone()
40 }
41
42 pub fn is_logged_in(&self) -> bool {
43 self.state
44 .read()
45 .as_ref()
46 .map(|s| s.is_logged_in)
47 .unwrap_or(false)
48 }
49
50 pub fn clear(&self) {
51 *self.state.write() = None;
52 }
53}
54
55impl Default for LoginCache {
56 fn default() -> Self {
57 Self::new()
58 }
59}