fhttp-core 2.1.0

core library for the fhttp tool
Documentation
use crate::preprocessing::evaluation::Evaluation;
use crate::request_sources::request_dependency_eval::RequestDependencyEval;
use anyhow::Result;
use regex::Captures;

pub trait Dependant {
    fn dependencies(&self) -> Result<Vec<RequestDependencyEval>>;

    fn unescaped_dependencies(&self) -> Result<Vec<RequestDependencyEval>> {
        Ok(self
            .dependencies()?
            .into_iter()
            .filter(|dep| !dep.is_escaped())
            .collect())
    }
}

pub fn request_dependencies(text: &str) -> Result<Vec<RequestDependencyEval>> {
    let re_request = regex!(r#"(?m)(\\*)(\$\{request\("([^"]+)"\)})"#);

    let deps = re_request
        .captures_iter(text)
        .collect::<Vec<_>>()
        .into_iter()
        .rev()
        .map(|capture: Captures| {
            let backslashes = capture.get(1).unwrap().range();
            let group = capture.get(2).unwrap();
            let path = capture.get(3).unwrap().as_str();

            RequestDependencyEval::new(path, group.range(), backslashes)
        })
        .collect::<Vec<_>>();

    Ok(deps)
}