use core::ptr::NonNull;
pub(crate) struct Inner<C, T: ?Sized> {
pub(crate) ref_count: NonNull<C>,
pub(crate) data: NonNull<T>,
}
impl<C, T: ?Sized> Clone for Inner<C, T> {
#[inline]
fn clone(&self) -> Self {
*self
}
}
impl<C, T: ?Sized> Copy for Inner<C, T> {}
#[cfg(test)]
mod tests {
use super::*;
use core::ptr;
#[test]
fn clone_inner() {
use core::cell::Cell;
let data = [1, 2, 3];
let cell = Cell::new(1u32);
let inner = Inner {
ref_count: NonNull::new(ptr::from_ref(&cell).cast_mut()).unwrap(),
data: NonNull::new(ptr::from_ref(&data).cast_mut()).unwrap(),
};
#[expect(clippy::clone_on_copy)]
let inner2 = inner.clone();
assert_eq!(inner.ref_count, inner2.ref_count);
assert_eq!(inner.data, inner2.data);
let inner2 = inner;
assert_eq!(inner.ref_count, inner2.ref_count);
assert_eq!(inner.data, inner2.data);
}
}