1use std::fmt::Display;
2
3#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
6pub enum FpFinger {
7 Unknown = libfprint_sys::FpFinger_FP_FINGER_UNKNOWN as isize,
8 LeftThumb = libfprint_sys::FpFinger_FP_FINGER_LEFT_THUMB as isize,
9 LeftIndex = libfprint_sys::FpFinger_FP_FINGER_LEFT_INDEX as isize,
10 LeftMiddle = libfprint_sys::FpFinger_FP_FINGER_LEFT_MIDDLE as isize,
11 LeftRing = libfprint_sys::FpFinger_FP_FINGER_LEFT_RING as isize,
12 LeftLittle = libfprint_sys::FpFinger_FP_FINGER_LEFT_LITTLE as isize,
13 RightThumb = libfprint_sys::FpFinger_FP_FINGER_RIGHT_THUMB as isize,
14 RightIndex = libfprint_sys::FpFinger_FP_FINGER_RIGHT_INDEX as isize,
15 RightMiddle = libfprint_sys::FpFinger_FP_FINGER_RIGHT_MIDDLE as isize,
16 RightRing = libfprint_sys::FpFinger_FP_FINGER_RIGHT_RING as isize,
17 RightLittle = libfprint_sys::FpFinger_FP_FINGER_RIGHT_LITTLE as isize,
18}
19
20impl Display for FpFinger {
21 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
22 match self {
23 FpFinger::Unknown => write!(f, "Unknown"),
24 FpFinger::LeftThumb => write!(f, "Left Thumb"),
25 FpFinger::LeftIndex => write!(f, "Left Index"),
26 FpFinger::LeftMiddle => write!(f, "Left Middle"),
27 FpFinger::LeftRing => write!(f, "Left Ring"),
28 FpFinger::LeftLittle => write!(f, "Left Little"),
29 FpFinger::RightThumb => write!(f, "Right Thumb"),
30 FpFinger::RightIndex => write!(f, "Right Index"),
31 FpFinger::RightMiddle => write!(f, "Right Middle"),
32 FpFinger::RightRing => write!(f, "Right Ring"),
33 FpFinger::RightLittle => write!(f, "Right Little"),
34 }
35 }
36}
37
38impl From<FpFinger> for i32 {
39 fn from(finger: FpFinger) -> Self {
40 finger as i32
41 }
42}
43
44impl From<u32> for FpFinger {
45 fn from(value: u32) -> Self {
46 match value {
47 libfprint_sys::FpFinger_FP_FINGER_UNKNOWN => FpFinger::Unknown,
48 libfprint_sys::FpFinger_FP_FINGER_LEFT_THUMB => FpFinger::LeftThumb,
49 libfprint_sys::FpFinger_FP_FINGER_LEFT_INDEX => FpFinger::LeftIndex,
50 libfprint_sys::FpFinger_FP_FINGER_LEFT_MIDDLE => FpFinger::LeftMiddle,
51 libfprint_sys::FpFinger_FP_FINGER_LEFT_RING => FpFinger::LeftRing,
52 libfprint_sys::FpFinger_FP_FINGER_LEFT_LITTLE => FpFinger::LeftLittle,
53 libfprint_sys::FpFinger_FP_FINGER_RIGHT_THUMB => FpFinger::RightThumb,
54 libfprint_sys::FpFinger_FP_FINGER_RIGHT_INDEX => FpFinger::RightIndex,
55 libfprint_sys::FpFinger_FP_FINGER_RIGHT_MIDDLE => FpFinger::RightMiddle,
56 libfprint_sys::FpFinger_FP_FINGER_RIGHT_RING => FpFinger::RightRing,
57 libfprint_sys::FpFinger_FP_FINGER_RIGHT_LITTLE => FpFinger::RightLittle,
58 _ => panic!("Invalid finger value"),
59 }
60 }
61}
62
63impl TryFrom<i32> for FpFinger {
64 type Error = ();
65
66 fn try_from(value: i32) -> Result<Self, Self::Error> {
67 if value < 0 {
68 return Err(());
69 }
70 let value = value as u32;
71 match value {
72 libfprint_sys::FpFinger_FP_FINGER_UNKNOWN => Ok(FpFinger::Unknown),
73 libfprint_sys::FpFinger_FP_FINGER_LEFT_THUMB => Ok(FpFinger::LeftThumb),
74 libfprint_sys::FpFinger_FP_FINGER_LEFT_INDEX => Ok(FpFinger::LeftIndex),
75 libfprint_sys::FpFinger_FP_FINGER_LEFT_MIDDLE => Ok(FpFinger::LeftMiddle),
76 libfprint_sys::FpFinger_FP_FINGER_LEFT_RING => Ok(FpFinger::LeftRing),
77 libfprint_sys::FpFinger_FP_FINGER_LEFT_LITTLE => Ok(FpFinger::LeftLittle),
78 libfprint_sys::FpFinger_FP_FINGER_RIGHT_THUMB => Ok(FpFinger::RightThumb),
79 libfprint_sys::FpFinger_FP_FINGER_RIGHT_INDEX => Ok(FpFinger::RightIndex),
80 libfprint_sys::FpFinger_FP_FINGER_RIGHT_MIDDLE => Ok(FpFinger::RightMiddle),
81 libfprint_sys::FpFinger_FP_FINGER_RIGHT_RING => Ok(FpFinger::RightRing),
82 libfprint_sys::FpFinger_FP_FINGER_RIGHT_LITTLE => Ok(FpFinger::RightLittle),
83 _ => Err(()),
84 }
85 }
86}