fraiseql_cli/config/toml_schema/
federation.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Deserialize, Serialize)]
7#[serde(deny_unknown_fields)]
8pub struct PerDatabaseCircuitBreakerOverride {
9 pub database: String,
11 pub failure_threshold: Option<u32>,
13 pub recovery_timeout_secs: Option<u64>,
15 pub success_threshold: Option<u32>,
17}
18
19#[derive(Debug, Clone, Deserialize, Serialize)]
21#[serde(default, deny_unknown_fields)]
22pub struct FederationCircuitBreakerConfig {
23 pub enabled: bool,
25 pub failure_threshold: u32,
27 pub recovery_timeout_secs: u64,
29 pub success_threshold: u32,
31 pub per_database: Vec<PerDatabaseCircuitBreakerOverride>,
33}
34
35impl Default for FederationCircuitBreakerConfig {
36 fn default() -> Self {
37 Self {
38 enabled: true,
39 failure_threshold: 5,
40 recovery_timeout_secs: 30,
41 success_threshold: 2,
42 per_database: vec![],
43 }
44 }
45}
46
47#[derive(Debug, Clone, Deserialize, Serialize)]
49#[serde(default, deny_unknown_fields)]
50pub struct FederationConfig {
51 #[serde(default)]
53 pub enabled: bool,
54 pub apollo_version: Option<u32>,
56 pub entities: Vec<FederationEntity>,
58 pub circuit_breaker: Option<FederationCircuitBreakerConfig>,
60}
61
62impl Default for FederationConfig {
63 fn default() -> Self {
64 Self {
65 enabled: false,
66 apollo_version: Some(2),
67 entities: vec![],
68 circuit_breaker: None,
69 }
70 }
71}
72
73#[derive(Debug, Clone, Deserialize, Serialize)]
75#[serde(deny_unknown_fields)]
76pub struct FederationEntity {
77 pub name: String,
79 pub key_fields: Vec<String>,
81}