Skip to content

Commit b1db1b7

Browse files
committed
wrapper: add AsSlice and AsSliceMut wrappers
1 parent 4359ca7 commit b1db1b7

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -654,6 +654,7 @@ pub fn derive_getters(input: TokenStream) -> TokenStream {
654654
/// wrapped type, using `#[wrapper()]` proc macro:
655655
/// 1. Reference access to the inner type:
656656
/// * `Deref` for implementing [`core::ops::Deref`]
657+
/// * `AsSlice` for implementing [`AsRef`]`<[u8]>`
657658
/// * `BorrowSlice` for implementing
658659
/// [`core::borrow::Borrow`]`<[Self::Inner]>`
659660
/// 2. Formatting:
@@ -782,6 +783,7 @@ pub fn derive_wrapper(input: TokenStream) -> TokenStream {
782783
/// wrapped type, using `#[wrapper()]` proc macro:
783784
/// 1. Reference access to the inner type:
784785
/// * `DerefMut` for implementing [`core::ops::DerefMut`]
786+
/// * `AsSliceMut` for implementing [`AsMut`]`<[u8]>`
785787
/// * `BorrowSliceMut` for implementing
786788
/// [`core::borrow::BorrowMut`]`<[Self::Inner]>`
787789
/// 2. Indexed access to the inner type:

src/wrapper.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ enum Wrapper {
4040
// References
4141
Deref,
4242
AsRef,
43+
AsSlice,
4344
Borrow,
4445
BorrowSlice,
4546
// Indexes
@@ -80,6 +81,7 @@ enum WrapperMut {
8081
// References
8182
DerefMut,
8283
AsMut,
84+
AsSliceMut,
8385
BorrowMut,
8486
BorrowSliceMut,
8587
// Indexes
@@ -148,6 +150,7 @@ impl FromPath for Wrapper {
148150
"UpperExp" => Some(Wrapper::UpperExp),
149151
"NoRefs" => Some(Wrapper::NoRefs),
150152
"AsRef" => Some(Wrapper::AsRef),
153+
"AsSlice" => Some(Wrapper::AsSlice),
151154
"Deref" => Some(Wrapper::Deref),
152155
"Borrow" => Some(Wrapper::Borrow),
153156
"BorrowSlice" => Some(Wrapper::BorrowSlice),
@@ -370,6 +373,17 @@ impl Wrapper {
370373
}
371374
}
372375
},
376+
Wrapper::AsSlice => quote! {
377+
#[automatically_derived]
378+
impl #impl_generics AsRef<[u8]> for #ident_name #ty_generics #where_clause
379+
{
380+
#[inline]
381+
fn as_ref(&self) -> &[u8] {
382+
use #amplify_crate::Wrapper;
383+
AsRef::<[u8]>::as_ref(Wrapper::as_inner(self))
384+
}
385+
}
386+
},
373387
Wrapper::Borrow => quote! {
374388
#[automatically_derived]
375389
impl #impl_generics ::core::borrow::Borrow<<#ident_name #impl_generics as #amplify_crate::Wrapper>::Inner> for #ident_name #ty_generics #where_clause {
@@ -682,6 +696,7 @@ impl FromPath for WrapperMut {
682696
"NoRefs" => Some(WrapperMut::NoRefs),
683697
"DerefMut" => Some(WrapperMut::DerefMut),
684698
"AsMut" => Some(WrapperMut::AsMut),
699+
"AsSliceMut" => Some(WrapperMut::AsSliceMut),
685700
"BorrowMut" => Some(WrapperMut::BorrowMut),
686701
"BorrowSliceMut" => Some(WrapperMut::BorrowSliceMut),
687702
"IndexMut" => Some(WrapperMut::IndexMut),
@@ -778,6 +793,17 @@ impl WrapperMut {
778793
}
779794
}
780795
},
796+
WrapperMut::AsSliceMut => quote! {
797+
#[automatically_derived]
798+
impl #impl_generics AsMut<[u8]> for #ident_name #ty_generics #where_clause
799+
{
800+
#[inline]
801+
fn as_mut(&mut self) -> &mut [u8] {
802+
use #amplify_crate::WrapperMut;
803+
AsMut::<[u8]>::as_mut(WrapperMut::as_inner_mut(self))
804+
}
805+
}
806+
},
781807
WrapperMut::BorrowMut => quote! {
782808
#[automatically_derived]
783809
impl #impl_generics ::core::borrow::BorrowMut<<#ident_name #impl_generics as #amplify_crate::Wrapper>::Inner> for #ident_name #ty_generics #where_clause {

0 commit comments

Comments
 (0)