agentlink_sdk/
token_manager.rs1use std::sync::{Arc, RwLock};
7
8#[derive(Debug, Clone)]
10pub struct TokenManager {
11 token: Arc<RwLock<Option<String>>>,
12}
13
14impl TokenManager {
15 pub fn new() -> Self {
17 Self {
18 token: Arc::new(RwLock::new(None)),
19 }
20 }
21
22 pub fn set_token(&self, token: &str) {
24 if let Ok(mut guard) = self.token.write() {
25 *guard = Some(token.to_string());
26 }
27 }
28
29 pub fn get_token(&self) -> Option<String> {
31 self.token.read().ok().and_then(|guard| guard.clone())
32 }
33
34 pub fn clear_token(&self) {
36 if let Ok(mut guard) = self.token.write() {
37 *guard = None;
38 }
39 }
40
41 pub fn has_token(&self) -> bool {
43 self.get_token().is_some()
44 }
45}
46
47impl Default for TokenManager {
48 fn default() -> Self {
49 Self::new()
50 }
51}
52
53#[cfg(test)]
54mod tests {
55 use super::*;
56
57 #[test]
58 fn test_token_manager() {
59 let manager = TokenManager::new();
60
61 assert!(!manager.has_token());
63 assert_eq!(manager.get_token(), None);
64
65 manager.set_token("test_token_123");
67 assert!(manager.has_token());
68 assert_eq!(manager.get_token(), Some("test_token_123".to_string()));
69
70 manager.clear_token();
72 assert!(!manager.has_token());
73 assert_eq!(manager.get_token(), None);
74 }
75}