ordinary_config/app/assets/
mod.rs1use crate::{CompressionAlgorithm, CompressionAlgorithms, HttpCache, HttpCsp};
6use arrayvec::ArrayVec;
7use serde::{Deserialize, Serialize};
8
9#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
10#[cfg_attr(feature = "docs", derive(schemars::JsonSchema))]
11#[derive(Deserialize, Serialize, Debug, Clone, Default)]
12pub struct AssetsConfig {
13 #[serde(skip_serializing_if = "Option::is_none")]
15 #[serde(default)]
16 pub dir_path: Option<String>,
17
18 #[serde(default = "AssetsConfig::default_base_route")]
21 pub base_route: String,
22
23 #[serde(skip_serializing_if = "Option::is_none")]
36 #[serde(default)]
37 pub append_index_html: Option<bool>,
38
39 #[serde(skip_serializing_if = "Option::is_none")]
45 #[serde(default)]
46 pub skip_base_route_index_html: Option<bool>,
47
48 #[serde(skip_serializing_if = "Option::is_none")]
58 #[serde(default)]
59 pub append_html_ext: Option<bool>,
60
61 #[serde(skip_serializing_if = "Option::is_none")]
66 #[serde(default)]
67 pub preserve_exif: Option<bool>,
68
69 #[serde(skip_serializing_if = "Option::is_none")]
71 #[serde(default)]
72 pub html_csp: Option<HttpCsp>,
73
74 #[serde(skip_serializing_if = "Option::is_none")]
79 #[serde(default)]
80 pub http: Option<HttpCache>,
81
82 #[serde(skip_serializing_if = "Option::is_none")]
86 #[serde(default)]
87 pub precompression: Option<CompressionAlgorithms>,
88
89 #[serde(skip)]
90 #[serde(default)]
91 pub internal_precompression: Option<ArrayVec<CompressionAlgorithm, 5>>,
92
93 #[serde(skip_serializing_if = "Option::is_none")]
96 #[serde(default)]
97 pub minify_css: Option<bool>,
98
99 #[serde(skip_serializing_if = "Option::is_none")]
102 #[serde(default)]
103 pub minify_js: Option<bool>,
104
105 #[serde(skip_serializing_if = "Option::is_none")]
108 #[serde(default)]
109 pub minify_html: Option<bool>,
110
111 #[serde(skip)]
112 #[serde(default)]
113 pub internal_cache_control_header_value: Option<String>,
114
115 #[serde(skip_serializing_if = "Option::is_none")]
117 #[serde(default)]
118 pub middlewares: Option<Vec<String>>,
119}
120
121impl AssetsConfig {
122 fn default_base_route() -> String {
123 "/assets".to_string()
124 }
125}
126
127impl AssetsConfig {
128 pub fn init(&mut self, default_cache_control_header_value: &str) -> anyhow::Result<()> {
129 if let Some(http_cache) = &self.http
130 && let Some(http_cache_control) = &http_cache.cache_control
131 {
132 let mut header = String::new();
133 http_cache_control.header_value(&mut header, default_cache_control_header_value)?;
134
135 self.internal_cache_control_header_value = Some(header);
136 }
137
138 Ok(())
139 }
140}