use async_trait::async_trait;
use fistinc_errors::ServiceResult;
use crate::domain::entity::Token;
use crate::domain::entity::User;
#[async_trait]
pub trait UserSecurityService: Send + Sync {
async fn hash(&self, input: &str) -> ServiceResult<String>;
async fn verify_hash(&self, hashed: &str, raw: &str) -> ServiceResult<bool>;
async fn token_generator(&self, user: &User) -> ServiceResult<String>;
async fn decode_token(&self, token: &str) -> ServiceResult<Token>;
}