1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Default, Deserialize, Serialize)]
4#[serde(default, deny_unknown_fields)]
5pub struct HyphaConfig {
6 pub defaults: Defaults,
7 pub cache: CacheConfig,
8}
9
10#[derive(Debug, Default, Deserialize, Serialize)]
11#[serde(default, deny_unknown_fields)]
12pub struct Defaults {
13 pub synapse_domain: Option<String>,
15 pub domain: Option<String>,
17 pub taste: TasteDefaults,
21}
22
23#[derive(Debug, Default, Deserialize, Serialize)]
24#[serde(default, deny_unknown_fields)]
25pub struct TasteDefaults {
26 pub synapse_domain: Option<String>,
28 pub domain: Option<String>,
30}
31
32#[derive(Debug, Clone, Copy, Default, Deserialize, Serialize, PartialEq, Eq)]
33#[serde(rename_all = "snake_case")]
34pub enum KeyTrustRefreshMode {
35 #[default]
37 Expired,
38 Always,
40 Offline,
42}
43
44#[derive(Debug, Clone, Copy, Default, Deserialize, Serialize, PartialEq, Eq)]
45#[serde(rename_all = "snake_case")]
46pub enum SynapseWitnessMode {
47 #[default]
49 Allow,
50 RequireDomain,
52}
53
54#[derive(Debug, Deserialize, Serialize)]
55#[serde(default, deny_unknown_fields)]
56pub struct CacheConfig {
57 #[serde(skip_serializing_if = "Option::is_none")]
59 pub path: Option<String>,
60 pub cmn_ttl_s: u64,
62 pub key_trust_ttl_s: u64,
64 pub key_trust_refresh_mode: KeyTrustRefreshMode,
66 pub key_trust_synapse_witness_mode: SynapseWitnessMode,
68 pub spore_max_download_bytes: u64,
70 pub spore_max_extract_bytes: u64,
72 pub spore_max_extract_files: u64,
74 pub spore_max_extract_file_bytes: u64,
76 pub spore_reject_path_components: Vec<String>,
78 pub clock_skew_tolerance_s: u64,
82 pub require_domain_first_key: bool,
86}
87
88impl Default for CacheConfig {
89 fn default() -> Self {
90 Self {
91 path: None,
92 cmn_ttl_s: 300,
93 key_trust_ttl_s: 604800,
94 key_trust_refresh_mode: KeyTrustRefreshMode::Expired,
95 key_trust_synapse_witness_mode: SynapseWitnessMode::Allow,
96 spore_max_download_bytes: 1024 * 1024 * 1024,
97 spore_max_extract_bytes: 512 * 1024 * 1024,
98 spore_max_extract_files: 100_000,
99 spore_max_extract_file_bytes: 256 * 1024 * 1024,
100 spore_reject_path_components: vec![".git".to_string(), ".cmn".to_string()],
101 clock_skew_tolerance_s: 300,
102 require_domain_first_key: true,
103 }
104 }
105}