variable_len_reader/asynchronous/
write_raw.rs1macro_rules! write_raw_future {
2 ($primitive: ty, $future: ident, $to: ident) => {
3 write_raw_future!(f cfg(feature = "async_raw"), $primitive, $future, $to);
4 };
5 (f $feature: meta, $primitive: ty, $future: ident, $to: ident) => {
6 #[$feature]
7 $crate::pin_project_lite::pin_project! {
8 #[cfg_attr(docsrs, doc($feature))]
9 #[derive(Debug)]
10 #[project(!Unpin)]
11 #[must_use = "futures do nothing unless you `.await` or poll them"]
12 pub struct $future<'a, W: ?Sized> {
13 #[pin]
14 writer: &'a mut W,
15 buf: OwnedWriteBuf<[u8; ::core::mem::size_of::<$primitive>()]>,
16 }
17 }
18 #[$feature]
19 impl<'a, W: ?Sized> WriterFuture<'a, W, $primitive> for $future<'a, W> {
20 fn new(writer: &'a mut W, buf: $primitive) -> Self {
21 Self { writer, buf: OwnedWriteBuf::new(Self::_handle(buf)) }
22 }
23 fn reset(self: Pin<&mut Self>, buf: $primitive) {
24 let me = self.project();
25 *me.buf = OwnedWriteBuf::new(Self::_handle(buf));
26 }
27 }
28 #[$feature]
29 impl<'a, W: AsyncVariableWriter + Unpin + ?Sized> Future for $future<'a, W> {
30 type Output = ::core::result::Result<(), W::Error>;
31
32 fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
33 let mut me = self.project();
34 let mut ref_buf = me.buf.into();
35 let res = W::poll_write_more(Pin::new(&mut *me.writer), cx, &mut ref_buf);
36 let position = ref_buf.position();
37 me.buf.set_position(position);
38 res
39 }
40 }
41 #[$feature]
42 impl<'a, W: ?Sized> $future<'a, W> {
43 fn _handle(value: $primitive) -> [u8; ::core::mem::size_of::<$primitive>()] {
44 <$primitive>::$to(value)
45 }
46 }
47 };
48}
49macro_rules! write_raw_func {
50 ($primitive: ty, $future: ident, $func: ident) => {
51 write_raw_func!(f cfg(feature = "async_raw"), $primitive, $future, $func);
52 };
53 (f $feature: meta, $primitive: ty, $future: ident, $func: ident) => {
54 write_wrap_func!(f $feature, $primitive, $future, $func);
55 };
56}
57
58macro_rules! define_write_raw_future {
59 () => {
60 write_raw_future!(u8, WriteU8Raw, to_ne_bytes);
61 write_raw_future!(i8, WriteI8Raw, to_ne_bytes);
62
63 write_raw_future!(u16, WriteU16RawLe, to_le_bytes);
64 write_raw_future!(u16, WriteU16RawBe, to_be_bytes);
65 write_raw_future!(i16, WriteI16RawLe, to_le_bytes);
66 write_raw_future!(i16, WriteI16RawBe, to_be_bytes);
67
68 write_raw_future!(u32, WriteU32RawLe, to_le_bytes);
69 write_raw_future!(u32, WriteU32RawBe, to_be_bytes);
70 write_raw_future!(i32, WriteI32RawLe, to_le_bytes);
71 write_raw_future!(i32, WriteI32RawBe, to_be_bytes);
72
73 write_raw_future!(u64, WriteU64RawLe, to_le_bytes);
74 write_raw_future!(u64, WriteU64RawBe, to_be_bytes);
75 write_raw_future!(i64, WriteI64RawLe, to_le_bytes);
76 write_raw_future!(i64, WriteI64RawBe, to_be_bytes);
77
78 write_raw_future!(u128, WriteU128RawLe, to_le_bytes);
79 write_raw_future!(u128, WriteU128RawBe, to_be_bytes);
80 write_raw_future!(i128, WriteI128RawLe, to_le_bytes);
81 write_raw_future!(i128, WriteI128RawBe, to_be_bytes);
82
83 write_raw_future!(f32, WriteF32RawLe, to_le_bytes);
84 write_raw_future!(f32, WriteF32RawBe, to_be_bytes);
85 write_raw_future!(f64, WriteF64RawLe, to_le_bytes);
86 write_raw_future!(f64, WriteF64RawBe, to_be_bytes);
87 };
88}
89macro_rules! define_write_raw_func {
90 () => {
91 write_raw_func!(u8, WriteU8Raw, write_u8_raw);
92 write_raw_func!(i8, WriteI8Raw, write_i8_raw);
93
94 write_raw_func!(u16, WriteU16RawLe, write_u16_raw_le);
95 write_raw_func!(u16, WriteU16RawBe, write_u16_raw_be);
96 write_raw_func!(i16, WriteI16RawLe, write_i16_raw_le);
97 write_raw_func!(i16, WriteI16RawBe, write_i16_raw_be);
98
99 write_raw_func!(u32, WriteU32RawLe, write_u32_raw_le);
100 write_raw_func!(u32, WriteU32RawBe, write_u32_raw_be);
101 write_raw_func!(i32, WriteI32RawLe, write_i32_raw_le);
102 write_raw_func!(i32, WriteI32RawBe, write_i32_raw_be);
103
104 write_raw_func!(u64, WriteU64RawLe, write_u64_raw_le);
105 write_raw_func!(u64, WriteU64RawBe, write_u64_raw_be);
106 write_raw_func!(i64, WriteI64RawLe, write_i64_raw_le);
107 write_raw_func!(i64, WriteI64RawBe, write_i64_raw_be);
108
109 write_raw_func!(u128, WriteU128RawLe, write_u128_raw_le);
110 write_raw_func!(u128, WriteU128RawBe, write_u128_raw_be);
111 write_raw_func!(i128, WriteI128RawLe, write_i128_raw_le);
112 write_raw_func!(i128, WriteI128RawBe, write_i128_raw_be);
113
114 write_raw_func!(f32, WriteF32RawLe, write_f32_raw_le);
115 write_raw_func!(f32, WriteF32RawBe, write_f32_raw_be);
116 write_raw_func!(f64, WriteF64RawLe, write_f64_raw_le);
117 write_raw_func!(f64, WriteF64RawBe, write_f64_raw_be);
118 };
119}
120
121define_write_raw_future!();