torin/
scaled.rs

1use std::borrow::Cow;
2
3pub trait Scaled {
4    fn scale(&mut self, scale_factor: f32);
5
6    fn scale_if_needed(&mut self, scale_factor: f32) {
7        #[allow(clippy::float_cmp)]
8        if scale_factor != 1.0 {
9            self.scale(scale_factor);
10        }
11    }
12
13    fn with_scale(&'_ self, scale_factor: f32) -> Cow<'_, Self>
14    where
15        Self: Clone,
16    {
17        #[allow(clippy::float_cmp)]
18        if scale_factor == 1.0 {
19            Cow::Borrowed(self)
20        } else {
21            let mut copy = self.clone();
22            copy.scale(scale_factor);
23            Cow::Owned(copy)
24        }
25    }
26}