use crate::capability::auth::SaslCredential;
use crate::capability::error::CapabilityError;
use futures::Stream;
use otel_arrow_dfe_engine_macros::capability;
use std::pin::Pin;
use std::time::Duration;
pub const SASL_CREDENTIAL_USABLE_MARGIN: Duration = Duration::from_secs(30);
pub type SaslCredentialStream = Pin<Box<dyn Stream<Item = SaslCredential> + 'static>>;
#[capability(
name = "sasl_credential_provider",
description = "Provides SASL username/password credentials, refreshed in the background"
)]
pub trait SaslCredentialProvider {
async fn get_credential(&self) -> Result<SaslCredential, CapabilityError>;
fn credential_stream(&self) -> SaslCredentialStream;
}