llm_kernel/dlp/
classifier.rs1use crate::error::Result;
8use crate::provider::policy::Sensitivity;
9
10pub trait ContentClassifier: Send + Sync {
15 fn classify(&self, content: &str) -> Result<Option<Sensitivity>>;
19}
20
21#[cfg(test)]
22mod tests {
23 use super::*;
24
25 struct Fixed(Option<Sensitivity>);
26
27 impl ContentClassifier for Fixed {
28 fn classify(&self, _content: &str) -> Result<Option<Sensitivity>> {
29 Ok(self.0)
30 }
31 }
32
33 #[test]
34 fn classifier_returns_verdict_or_none() {
35 let upgrader = Fixed(Some(Sensitivity::Confidential));
36 assert_eq!(
37 upgrader.classify("ambiguous merger notes").unwrap(),
38 Some(Sensitivity::Confidential)
39 );
40
41 let defer = Fixed(None);
42 assert_eq!(defer.classify("anything").unwrap(), None);
43 }
44
45 #[test]
46 fn classifier_is_send_sync() {
47 fn assert_send_sync<T: Send + Sync>() {}
48 assert_send_sync::<Fixed>();
49 }
50}