vec2
Diffstat (limited to 'src/from.rs')
| -rw-r--r-- | src/from.rs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/from.rs b/src/from.rs new file mode 100644 index 0000000..000d243 --- /dev/null +++ b/src/from.rs @@ -0,0 +1,32 @@ +use crate::Vector2; + +impl<T> From<(T, T)> for Vector2<T> { + fn from((x, y): (T, T)) -> Self { + Self::new(x, y) + } +} + +impl<T: Copy> From<T> for Vector2<T> { + /// Splats the value. + fn from(value: T) -> Self { + Self::splat(value) + } +} + +impl<T> From<[T; 2]> for Vector2<T> { + fn from([x, y]: [T; 2]) -> Self { + Self::new(x, y) + } +} + +impl<T: Copy> TryFrom<&[T]> for Vector2<T> { + type Error = (); + /// If the slice len is 2, constructs a new vec. + fn try_from(value: &[T]) -> Result<Self, Self::Error> { + value + .len() + .eq(&2) + .then(|| Self::new(value[0], value[1])) + .ok_or(()) + } +} |