use super::Result;
use std::any::Any;
pub trait CredentialApi {
fn set_password(&self, password: &str) -> Result<()>;
fn get_password(&self) -> Result<String>;
fn delete_password(&self) -> Result<()>;
fn as_any(&self) -> &dyn Any;
}
impl std::fmt::Debug for Credential {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
self.as_any().fmt(f)
}
}
pub type Credential = dyn CredentialApi + Send + Sync;
pub trait CredentialBuilderApi {
fn build(&self, target: Option<&str>, service: &str, user: &str) -> Result<Box<Credential>>;
fn as_any(&self) -> &dyn Any;
}
impl std::fmt::Debug for CredentialBuilder {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
self.as_any().fmt(f)
}
}
pub type CredentialBuilder = dyn CredentialBuilderApi + Send + Sync;