libfprint_rs/
finger.rs

1use std::fmt::Display;
2
3/// Enum representing a finger. This can be used to specify which finger was used to enroll a new print and can be added as part of the
4/// print metadata.
5#[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}