cock_lib/cock_parts/
circumcision.rs

1use crate::{FromString, GetVariants};
2
3/// [Circumcision] is an enum that represents the circumcision status of a cock.
4#[derive(Debug, PartialEq, Clone, serde::Deserialize)]
5pub enum Circumcision {
6    Circumcised,
7    Uncircumcised,
8}
9
10/// The [GetVariants] trait implementation for [Circumcision] returns a vector of the possible variants of [Circumcision].
11impl GetVariants for Circumcision {
12    fn get_variants() -> Vec<String> {
13        vec![String::from("Circumcised"), String::from("Uncircumcised")]
14    }
15}
16
17/// The [FromString] traits implementation for [Circumcision] returns a [Circumcision] variant.
18impl FromString for Circumcision {
19    fn from_string(circumcision: &str) -> Circumcision {
20        match circumcision {
21            "Circumcised" => Circumcision::Circumcised,
22            "Uncircumcised" => Circumcision::Uncircumcised,
23            _ => panic!("Invalid circumcision"),
24        }
25    }
26}
27
28/// The [std::fmt::Display] traits implementation for [Circumcision] returns a [std::fmt::Result].
29impl std::fmt::Display for Circumcision {
30    /// Returns a string representation of the [Circumcision] variant.
31    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
32        match self {
33            Circumcision::Circumcised => write!(f, "Circumcised"),
34            Circumcision::Uncircumcised => write!(f, "Uncircumcised"),
35        }
36    }
37}
38
39#[cfg(test)]
40mod tests {
41    use super::*;
42
43    #[test]
44    fn test_circumcision_score() {
45        let circumsized = Circumcision::Circumcised;
46        let uncircumsized = Circumcision::Uncircumcised;
47
48        assert_eq!(circumsized, Circumcision::Circumcised);
49        assert_eq!(uncircumsized, Circumcision::Uncircumcised);
50    }
51}