summaryrefslogtreecommitdiff
path: root/src/geom/macros.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2020-10-10 22:19:36 +0200
committerLaurenz <laurmaedje@gmail.com>2020-10-10 22:19:36 +0200
commit92c01da36016e94ff20163806ddcbcf7e33d4031 (patch)
tree1a900b3c11edcc93e9153fada3ce92310db5768b /src/geom/macros.rs
parent42500d5ed85539c5ab04dd3544beaf802da29be9 (diff)
Switch back to custom geometry types, unified with layout primitives 🏞
Diffstat (limited to 'src/geom/macros.rs')
-rw-r--r--src/geom/macros.rs47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/geom/macros.rs b/src/geom/macros.rs
new file mode 100644
index 00000000..615eb31c
--- /dev/null
+++ b/src/geom/macros.rs
@@ -0,0 +1,47 @@
+/// Implement the `Sub` trait based on existing `Neg` and `Add` impls.
+macro_rules! sub_impl {
+ ($a:ident - $b:ident -> $c:ident) => {
+ impl Sub<$b> for $a {
+ type Output = $c;
+
+ fn sub(self, other: $b) -> $c {
+ self + -other
+ }
+ }
+ };
+}
+
+/// Implement an assign trait based on an existing non-assign trait.
+macro_rules! assign_impl {
+ ($a:ident += $b:ident) => {
+ impl AddAssign<$b> for $a {
+ fn add_assign(&mut self, other: $b) {
+ *self = *self + other;
+ }
+ }
+ };
+
+ ($a:ident -= $b:ident) => {
+ impl SubAssign<$b> for $a {
+ fn sub_assign(&mut self, other: $b) {
+ *self = *self - other;
+ }
+ }
+ };
+
+ ($a:ident *= $b:ident) => {
+ impl MulAssign<$b> for $a {
+ fn mul_assign(&mut self, other: $b) {
+ *self = *self * other;
+ }
+ }
+ };
+
+ ($a:ident /= $b:ident) => {
+ impl DivAssign<$b> for $a {
+ fn div_assign(&mut self, other: $b) {
+ *self = *self / other;
+ }
+ }
+ };
+}