Messages in this thread | | | Date | Wed, 28 Dec 2022 11:04:04 +0100 | From | Alice Ryhl <> | Subject | Re: [PATCH 5/7] rust: sync: allow type of `self` to be `ArcBorrow<T>` |
| |
Reviewed-by: Alice Ryhl <aliceryhl@google.com>
On 12/28/22 07:03, Wedson Almeida Filho wrote: > This allows associated functions whose `self` argument has > `ArcBorrow<T>` as their type. This, in turn, allows callers to use the > dot syntax to make calls. > > Signed-off-by: Wedson Almeida Filho <wedsonaf@gmail.com> > --- > rust/kernel/sync/arc.rs | 23 +++++++++++++++++++++++ > 1 file changed, 23 insertions(+) > > diff --git a/rust/kernel/sync/arc.rs b/rust/kernel/sync/arc.rs > index f68bfc02c81a..84f31c85a513 100644 > --- a/rust/kernel/sync/arc.rs > +++ b/rust/kernel/sync/arc.rs > @@ -255,11 +255,34 @@ impl<T: ?Sized> Drop for Arc<T> { > /// // Assert that both `obj` and `cloned` point to the same underlying object. > /// assert!(core::ptr::eq(&*obj, &*cloned)); > /// ``` > +/// > +/// Using `ArcBorrow<T>` as the type of `self`: > +/// > +/// ``` > +/// use crate::sync::{Arc, ArcBorrow}; > +/// > +/// struct Example { > +/// a: u32, > +/// b: u32, > +/// } > +/// > +/// impl Example { > +/// fn use_reference(self: ArcBorrow<'_, Self>) { > +/// // ... > +/// } > +/// } > +/// > +/// let obj = Arc::try_new(Example { a: 10, b: 20 })?; > +/// obj.as_arc_borrow().use_reference(); > +/// ``` > pub struct ArcBorrow<'a, T: ?Sized + 'a> { > inner: NonNull<ArcInner<T>>, > _p: PhantomData<&'a ()>, > } > > +// This is to allow [`ArcBorrow`] (and variants) to be used as the type of `self`. > +impl<T: ?Sized> core::ops::Receiver for ArcBorrow<'_, T> {} > + > impl<T: ?Sized> Clone for ArcBorrow<'_, T> { > fn clone(&self) -> Self { > *self
| |