use crate::errors::DomainResult; // Intentionally sync: CPU-bound hashing should run on a blocking thread pool pub trait AuthService: Send + Sync { fn hash_password(&self, password: &str) -> DomainResult; fn verify_password(&self, password: &str, hash: &str) -> DomainResult; }