base_scheduler/
owned_socket_recv_message.rs1use crate::{
5 IoBuf, IoBufMut, SocketAddressView, SocketRecvMessage, SocketRecvMessageMut, SocketRecvResult,
6};
7
8pub struct OwnedSocketRecvMessage<Buffer: IoBuf> {
10 result: SocketRecvResult,
11 payload: Buffer,
12}
13
14impl<B: IoBuf> OwnedSocketRecvMessage<B> {
15 pub fn new(result: SocketRecvResult, payload: B) -> Self {
17 assert_eq!(
18 result.bytes,
19 payload.as_ref().len(),
20 "receive metadata and payload lengths differ"
21 );
22 Self { result, payload }
23 }
24}
25
26impl<B: IoBuf> SocketRecvMessage for OwnedSocketRecvMessage<B> {
27 type Payload = B;
28
29 fn address(&self) -> Option<impl SocketAddressView + '_> {
30 self.result.address.as_ref()
31 }
32
33 fn payload(&self) -> &[u8] {
34 self.payload.as_ref()
35 }
36
37 fn truncated(&self) -> bool {
38 self.result.truncated
39 }
40
41 fn control_truncated(&self) -> bool {
42 self.result.control_truncated
43 }
44
45 fn into_payload(self) -> B {
46 self.payload
47 }
48}
49
50impl<B: IoBufMut> SocketRecvMessageMut for OwnedSocketRecvMessage<B> {
51 fn payload_mut(&mut self) -> &mut [u8] {
52 self.payload.as_mut()
53 }
54}