vec2
Diffstat (limited to 'src/from.rs')
-rw-r--r--src/from.rs32
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(())
+ }
+}