use crate::query::Query;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Credentials {
pub username: String,
pub password: String,
}
impl Credentials {
pub fn new(username: impl Into<String>, password: impl Into<String>) -> Self {
Self {
username: username.into(),
password: password.into(),
}
}
}
#[derive(Debug, thiserror::Error)]
pub enum HelperError {
#[error("io error invoking credential helper: {0}")]
Io(#[from] std::io::Error),
#[error("credential helper failed: {0}")]
Failed(String),
}
pub trait Helper: Send + Sync {
fn fill(&self, query: &Query) -> Result<Option<Credentials>, HelperError>;
fn approve(&self, query: &Query, creds: &Credentials) -> Result<(), HelperError>;
fn reject(&self, query: &Query, creds: &Credentials) -> Result<(), HelperError>;
}