encase/impls/
glam.rs

1use crate::{
2    matrix::{impl_matrix, AsMutMatrixParts, AsRefMatrixParts, FromMatrixParts, MatrixScalar},
3    vector::impl_vector,
4};
5
6impl_vector!(2, glam::Vec2, f32; using AsRef AsMut From);
7impl_vector!(2, glam::UVec2, u32; using AsRef AsMut From);
8impl_vector!(2, glam::IVec2, i32; using AsRef AsMut From);
9
10impl_vector!(3, glam::Vec3, f32; using AsRef AsMut From);
11impl_vector!(3, glam::UVec3, u32; using AsRef AsMut From);
12impl_vector!(3, glam::IVec3, i32; using AsRef AsMut From);
13
14impl_vector!(4, glam::Vec4, f32; using AsRef AsMut From);
15impl_vector!(4, glam::UVec4, u32; using AsRef AsMut From);
16impl_vector!(4, glam::IVec4, i32; using AsRef AsMut From);
17
18impl_matrix!(2, 2, glam::Mat2, f32);
19impl_matrix!(3, 3, glam::Mat3, f32);
20impl_matrix!(4, 4, glam::Mat4, f32);
21
22macro_rules! impl_matrix_traits {
23    ($c:literal, $r:literal, $type:ty, $el_ty:ty) => {
24        impl AsRefMatrixParts<$el_ty, $c, $r> for $type
25        where
26            Self: AsRef<[$el_ty; $r * $c]>,
27            $el_ty: MatrixScalar,
28        {
29            fn as_ref_parts(&self) -> &[[$el_ty; $r]; $c] {
30                array_ref_to_2d_array_ref!(self.as_ref(), $el_ty, $c, $r)
31            }
32        }
33
34        impl AsMutMatrixParts<$el_ty, $c, $r> for $type
35        where
36            Self: AsMut<[$el_ty; $r * $c]>,
37            $el_ty: MatrixScalar,
38        {
39            fn as_mut_parts(&mut self) -> &mut [[$el_ty; $r]; $c] {
40                array_mut_to_2d_array_mut!(self.as_mut(), $el_ty, $c, $r)
41            }
42        }
43
44        impl FromMatrixParts<$el_ty, $c, $r> for $type {
45            fn from_parts(parts: [[$el_ty; $r]; $c]) -> Self {
46                Self::from_cols_array_2d(&parts)
47            }
48        }
49    };
50}
51
52impl_matrix_traits!(2, 2, glam::Mat2, f32);
53impl_matrix_traits!(3, 3, glam::Mat3, f32);
54impl_matrix_traits!(4, 4, glam::Mat4, f32);