mod injection;
mod pii;
pub use injection::{detect_injection, INJECTION_PATTERNS};
pub use pii::{detect_pii, find_pii, redact_pii, PiiType, PII_PATTERNS};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GuardrailResult {
pub passed: bool,
pub value: String,
pub message: String,
pub guardrail_name: String,
}
impl GuardrailResult {
pub fn pass(value: impl Into<String>) -> Self {
Self {
passed: true,
value: value.into(),
message: String::new(),
guardrail_name: String::new(),
}
}
pub fn fail(value: impl Into<String>, message: impl Into<String>) -> Self {
Self {
passed: false,
value: value.into(),
message: message.into(),
guardrail_name: String::new(),
}
}
pub fn with_name(mut self, name: impl Into<String>) -> Self {
self.guardrail_name = name.into();
self
}
}
pub fn check_all(text: &str) -> GuardrailResult {
let pii_result = detect_pii(text);
if !pii_result.passed {
return pii_result;
}
let injection_result = detect_injection(text);
if !injection_result.passed {
return injection_result;
}
GuardrailResult::pass(text).with_name("all")
}