use schemars::JsonSchema;
use serde::Deserialize;
use serde::Serialize;
#[derive(Debug, Clone, Deserialize, Serialize, JsonSchema)]
#[serde(deny_unknown_fields, default)]
pub struct PersistedQueries {
pub enabled: bool,
pub log_unknown: bool,
pub safelist: PersistedQueriesSafelist,
pub experimental_prewarm_query_plan_cache: PersistedQueriesPrewarmQueryPlanCache,
#[serde(alias = "experimental_local_manifests")]
pub local_manifests: Option<Vec<String>>,
}
#[cfg(test)]
#[buildstructor::buildstructor]
impl PersistedQueries {
#[builder]
pub(crate) fn new(
enabled: Option<bool>,
log_unknown: Option<bool>,
safelist: Option<PersistedQueriesSafelist>,
local_manifests: Option<Vec<String>>,
experimental_prewarm_query_plan_cache: Option<PersistedQueriesPrewarmQueryPlanCache>,
) -> Self {
Self {
enabled: enabled.unwrap_or_else(default_pq),
safelist: safelist.unwrap_or_default(),
log_unknown: log_unknown.unwrap_or_else(default_log_unknown),
local_manifests,
experimental_prewarm_query_plan_cache: experimental_prewarm_query_plan_cache
.unwrap_or_default(),
}
}
}
#[derive(Debug, Clone, Deserialize, Serialize, JsonSchema)]
#[serde(deny_unknown_fields, default)]
pub struct PersistedQueriesSafelist {
pub enabled: bool,
pub require_id: bool,
}
#[cfg(test)]
#[buildstructor::buildstructor]
impl PersistedQueriesSafelist {
#[builder]
pub(crate) fn new(enabled: Option<bool>, require_id: Option<bool>) -> Self {
Self {
enabled: enabled.unwrap_or_else(default_safelist),
require_id: require_id.unwrap_or_else(default_require_id),
}
}
}
#[derive(Debug, Clone, Deserialize, Serialize, JsonSchema)]
#[serde(deny_unknown_fields, default)]
pub struct PersistedQueriesPrewarmQueryPlanCache {
pub on_startup: bool,
pub on_reload: bool,
}
impl Default for PersistedQueries {
fn default() -> Self {
Self {
enabled: default_pq(),
safelist: PersistedQueriesSafelist::default(),
log_unknown: default_log_unknown(),
local_manifests: None,
experimental_prewarm_query_plan_cache: PersistedQueriesPrewarmQueryPlanCache::default(),
}
}
}
impl Default for PersistedQueriesSafelist {
fn default() -> Self {
Self {
enabled: default_safelist(),
require_id: default_require_id(),
}
}
}
impl Default for PersistedQueriesPrewarmQueryPlanCache {
fn default() -> Self {
Self {
on_startup: false,
on_reload: true,
}
}
}
const fn default_pq() -> bool {
false
}
const fn default_safelist() -> bool {
false
}
const fn default_require_id() -> bool {
false
}
const fn default_log_unknown() -> bool {
false
}