1use crate::{buf::UnalignedBuf, BodyBuf, Signature};
2
3pub(crate) mod sealed {
4 pub trait Sealed {}
5}
6
7pub trait Write: self::sealed::Sealed {
13 #[doc(hidden)]
15 const SIGNATURE: &'static Signature;
16
17 #[doc(hidden)]
19 fn write_to(&self, buf: &mut BodyBuf);
20
21 #[doc(hidden)]
23 fn write_to_unaligned(&self, buf: &mut UnalignedBuf);
24}
25
26impl self::sealed::Sealed for [u8] {}
27
28impl Write for [u8] {
43 const SIGNATURE: &'static Signature = Signature::new_const(b"ay");
44
45 #[inline]
46 fn write_to(&self, buf: &mut BodyBuf) {
47 buf.store_frame(self.len() as u32);
48 buf.extend_from_slice(self);
49 }
50
51 #[inline]
52 fn write_to_unaligned(&self, buf: &mut UnalignedBuf) {
53 buf.store(self.len() as u32);
54 buf.extend_from_slice(self);
55 }
56}
57
58impl_traits_for_write!([u8], &b"abcd"[..], "qay");
59
60impl self::sealed::Sealed for str {}
61
62impl Write for str {
76 const SIGNATURE: &'static Signature = Signature::STRING;
77
78 #[inline]
79 fn write_to(&self, buf: &mut BodyBuf) {
80 buf.store_frame(self.len() as u32);
81 buf.extend_from_slice_nul(self.as_bytes());
82 }
83
84 #[inline]
85 fn write_to_unaligned(&self, buf: &mut UnalignedBuf) {
86 buf.store(self.len() as u32);
87 buf.extend_from_slice_nul(self.as_bytes());
88 }
89}
90
91impl_traits_for_write!(str, "Hello World", "qs");