diff --git a/src/lib.rs b/src/lib.rs
index 4958354..45ab6fb 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -133,6 +133,15 @@ pub const fn Aligned(value: T) -> Aligned {
}
}
+impl From for Aligned
+where
+ A: Alignment,
+{
+ fn from(value: T) -> Self {
+ Aligned(value)
+ }
+}
+
impl ops::Deref for Aligned
where
A: Alignment,
@@ -297,6 +306,42 @@ where
}
}
+impl AsRef> for Aligned
+where
+ A: Alignment,
+{
+ fn as_ref(&self) -> &Aligned {
+ self
+ }
+}
+
+impl AsMut> for Aligned
+where
+ A: Alignment,
+{
+ fn as_mut(&mut self) -> &mut Aligned {
+ self
+ }
+}
+
+impl AsRef<[T]> for Aligned
+where
+ A: Alignment,
+{
+ fn as_ref(&self) -> &[T] {
+ &self.value[..]
+ }
+}
+
+impl AsMut<[T]> for Aligned
+where
+ A: Alignment,
+{
+ fn as_mut(&mut self) -> &mut [T] {
+ &mut self.value[..]
+ }
+}
+
impl AsSlice for Aligned
where
A: Alignment,
@@ -989,3 +1034,25 @@ fn test_range_from_out_of_bounds() {
let a: &Aligned = &Aligned::([0u8; 4]);
let _ = &a[6..];
}
+
+#[test]
+fn test_from() {
+ let a: Aligned = [1, 2, 3].into();
+ assert_eq!(*a, [1, 2, 3]);
+ assert_eq!(core::mem::align_of_val(&a), 4);
+}
+
+#[test]
+fn array_as_ref() {
+ let array = Aligned::([1, 2, 3]);
+ let slice: &[u8] = array.as_ref();
+ assert_eq!(slice.as_ptr(), array.as_ptr());
+}
+
+#[test]
+fn array_as_mut() {
+ let mut array = Aligned::([1, 2, 3]);
+ let slice: &mut [u8] = array.as_mut();
+ slice[0] = 4;
+ assert_eq!(slice.as_ptr(), array.as_ptr());
+}