planus/impls/
ref_.rs

1use crate::{builder::Builder, traits::*, Cursor, Offset, UnionOffset};
2use core::mem::MaybeUninit;
3
4impl<'a, P: Primitive, T: ?Sized + WriteAsPrimitive<P>> WriteAsPrimitive<P> for &'a T {
5    #[inline]
6    fn write<const N: usize>(&self, cursor: Cursor<'_, N>, buffer_position: u32) {
7        T::write(*self, cursor, buffer_position)
8    }
9}
10
11impl<'a, T1: ?Sized, T2: ?Sized + WriteAsOffset<T1>> WriteAsOffset<T1> for &'a T2 {
12    #[inline]
13    fn prepare(&self, builder: &mut Builder) -> Offset<T1> {
14        T2::prepare(self, builder)
15    }
16}
17
18impl<'a, P: Primitive, T: ?Sized + WriteAs<P>> WriteAs<P> for &'a T {
19    type Prepared = T::Prepared;
20    #[inline]
21    fn prepare(&self, builder: &mut Builder) -> T::Prepared {
22        T::prepare(self, builder)
23    }
24}
25
26impl<'a, P: Primitive, D: ?Sized, T: ?Sized + WriteAsDefault<P, D>> WriteAsDefault<P, D> for &'a T {
27    type Prepared = T::Prepared;
28    #[inline]
29    fn prepare(&self, builder: &mut Builder, default: &D) -> Option<T::Prepared> {
30        T::prepare(self, builder, default)
31    }
32}
33
34impl<'a, P: Primitive, T: ?Sized + WriteAsOptional<P>> WriteAsOptional<P> for &'a T {
35    type Prepared = T::Prepared;
36    #[inline]
37    fn prepare(&self, builder: &mut Builder) -> Option<T::Prepared> {
38        T::prepare(self, builder)
39    }
40}
41
42impl<'a, T1: ?Sized, T2: ?Sized + WriteAsUnion<T1>> WriteAsUnion<T1> for &'a T2 {
43    #[inline]
44    fn prepare(&self, builder: &mut Builder) -> UnionOffset<T1> {
45        T2::prepare(self, builder)
46    }
47}
48
49impl<'a, T1: ?Sized, T2: ?Sized + WriteAsOptionalUnion<T1>> WriteAsOptionalUnion<T1> for &'a T2 {
50    #[inline]
51    fn prepare(&self, builder: &mut Builder) -> Option<UnionOffset<T1>> {
52        T2::prepare(self, builder)
53    }
54}
55
56impl<'a, P: Primitive, T: ?Sized + VectorWrite<P>> VectorWrite<P> for &'a T {
57    const STRIDE: usize = T::STRIDE;
58    type Value = T::Value;
59
60    #[inline]
61    fn prepare(&self, builder: &mut Builder) -> Self::Value {
62        T::prepare(self, builder)
63    }
64
65    #[inline]
66    unsafe fn write_values(
67        values: &[Self::Value],
68        bytes: *mut MaybeUninit<u8>,
69        buffer_position: u32,
70    ) {
71        T::write_values(values, bytes, buffer_position);
72    }
73}