use async_trait::async_trait; use std::collections::HashSet; pub type DomainResult = crate::domain::error::Result; #[async_trait] pub trait TcpBackendHandler { async fn get_jwt_blacklist(&self) -> anyhow::Result>; async fn create_refresh_token(&self, user: &str) -> DomainResult<(String, chrono::Duration)>; async fn check_token(&self, refresh_token_hash: u64, user: &str) -> DomainResult; async fn blacklist_jwts(&self, user: &str) -> DomainResult>; async fn delete_refresh_token(&self, refresh_token_hash: u64) -> DomainResult<()>; } #[cfg(test)] use crate::domain::handler::*; #[cfg(test)] mockall::mock! { pub TestTcpBackendHandler{} impl Clone for TestTcpBackendHandler { fn clone(&self) -> Self; } #[async_trait] impl LoginHandler for TestTcpBackendHandler { async fn bind(&self, request: BindRequest) -> DomainResult<()>; } #[async_trait] impl BackendHandler for TestTcpBackendHandler { async fn list_users(&self, request: ListUsersRequest) -> DomainResult>; async fn list_groups(&self) -> DomainResult>; async fn get_user_details(&self, request: UserDetailsRequest) -> DomainResult; async fn get_user_groups(&self, user: &str) -> DomainResult>; async fn create_user(&self, request: CreateUserRequest) -> DomainResult<()>; async fn delete_user(&self, request: DeleteUserRequest) -> DomainResult<()>; async fn create_group(&self, request: CreateGroupRequest) -> DomainResult; async fn add_user_to_group(&self, request: AddUserToGroupRequest) -> DomainResult<()>; } #[async_trait] impl TcpBackendHandler for TestTcpBackendHandler { async fn get_jwt_blacklist(&self) -> anyhow::Result>; async fn create_refresh_token(&self, user: &str) -> DomainResult<(String, chrono::Duration)>; async fn check_token(&self, refresh_token_hash: u64, user: &str) -> DomainResult; async fn blacklist_jwts(&self, user: &str) -> DomainResult>; async fn delete_refresh_token(&self, refresh_token_hash: u64) -> DomainResult<()>; } }