On Thu Jul 3, 2025 at 6:25 PM CEST, Andreas Hindborg wrote: > "Benno Lossin" <lossin@xxxxxxxxxx> writes: >> On Thu Jul 3, 2025 at 11:03 AM CEST, Andreas Hindborg wrote: >>> "Benno Lossin" <lossin@xxxxxxxxxx> writes: >>>> On Wed Jul 2, 2025 at 3:18 PM CEST, Andreas Hindborg wrote: >>>>> +impl<T: Copy> OnceLock<T> { >>>>> + /// Get a copy of the contained object. >>>>> + /// >>>>> + /// Returns [`None`] if the [`OnceLock`] is empty. >>>>> + pub fn copy(&self) -> Option<T> { >>>>> + if self.init.load(Acquire) == 2 { >>>>> + // SAFETY: As determined by the load above, the object is ready for shared access. >>>>> + Some(unsafe { *self.value.get() }) >>>>> + } else { >>>>> + None >>>>> + } >>>> >>>> The impl can just be: >>>> >>>> self.as_ref().copied() >>> >>> Nice. I was thinking of dropping this method and just have callers do >>> >>> my_once_lock.as_ref().map(|v| v.copied()) >>> >>> What do you think? >> >> There is `Option::copied`, so no need for the `.map` call. > > Cool. > >> I don't >> really have a preference, if users always want to access it by-value, >> then we should have `copy`. > > But should it be `copy` or `copied` like `Option`? I'd say `copy`. With `copied` I'm thinking of something that turns `OnceLock<&T>` into `OnceLock<T>`, which is weird... --- Cheers, Benno