1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
//! Crate for managing tokens for VK bots!
//! It provides a few abstractions for doing it.
//! # Example
//! ```
//! use token_manager::{TokenManager, ManageTokens};
//! use token_manager::{GroupId, SimpleToken, Token};
//! let mut manager = TokenManager::new(); // create token manager
//! // put (boxed) token into.
//! manager.add_token(GroupId::new(123), Box::new(SimpleToken::new(Token::new("my-token".into()))));
//! let result = async {
//!     // get token by id
//!     let tok = manager.get_by_id(GroupId::new(123)).await;
//!     assert_eq!(tok, Some(&Token::new("my-token".into())));
//! };
//! ```

pub use async_trait::async_trait;

pub mod manager;
pub mod token;

pub use manager::{GroupId, ManageTokens, TokenManager};
pub use token::{GetToken, Token};

/// Default implementor of `GetToken` trait.
/// Usually you would use it.
#[derive(Debug, Hash, Eq, PartialEq, Clone)]
pub struct SimpleToken {
    pub token: Token,
}

impl SimpleToken {
    /// Create new `SimpleToken` form `Token`
    pub fn new(token: Token) -> Self {
        Self { token }
    }
}

#[async_trait]
impl GetToken for SimpleToken {
    async fn get_token(&self) -> &Token {
        &self.token
    }
}