use crate::middleware::{MiddlewareContext, MiddlewareVerdict};
use async_trait::async_trait;
use serde::{Deserialize, Serialize};
use std::fmt::Debug;
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct OutputScanResult {
pub hits: Vec<String>,
pub xml_tag_hits: u32,
pub tool_name_hits: u32,
pub instruction_hits: u32,
pub wrong_acronym_hits: u32,
pub suspicion_score: f64,
pub response_length_chars: u32,
}
impl OutputScanResult {
pub fn hit_count(&self) -> u32 {
self.xml_tag_hits + self.tool_name_hits + self.instruction_hits + self.wrong_acronym_hits
}
}
#[async_trait]
pub trait OutputLeakDetector: Send + Sync + Debug {
fn scan(&self, text: &str) -> OutputScanResult;
async fn evaluate(&self, ctx: &MiddlewareContext) -> MiddlewareVerdict;
}