|
1 | 1 | use {
|
2 | 2 | crate::TextSized,
|
3 | 3 | std::{
|
4 |
| - convert::{TryFrom, TryInto}, |
| 4 | + convert::TryFrom, |
5 | 5 | fmt, iter,
|
6 | 6 | num::TryFromIntError,
|
7 | 7 | ops::{Add, AddAssign, Sub, SubAssign},
|
@@ -70,70 +70,34 @@ impl TextSize {
|
70 | 70 | }
|
71 | 71 | }
|
72 | 72 |
|
73 |
| -macro_rules! conversions { |
74 |
| - (From<TextSize> for $gte:ident) => { |
75 |
| - impl From<TextSize> for $gte { |
76 |
| - fn from(value: TextSize) -> $gte { |
77 |
| - value.raw.into() |
78 |
| - } |
79 |
| - } |
80 |
| - }; |
81 |
| - (From<$lte:ident> for TextSize) => { |
82 |
| - impl From<$lte> for TextSize { |
83 |
| - fn from(value: $lte) -> TextSize { |
84 |
| - TextSize(value.into()) |
85 |
| - } |
86 |
| - } |
87 |
| - }; |
88 |
| - (TryFrom<TextSize> for $lt:ident) => { |
89 |
| - impl TryFrom<TextSize> for $lt { |
90 |
| - type Error = TryFromIntError; |
91 |
| - fn try_from(value: TextSize) -> Result<$lt, Self::Error> { |
92 |
| - value.raw.try_into() |
93 |
| - } |
94 |
| - } |
95 |
| - }; |
96 |
| - (TryFrom<$gt:ident> for TextSize) => { |
97 |
| - impl TryFrom<$gt> for TextSize { |
98 |
| - type Error = <$gt as TryInto<u32>>::Error; |
99 |
| - fn try_from(value: $gt) -> Result<TextSize, Self::Error> { |
100 |
| - value.try_into().map(TextSize) |
101 |
| - } |
102 |
| - } |
103 |
| - }; |
104 |
| - { |
105 |
| - lt u32 [$($lt:ident)*] |
106 |
| - eq u32 [$($eq:ident)*] |
107 |
| - gt u32 [$($gt:ident)*] |
108 |
| - varries [$($var:ident)*] |
109 |
| - } => { |
110 |
| - $( |
111 |
| - conversions!(From<$lt> for TextSize); |
112 |
| - conversions!(TryFrom<TextSize> for $lt); |
113 |
| - )* |
114 |
| - |
115 |
| - $( |
116 |
| - conversions!(From<$eq> for TextSize); |
117 |
| - conversions!(From<TextSize> for $eq); |
118 |
| - )* |
119 |
| - |
120 |
| - $( |
121 |
| - conversions!(TryFrom<$gt> for TextSize); |
122 |
| - conversions!(From<TextSize> for $gt); |
123 |
| - )* |
124 |
| - |
125 |
| - $( |
126 |
| - conversions!(TryFrom<$var> for TextSize); |
127 |
| - conversions!(TryFrom<TextSize> for $var); |
128 |
| - )* |
129 |
| - }; |
| 73 | +impl From<u32> for TextSize { |
| 74 | + fn from(raw: u32) -> Self { |
| 75 | + TextSize { raw } |
| 76 | + } |
| 77 | +} |
| 78 | + |
| 79 | +impl From<TextSize> for u32 { |
| 80 | + fn from(value: TextSize) -> Self { |
| 81 | + value.raw |
| 82 | + } |
130 | 83 | }
|
131 | 84 |
|
132 |
| -conversions! { |
133 |
| - lt u32 [u8 u16] |
134 |
| - eq u32 [u32] |
135 |
| - gt u32 [u64] |
136 |
| - varries [usize] |
| 85 | +impl TryFrom<usize> for TextSize { |
| 86 | + type Error = TryFromIntError; |
| 87 | + fn try_from(value: usize) -> Result<Self, TryFromIntError> { |
| 88 | + Ok(u32::try_from(value)?.into()) |
| 89 | + } |
| 90 | +} |
| 91 | + |
| 92 | +impl From<TextSize> for usize { |
| 93 | + fn from(value: TextSize) -> Self { |
| 94 | + assert_lossless_conversion(); |
| 95 | + return value.raw as usize; |
| 96 | + |
| 97 | + const fn assert_lossless_conversion() { |
| 98 | + [()][(std::mem::size_of::<usize>() < std::mem::size_of::<u32>()) as usize] |
| 99 | + } |
| 100 | + } |
137 | 101 | }
|
138 | 102 |
|
139 | 103 | macro_rules! arith {
|
|
0 commit comments