use api::pipelines::PipelineDefinition;
use deadpool_postgres::Pool;
use moka::future::Cache;
use reqwest::Client;
use serde_json::Value;
use sqlx::postgres::PgPool;
use std::collections::{HashMap, HashSet};
use std::sync::Arc;
use std::time::Instant;
use tokio::sync::OnceCell;
use crate::api::metrics::MetricsState;
#[cfg(feature = "deadpool_experimental")]
use crate::drivers::postgresql::deadpool_registry::DeadpoolPostgresRegistry;
use crate::drivers::postgresql::sqlx_driver::PostgresClientRegistry;
pub mod api;
pub mod client;
pub mod config;
pub mod daemon;
pub mod data;
pub mod drivers;
pub mod error;
pub mod parser;
pub mod provision_sql;
pub mod provisioning;
pub mod proxy_request;
pub mod bootstrap;
pub mod cli;
pub mod router;
pub mod wss;
#[cfg(feature = "cdc")]
pub mod cdc;
pub struct AppState {
pub cache: Arc<Cache<String, Value>>,
pub immortal_cache: Arc<Cache<String, Value>>,
pub client: Client,
pub process_start_time_seconds: i64,
pub process_started_at: Instant,
pub pg_registry: Arc<PostgresClientRegistry>,
pub jdbc_pool_cache: Arc<Cache<String, PgPool>>,
#[cfg(feature = "deadpool_experimental")]
pub deadpool_registry: Arc<DeadpoolPostgresRegistry>,
#[cfg(feature = "deadpool_experimental")]
pub jdbc_deadpool_cache: Arc<Cache<String, Arc<OnceCell<Pool>>>>,
pub gateway_force_camel_case_to_snake_case: bool,
pub gateway_auto_cast_uuid_filter_values_to_text: bool,
pub gateway_allow_schema_names_prefixed_as_table_name: bool,
pub pipeline_registry: Option<Arc<HashMap<String, PipelineDefinition>>>,
pub logging_client_name: Option<String>,
pub gateway_auth_client_name: Option<String>,
pub gateway_api_key_fail_mode: String,
pub gateway_jdbc_allow_private_hosts: bool,
pub gateway_jdbc_allowed_hosts: Vec<String>,
pub gateway_resilience_timeout_secs: u64,
pub gateway_resilience_read_max_retries: u32,
pub gateway_resilience_initial_backoff_ms: u64,
pub gateway_admission_store_backend: String,
pub gateway_admission_store_fail_mode: String,
pub prometheus_metrics_enabled: bool,
pub metrics_state: Arc<MetricsState>,
pub gateway_insert_execution_window_ms: u64,
pub gateway_insert_window_max_batch: usize,
pub gateway_insert_window_max_queued: usize,
pub gateway_insert_merge_deny_tables: HashSet<String>,
pub insert_window_coordinator: Arc<crate::api::gateway::insert::InsertWindowCoordinator>,
}
pub struct ImmortalCache {
pub cache: Arc<Cache<String, Value>>,
}
pub mod utils;
pub use client::AthenaClient;
pub use client::backend::BackendType;
pub use client::backend::QueryResult;
pub use client::builder::AthenaClientBuilder;
pub use client::{Condition, ConditionOperator, OrderDirection};
pub use client::{
Gateway, GatewayDeleteRequest, GatewayDriverRequest, GatewayFetchRequest, GatewayInsertRequest,
GatewayOperation, GatewayPath, GatewayQueryResult, GatewayRequest, GatewayRequestFactory,
GatewayRequestPayload, GatewayRoutes, GatewayRpcFilter, GatewayRpcFilterOperator,
GatewayRpcRequest, GatewaySqlRequest, GatewayUpdateRequest, RpcBuilder, build_gateway_endpoint,
request,
};
pub const GATEWAY_FETCH_PATH: &str = Gateway::FETCH_PATH;
pub const GATEWAY_INSERT_PATH: &str = Gateway::INSERT_PATH;
pub const GATEWAY_UPDATE_PATH: &str = Gateway::UPDATE_PATH;
pub const GATEWAY_DELETE_PATH: &str = Gateway::DELETE_PATH;
pub const GATEWAY_QUERY_PATH: &str = Gateway::QUERY_PATH;
pub const GATEWAY_SQL_PATH: &str = Gateway::SQL_PATH;
pub const GATEWAY_RPC_PATH: &str = Gateway::RPC_PATH;
pub const LEGACY_SQL_PATH: &str = Gateway::LEGACY_SQL_PATH;