#[cfg(feature = "healthcheck")]
use std::time::Instant;
use std::{
sync::{Arc, RwLock},
time::Duration,
};
use tokio::sync::Mutex;
#[cfg(feature = "healthcheck")]
use crate::models::HealthCheckResponse;
use crate::{
auth::{AuthProvider, ResolvedAuth},
connection::SharedConnection,
event_handlers::EventHandlers,
models::ConnectionOptions,
query::{AuthRefreshCallback, QueryExecutor},
timeouts::KalamLinkTimeouts,
};
mod builder;
mod endpoints;
mod runtime;
#[cfg(test)]
mod tests;
#[derive(Clone)]
pub struct KalamLinkClient {
base_url: String,
http_client: reqwest::Client,
resolved_auth: ResolvedAuth,
auth: AuthProvider,
query_executor: QueryExecutor,
#[cfg(feature = "healthcheck")]
health_cache: Arc<Mutex<HealthCheckCache>>,
timeouts: KalamLinkTimeouts,
connection_options: ConnectionOptions,
event_handlers: EventHandlers,
shared_resolved_auth: Arc<RwLock<ResolvedAuth>>,
connection: Arc<Mutex<Option<Arc<SharedConnection>>>>,
}
pub type QueryUploadFile<'a> = (&'a str, &'a str, Vec<u8>, Option<&'a str>);
pub struct KalamLinkClientBuilder {
base_url: Option<String>,
timeout: Duration,
resolved_auth: ResolvedAuth,
max_retries: u32,
http_pool_max_idle_per_host: usize,
timeouts: KalamLinkTimeouts,
connection_options: ConnectionOptions,
event_handlers: EventHandlers,
custom_auth_refresher: Option<AuthRefreshCallback>,
}
#[cfg(feature = "healthcheck")]
const HEALTH_CHECK_TTL: Duration = Duration::from_secs(10);
#[cfg(feature = "healthcheck")]
#[derive(Debug, Default)]
struct HealthCheckCache {
last_check: Option<Instant>,
last_response: Option<HealthCheckResponse>,
}