Skip to main content

sword_core/layers/
builtin.rs

1use crate::{Config, ConfigItem, ConfigRegistrar, State, inventory_submit};
2use serde::{Deserialize, Serialize};
3use sword_layers::prelude::{
4    BodyLimitConfig, CompressionConfig, CorsConfig, DisplayConfig,
5    RequestTimeoutConfig, ServeDirConfig,
6};
7
8#[derive(Debug, Clone, Deserialize, Serialize, Default)]
9#[serde(default)]
10pub struct MiddlewaresConfig {
11    #[serde(rename = "body-limit")]
12    pub body_limit: BodyLimitConfig,
13
14    #[serde(rename = "request-timeout")]
15    pub request_timeout: RequestTimeoutConfig,
16
17    pub cors: CorsConfig,
18    pub compression: CompressionConfig,
19}
20
21impl DisplayConfig for MiddlewaresConfig {
22    fn display(&self) {
23        self.body_limit.display();
24        self.request_timeout.display();
25        self.compression.display();
26        self.cors.display();
27    }
28}
29
30impl ConfigItem for MiddlewaresConfig {
31    fn toml_key() -> &'static str {
32        "middlewares"
33    }
34
35    fn register(state: &State, config: &Config) {
36        state.insert(config.get_or_default::<Self>());
37    }
38}
39
40impl ConfigItem for ServeDirConfig {
41    fn toml_key() -> &'static str {
42        "serve-dir"
43    }
44
45    fn register(state: &State, config: &Config) {
46        state.insert(config.get_or_default::<Self>());
47    }
48}
49
50inventory_submit! {[
51    ConfigRegistrar::new(|state, config| {
52        MiddlewaresConfig::register(state, config)
53    }),
54    ConfigRegistrar::new(|state, config| {
55        ServeDirConfig::register(state, config)
56    }),
57]}