✨ Add from_iso & to_iso
This commit is contained in:
parent
2ae63e33b5
commit
7c3ffb7ecf
53
src/lib.rs
53
src/lib.rs
@ -38,4 +38,57 @@ impl Teeth {
|
||||
}
|
||||
}
|
||||
|
||||
fn check_teeth_number(number: u8, permanent: bool) {
|
||||
if permanent && number > 8 {
|
||||
panic!("Permanent teeth {} should be in range [1; 8]", number)
|
||||
} else if !permanent && number > 5 {
|
||||
panic!("Primary teeth {} should be in range [1; 5]", number)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn from_iso(value: &str) -> Self {
|
||||
if value.len() != 2 {
|
||||
panic!("{} is not a valid ISO dental notation", value);
|
||||
}
|
||||
let mut char_iter = value.chars();
|
||||
let (quadrant, permanent) = match char_iter.next().unwrap() {
|
||||
'1' => (QuadrantKind::TopLeft, true),
|
||||
'2' => (QuadrantKind::TopRight, true),
|
||||
'3' => (QuadrantKind::BottomRight, true),
|
||||
'4' => (QuadrantKind::BottomLeft, true),
|
||||
'5' => (QuadrantKind::TopLeft, false),
|
||||
'6' => (QuadrantKind::TopRight, false),
|
||||
'7' => (QuadrantKind::BottomRight, false),
|
||||
'8' => (QuadrantKind::BottomLeft, false),
|
||||
x => panic!("Quadrant value {} not included in range [1; 8]", x),
|
||||
};
|
||||
|
||||
let teeth_string = char_iter.next().unwrap();
|
||||
let teeth_number_option = teeth_string.to_digit(10);
|
||||
|
||||
if teeth_number_option.is_none() {
|
||||
panic!("{} is not a number", teeth_string)
|
||||
}
|
||||
let number = teeth_number_option.unwrap() as u8;
|
||||
Teeth::check_teeth_number(number, permanent);
|
||||
Teeth {
|
||||
quadrant,
|
||||
permanent,
|
||||
number,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn to_iso(&self) -> String {
|
||||
let quadrant_number: u8 = match (&self.quadrant, self.permanent) {
|
||||
(QuadrantKind::TopLeft, true) => 1,
|
||||
(QuadrantKind::TopRight, true) => 2,
|
||||
(QuadrantKind::BottomLeft, true) => 4,
|
||||
(QuadrantKind::BottomRight, true) => 3,
|
||||
(QuadrantKind::TopLeft, false) => 5,
|
||||
(QuadrantKind::TopRight, false) => 6,
|
||||
(QuadrantKind::BottomLeft, false) => 8,
|
||||
(QuadrantKind::BottomRight, false) => 7,
|
||||
};
|
||||
quadrant_number.to_string() + &self.number.to_string()
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user