1use std::cmp::Ordering;
2use std::fmt::{Debug, Display};
3
4#[derive(Debug, Clone, Copy)]
7pub struct FPA(pub f32);
8
9impl<T> From<T> for FPA
10where
11 T: Into<f32>,
12{
13 fn from(n: T) -> Self {
14 FPA(n.into())
15 }
16}
17
18impl PartialEq<Self> for FPA {
19 fn eq(&self, other: &Self) -> bool {
20 float_cmp::approx_eq!(f32, self.0, other.0)
21 }
22}
23
24impl PartialOrd<Self> for FPA {
25 fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
26 match self.eq(other) {
27 true => Some(Ordering::Equal),
28 false => self.0.partial_cmp(&other.0),
29 }
30 }
31}
32
33impl Display for FPA {
34 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
35 std::fmt::Display::fmt(&self.0, f)
36 }
37}