use serde_json::Value;
use crate::drivers::scylla::client::ScyllaConnectionInfo;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum AthenaEngine {
Postgres,
Scylla,
S3,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum AthenaClientLifecycle {
Active,
Frozen,
Inactive,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct AthenaCapabilities {
pub gateway_query: bool,
pub raw_sql: bool,
pub raw_cql: bool,
pub schema_read: bool,
pub migrations_read: bool,
pub provisioning: bool,
pub deferred_query: bool,
pub cdc: bool,
pub object_read: bool,
pub object_write: bool,
}
impl AthenaCapabilities {
pub fn for_engine(engine: AthenaEngine) -> Self {
match engine {
AthenaEngine::Postgres => Self {
gateway_query: true,
raw_sql: true,
raw_cql: false,
schema_read: true,
migrations_read: true,
provisioning: true,
deferred_query: true,
cdc: true,
object_read: false,
object_write: false,
},
AthenaEngine::Scylla => Self {
gateway_query: true,
raw_sql: false,
raw_cql: true,
schema_read: false,
migrations_read: false,
provisioning: false,
deferred_query: false,
cdc: false,
object_read: false,
object_write: false,
},
AthenaEngine::S3 => Self {
gateway_query: false,
raw_sql: false,
raw_cql: false,
schema_read: false,
migrations_read: false,
provisioning: false,
deferred_query: false,
cdc: false,
object_read: true,
object_write: true,
},
}
}
}
#[derive(Debug, Clone)]
pub struct AthenaPostgresConnection {
pub pg_uri: Option<String>,
pub pg_uri_env_var: Option<String>,
pub config_uri_template: Option<String>,
}
#[derive(Debug, Clone, Default)]
pub struct AthenaS3Connection;
#[derive(Debug, Clone)]
pub enum AthenaConnection {
Postgres(AthenaPostgresConnection),
Scylla(ScyllaConnectionInfo),
S3(AthenaS3Connection),
}
#[derive(Debug, Clone)]
pub struct AthenaClientDefinition {
pub client_name: String,
pub description: Option<String>,
pub source: String,
pub engine: AthenaEngine,
pub lifecycle: AthenaClientLifecycle,
pub capabilities: AthenaCapabilities,
pub connection: AthenaConnection,
pub metadata: Value,
}