#![deny(unsafe_code)]
#[macro_export]
macro_rules! include_template {
($path:expr) => {
include_str!(concat!("../prompts/templates/", $path))
};
}
#[macro_export]
macro_rules! assert_template_exists {
($path:expr) => {
let content = include_str!(concat!("../prompts/templates/", $path));
assert!(!content.is_empty(), "Template file {} is empty", $path);
};
}
#[macro_export]
macro_rules! assert_template_has_variable {
($path:expr, $var:expr) => {
let content = include_str!(concat!("../prompts/templates/", $path));
let var_pattern = concat!("{{", $var, "}}");
assert!(
content.contains(var_pattern) || content.contains(concat!("{{ ", $var, " }}")),
"Template {} does not contain variable {{{}}}",
$path,
$var
);
};
}
#[cfg(test)]
mod tests {
#[test]
fn test_include_template_macro() {
let _ = include_template!("conflict_resolution.txt");
}
#[test]
fn test_assert_template_exists() {
assert_template_exists!("conflict_resolution.txt");
}
#[test]
fn test_assert_template_has_variable() {
assert_template_has_variable!("conflict_resolution.txt", "CONTEXT");
assert_template_has_variable!("conflict_resolution.txt", "CONFLICTS");
}
#[test]
fn test_inline_template_detection() {
let suspicious_patterns = [
r"You are a",
r"Please review",
r"Generate a",
"## Instructions",
"### Task",
"# PROMPT",
r#"{"role": "developer""#,
];
assert!(suspicious_patterns
.iter()
.all(|pattern| !pattern.is_empty()));
}
}