fhttp_core/preprocessing/
dependant.rs1use crate::preprocessing::evaluation::Evaluation;
2use crate::request_sources::request_dependency_eval::RequestDependencyEval;
3use anyhow::Result;
4use regex::Captures;
5
6pub trait Dependant {
7 fn dependencies(&self) -> Result<Vec<RequestDependencyEval>>;
8
9 fn unescaped_dependencies(&self) -> Result<Vec<RequestDependencyEval>> {
10 Ok(self
11 .dependencies()?
12 .into_iter()
13 .filter(|dep| !dep.is_escaped())
14 .collect())
15 }
16}
17
18pub fn request_dependencies(text: &str) -> Result<Vec<RequestDependencyEval>> {
19 let re_request = regex!(r#"(?m)(\\*)(\$\{request\("([^"]+)"\)})"#);
20
21 let deps = re_request
22 .captures_iter(text)
23 .collect::<Vec<_>>()
24 .into_iter()
25 .rev()
26 .map(|capture: Captures| {
27 let backslashes = capture.get(1).unwrap().range();
28 let group = capture.get(2).unwrap();
29 let path = capture.get(3).unwrap().as_str();
30
31 RequestDependencyEval::new(path, group.range(), backslashes)
32 })
33 .collect::<Vec<_>>();
34
35 Ok(deps)
36}