apimock_routing/rule_set/
prefix.rs1use 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 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}