dope_core/io/socket/msg/
builder.rs1use dope_sys::io::socket::msg::{Header, Iovec};
2use o3::buffer::bytes::bounded;
3
4use crate::io::{socket, socket::msg};
5
6pub struct Builder<'a> {
9 pub(super) header: &'a mut Header,
10}
11
12impl<'a> Builder<'a> {
13 pub fn new(header: &'a mut Header) -> Self {
14 *header = Header::new();
15 Self { header }
16 }
17
18 pub fn name(&mut self, addr: &'a socket::Inet) {
19 use socket::Prepared as _;
20
21 self.header.name(addr.view().native());
22 }
23
24 pub fn control(&mut self, control: &'a [u8]) {
26 self.header.control(control);
27 }
28
29 #[must_use]
30 pub fn finish<T: AsRef<[u8]>>(
31 self,
32 iovecs: &'a mut [Iovec; 1],
33 payload: &'a bounded::Value<T>,
34 ) -> msg::Message<'a> {
35 *iovecs = [Iovec::from_slice(payload.as_ref())];
36 self.header.bind(iovecs);
37 msg::Message {
38 header: self.header,
39 }
40 }
41}