use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Deserialize, Serialize, JsonSchema, Clone)]
#[serde(deny_unknown_fields)]
pub struct ErrorMaskingConfig {
#[serde(default = "default_feature_enabled")]
pub enabled: bool,
#[serde(default = "default_redacted_error_message")]
pub redacted_error_message: String,
#[serde(default)]
pub all: AllErrorMaskingConfig,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub subgraphs: Option<HashMap<String, SubgraphErrorMaskingConfig>>,
}
fn default_feature_enabled() -> bool {
true
}
fn default_redacted_error_message() -> String {
"Unexpected error".to_string()
}
impl Default for ErrorMaskingConfig {
fn default() -> Self {
Self {
redacted_error_message: default_redacted_error_message(),
all: AllErrorMaskingConfig::default(),
subgraphs: None,
enabled: default_feature_enabled(),
}
}
}
#[derive(Debug, Deserialize, Serialize, JsonSchema, Clone)]
#[serde(deny_unknown_fields)]
pub struct AllErrorMaskingConfig {
#[serde(default = "default_redact_error_message")]
pub enabled: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub extensions: Option<ExtensionsMaskingConfig>,
}
fn default_redact_error_message() -> bool {
true
}
impl Default for AllErrorMaskingConfig {
fn default() -> Self {
Self {
enabled: true,
extensions: None,
}
}
}
#[derive(Debug, Deserialize, Serialize, JsonSchema, Clone)]
#[serde(deny_unknown_fields)]
pub struct SubgraphErrorMaskingConfig {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub enabled: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub extensions: Option<ExtensionsMaskingConfig>,
}
#[derive(Debug, Deserialize, Serialize, JsonSchema, Clone)]
#[serde(deny_unknown_fields, tag = "mode")]
pub enum ExtensionsMaskingConfig {
#[serde(rename = "allow")]
AllowList { keys: Vec<String> },
#[serde(rename = "deny")]
DenyList { keys: Vec<String> },
}