use std::borrow::Cow;
use parlov_core::ProbeDefinition;
use shell_escape::unix::escape;
#[must_use]
pub fn build_curl(probe: &ProbeDefinition) -> String {
let method = probe.method.as_str().to_ascii_uppercase();
let url = quote(&probe.url);
let mut out = format!("curl -X {method} {url}");
for (name, value) in &probe.headers {
let value_str = value.to_str().unwrap_or("");
let header_line = format!("{}: {}", name.as_str(), value_str);
out.push_str(" \\\n -H ");
out.push_str("e(&header_line));
}
if let Some(body) = &probe.body {
let body_str = std::str::from_utf8(body).unwrap_or("");
out.push_str(" \\\n --data ");
out.push_str("e(body_str));
}
out
}
fn quote(input: &str) -> String {
escape(Cow::Borrowed(input)).into_owned()
}
#[cfg(test)]
#[path = "repro_tests.rs"]
mod tests;