langdetect_rs/
language.rs1use std::fmt;
2
3#[derive(Debug, Clone, PartialEq)]
8pub struct Language {
9 pub lang: Option<String>,
11 pub prob: f64,
13}
14
15impl Language {
16 pub fn new(lang: Option<String>, prob: f64) -> Self {
31 Language { lang, prob }
32 }
33}
34
35impl fmt::Display for Language {
36 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
37 match &self.lang {
38 Some(lang) => write!(f, "{}:{:.1}", lang, self.prob),
39 None => write!(f, ""),
40 }
41 }
42}
43
44impl PartialOrd for Language {
45 fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
46 self.prob.partial_cmp(&other.prob)
47 }
48}
49
50#[cfg(test)]
51mod tests {
52 use super::*;
53
54 #[test]
55 fn test_language() {
56 let lang = Language::new(None, 0.0);
57 assert_eq!(lang.lang, None);
58 assert!((lang.prob - 0.0).abs() < 0.0001);
59 assert_eq!(lang.to_string(), "");
60
61 let lang2 = Language::new(Some("en".to_string()), 1.0);
62 assert_eq!(lang2.lang.as_deref(), Some("en"));
63 assert!((lang2.prob - 1.0).abs() < 0.0001);
64 assert_eq!(lang2.to_string(), "en:1.0");
65 }
66
67 #[test]
68 fn test_cmp() {
69 let lang1 = Language::new(Some("a".to_string()), 0.1);
70 let lang2 = Language::new(Some("b".to_string()), 0.5);
71
72 assert!(lang1 < lang2);
73 assert!(lang1 != lang2);
74 assert!(!(lang1 > lang1));
75 }
76}