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}