Skip to main content

apimock_routing/rule_set/
prefix.rs

1use console::style;
2use serde::Deserialize;
3
4use std::path::Path;
5
6#[derive(Clone, Default, Deserialize, Debug)]
7pub struct Prefix {
8    #[serde(rename = "url_path")]
9    pub url_path_prefix: Option<String>,
10    #[serde(rename = "respond_dir")]
11    pub respond_dir_prefix: Option<String>,
12}
13
14impl Prefix {
15    /// validate
16    pub fn validate(&self, rule_set_idx: usize) -> bool {
17        if let Some(respond_dir_prefix) = self.respond_dir_prefix.as_ref() {
18            let exists = Path::new(respond_dir_prefix.as_str()).exists();
19            if !exists {
20                log::error!(
21                    "{} of prefix (rule set #{}):\n`{}`",
22                    style("directory not found").red(),
23                    rule_set_idx,
24                    self.respond_dir_prefix.clone().unwrap().as_str()
25                );
26            }
27            exists
28        } else {
29            true
30        }
31    }
32}
33
34impl std::fmt::Display for Prefix {
35    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
36        let has_written = self.url_path_prefix.is_some() || self.respond_dir_prefix.is_some();
37
38        if let Some(url_path_prefix) = self.url_path_prefix.as_ref() {
39            let _ = writeln!(f, "[url_path_prefix] {}", style(url_path_prefix).magenta());
40        }
41
42        if self.respond_dir_prefix.is_some() {
43            let _ = writeln!(
44                f,
45                "[respond_dir_prefix] {}",
46                style(self.respond_dir_prefix.clone().unwrap_or_default().as_str()).magenta()
47            );
48        }
49
50        if has_written {
51            let _ = writeln!(f);
52        }
53
54        Ok(())
55    }
56}