domrs/svg/
numbers.rs

1use std::fmt;
2use std::fmt::Display;
3
4/// A structure representing the SVG number.
5#[derive(Debug, Copy, Clone)]
6pub struct SvgNumber(
7  /// Number's value.
8  f64,
9  /// Number's precision.
10  usize,
11);
12
13impl Display for SvgNumber {
14  /// Implements [Display] for [SvgNumber].
15  fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
16    write!(f, "{0:.1$}", self.0, self.1)
17  }
18}
19
20impl SvgNumber {
21  /// Creates a new SVG number based on provided value and precision.
22  ///
23  /// # Example
24  ///
25  /// ```
26  /// use domrs::SvgNumber;
27  ///
28  /// assert_eq!("1", SvgNumber::new(1.1, 0).to_string());
29  /// assert_eq!("1.17", SvgNumber::new(1.168, 2).to_string());
30  /// ```
31  pub fn new(value: f64, precision: usize) -> Self {
32    Self(value, precision)
33  }
34}
35
36impl From<u8> for SvgNumber {
37  /// Creates [SvgNumber] from [u8].
38  fn from(value: u8) -> Self {
39    Self(value as f64, 0)
40  }
41}
42
43impl From<i8> for SvgNumber {
44  /// Creates [SvgNumber] from [i8].
45  fn from(value: i8) -> Self {
46    Self(value as f64, 0)
47  }
48}
49
50impl From<u16> for SvgNumber {
51  /// Creates [SvgNumber] from [u16].
52  fn from(value: u16) -> Self {
53    Self(value as f64, 0)
54  }
55}
56
57impl From<i16> for SvgNumber {
58  /// Creates [SvgNumber] from [i16].
59  fn from(value: i16) -> Self {
60    Self(value as f64, 0)
61  }
62}
63
64impl From<u32> for SvgNumber {
65  /// Creates [SvgNumber] from [u32].
66  fn from(value: u32) -> Self {
67    Self(value as f64, 0)
68  }
69}
70
71impl From<i32> for SvgNumber {
72  /// Creates [SvgNumber] from [i32].
73  fn from(value: i32) -> Self {
74    Self(value as f64, 0)
75  }
76}
77
78impl From<u64> for SvgNumber {
79  /// Creates [SvgNumber] from [u64].
80  fn from(value: u64) -> Self {
81    Self(value as f64, 0)
82  }
83}
84
85impl From<i64> for SvgNumber {
86  /// Creates [SvgNumber] from [i64].
87  fn from(value: i64) -> Self {
88    Self(value as f64, 0)
89  }
90}
91
92impl From<f32> for SvgNumber {
93  /// Creates [SvgNumber] from [f32].
94  fn from(value: f32) -> Self {
95    Self(value as f64, 0)
96  }
97}
98
99impl From<f64> for SvgNumber {
100  /// Creates [SvgNumber] from [f64].
101  fn from(value: f64) -> Self {
102    Self(value, 0)
103  }
104}