fhttp_core/preprocessing/
dependant.rs

1use 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}