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