Coverage Report

Created: 2026-06-14 07:00

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/rust/registry/src/index.crates.io-1949cf8c6b5b557f/fixed_decimal-0.5.6/src/integer.rs
Line
Count
Source
1
// This file is part of ICU4X. For terms of use, please see the file
2
// called LICENSE at the top level of the ICU4X source tree
3
// (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
4
5
use core::convert::TryFrom;
6
use core::fmt;
7
8
use core::str::FromStr;
9
10
use crate::Error;
11
use crate::FixedDecimal;
12
13
/// A [`FixedInteger`] is a [`FixedDecimal`] with no fractional part.
14
///
15
///
16
/// # Examples
17
///
18
/// ```
19
/// # use std::str::FromStr;
20
/// use fixed_decimal::Error;
21
/// use fixed_decimal::FixedDecimal;
22
/// use fixed_decimal::FixedInteger;
23
///
24
/// assert_eq!(
25
///     FixedDecimal::from(FixedInteger::from(5)),
26
///     FixedDecimal::from(5)
27
/// );
28
/// assert_eq!(
29
///     FixedInteger::try_from(FixedDecimal::from(5)),
30
///     Ok(FixedInteger::from(5))
31
/// );
32
/// assert_eq!(
33
///     FixedInteger::try_from(FixedDecimal::from_str("05").unwrap()),
34
///     Ok(FixedInteger::from_str("05").unwrap())
35
/// );
36
/// assert_eq!(
37
///     FixedInteger::try_from(FixedDecimal::from_str("5.0").unwrap()),
38
///     Err(Error::Limit)
39
/// );
40
/// ```
41
#[derive(Debug, Clone, PartialEq, Default)]
42
pub struct FixedInteger(FixedDecimal);
43
44
impl From<FixedInteger> for FixedDecimal {
45
0
    fn from(value: FixedInteger) -> Self {
46
0
        value.0
47
0
    }
48
}
49
50
macro_rules! impl_fixed_integer_from_integer_type {
51
    ($type:ident) => {
52
        impl From<$type> for FixedInteger {
53
0
            fn from(value: $type) -> Self {
54
0
                FixedInteger(FixedDecimal::from(value))
55
0
            }
Unexecuted instantiation: <fixed_decimal::integer::FixedInteger as core::convert::From<isize>>::from
Unexecuted instantiation: <fixed_decimal::integer::FixedInteger as core::convert::From<i128>>::from
Unexecuted instantiation: <fixed_decimal::integer::FixedInteger as core::convert::From<i64>>::from
Unexecuted instantiation: <fixed_decimal::integer::FixedInteger as core::convert::From<i32>>::from
Unexecuted instantiation: <fixed_decimal::integer::FixedInteger as core::convert::From<i16>>::from
Unexecuted instantiation: <fixed_decimal::integer::FixedInteger as core::convert::From<i8>>::from
Unexecuted instantiation: <fixed_decimal::integer::FixedInteger as core::convert::From<usize>>::from
Unexecuted instantiation: <fixed_decimal::integer::FixedInteger as core::convert::From<u128>>::from
Unexecuted instantiation: <fixed_decimal::integer::FixedInteger as core::convert::From<u64>>::from
Unexecuted instantiation: <fixed_decimal::integer::FixedInteger as core::convert::From<u32>>::from
Unexecuted instantiation: <fixed_decimal::integer::FixedInteger as core::convert::From<u16>>::from
Unexecuted instantiation: <fixed_decimal::integer::FixedInteger as core::convert::From<u8>>::from
56
        }
57
    };
58
}
59
60
impl_fixed_integer_from_integer_type!(isize);
61
impl_fixed_integer_from_integer_type!(i128);
62
impl_fixed_integer_from_integer_type!(i64);
63
impl_fixed_integer_from_integer_type!(i32);
64
impl_fixed_integer_from_integer_type!(i16);
65
impl_fixed_integer_from_integer_type!(i8);
66
impl_fixed_integer_from_integer_type!(usize);
67
impl_fixed_integer_from_integer_type!(u128);
68
impl_fixed_integer_from_integer_type!(u64);
69
impl_fixed_integer_from_integer_type!(u32);
70
impl_fixed_integer_from_integer_type!(u16);
71
impl_fixed_integer_from_integer_type!(u8);
72
73
impl writeable::Writeable for FixedInteger {
74
0
    fn write_to<W: fmt::Write + ?Sized>(&self, sink: &mut W) -> fmt::Result {
75
0
        self.0.write_to(sink)
76
0
    }
77
}
78
79
impl TryFrom<FixedDecimal> for FixedInteger {
80
    type Error = Error;
81
0
    fn try_from(value: FixedDecimal) -> Result<Self, Error> {
82
0
        if value.magnitude_range().start() != &0 {
83
0
            Err(Error::Limit)
84
        } else {
85
0
            Ok(FixedInteger(value))
86
        }
87
0
    }
88
}
89
90
impl TryFrom<&[u8]> for FixedInteger {
91
    type Error = Error;
92
0
    fn try_from(value: &[u8]) -> Result<Self, Error> {
93
0
        FixedInteger::try_from(FixedDecimal::try_from(value)?)
94
0
    }
95
}
96
97
impl FromStr for FixedInteger {
98
    type Err = Error;
99
0
    fn from_str(value: &str) -> Result<Self, Self::Err> {
100
0
        FixedInteger::try_from(FixedDecimal::from_str(value)?)
101
0
    }
102
}