graphify_core/
confidence.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
7#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
8#[derive(Default)]
9pub enum Confidence {
10 #[default]
11 Extracted,
12 Inferred,
13 Ambiguous,
14}
15
16impl Confidence {
17 pub fn default_score(&self) -> f64 {
19 match self {
20 Confidence::Extracted => 1.0,
21 Confidence::Inferred => 0.7,
22 Confidence::Ambiguous => 0.4,
23 }
24 }
25}
26
27impl std::fmt::Display for Confidence {
28 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
29 match self {
30 Confidence::Extracted => write!(f, "Extracted"),
31 Confidence::Inferred => write!(f, "Inferred"),
32 Confidence::Ambiguous => write!(f, "Ambiguous"),
33 }
34 }
35}
36
37#[cfg(test)]
38mod tests {
39 use super::*;
40
41 #[test]
42 fn serialize_to_screaming_snake() {
43 assert_eq!(
44 serde_json::to_string(&Confidence::Extracted).unwrap(),
45 r#""EXTRACTED""#
46 );
47 assert_eq!(
48 serde_json::to_string(&Confidence::Inferred).unwrap(),
49 r#""INFERRED""#
50 );
51 assert_eq!(
52 serde_json::to_string(&Confidence::Ambiguous).unwrap(),
53 r#""AMBIGUOUS""#
54 );
55 }
56
57 #[test]
58 fn deserialize_from_screaming_snake() {
59 let c: Confidence = serde_json::from_str(r#""INFERRED""#).unwrap();
60 assert_eq!(c, Confidence::Inferred);
61 }
62
63 #[test]
64 fn default_scores() {
65 assert!((Confidence::Extracted.default_score() - 1.0).abs() < f64::EPSILON);
66 assert!((Confidence::Inferred.default_score() - 0.7).abs() < f64::EPSILON);
67 assert!((Confidence::Ambiguous.default_score() - 0.4).abs() < f64::EPSILON);
68 }
69
70 #[test]
71 fn default_is_extracted() {
72 assert_eq!(Confidence::default(), Confidence::Extracted);
73 }
74}