webserver_config/
nginx.rs1use crate::config::{Block, Config, ConfigItem};
2
3pub trait NginxConfig {
4 fn to_string_level(&self, level: usize) -> String;
5 fn to_nginx(&self) -> String;
6}
7
8impl NginxConfig for Block {
9
10 fn to_nginx(&self) -> String {
11 self.to_string_level(0)
12 }
13
14 fn to_string_level(&self, level: usize) -> String {
15 let padding = " ".repeat(4 * level);
16 let params = self.params.is_empty()
17 .then(String::new)
18 .unwrap_or_else(|| format!(" {}", self.params.join(" ")));
19
20 let header = format!("{}{}{} {{\n", padding, self.name, params);
21 let content = self.config.to_string_level(level + 1);
22 let footer = format!("{}}}\n", padding);
23 format!("{}{}{}", header, content, footer)
24 }
25
26}
27
28impl NginxConfig for Config {
29
30 fn to_nginx(&self) -> String {
31 self.to_string_level(0)
32 }
33
34 fn to_string_level(&self, level: usize) -> String {
35 let padding = " ".repeat(4 * level);
36 self.content.iter().map(|item| {
37 match item {
38 ConfigItem::Directive(d) => {
39 format!("{}{} {};\n", padding, d.name, d.values.join(" "))
40 },
41 ConfigItem::Block(b) => b.to_string_level(level)
42 }
43 }).collect()
44 }
45
46}