datagram_transport/
lib.rs1pub trait DatagramWrite {
7 fn write(&mut self, buf: &[u8]) -> std::io::Result<()>;
8}
9
10pub trait DatagramRead {
11 fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize>;
12}
13
14pub trait DatagramTransport: DatagramWrite + DatagramRead {}
15
16pub trait DatagramTransportMultiConnection: DatagramWrite {
17 fn id(&self) -> u8;
18}
19
20pub trait DatagramTransportMulti {
21 fn read(
22 &mut self,
23 buf: &mut [u8],
24 ) -> std::io::Result<(impl DatagramTransportMultiConnection, usize)>;
25}
26
27#[cfg(test)]
28mod tests {
29 struct TestTransport {}
30
31 impl DatagramWrite for TestTransport {
32 fn write(&mut self, _data: &[u8]) -> std::io::Result<()> {
33 Ok(())
34 }
35 }
36
37 impl DatagramRead for TestTransport {
38 fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
39 buf[0] = 0xca;
40 Ok(1)
41 }
42 }
43
44 struct TestMultiTransport {}
45 struct TestMultiTransportConnection {
46 id: u8,
47 }
48
49 impl DatagramWrite for TestMultiTransportConnection {
50 fn write(&mut self, _data: &[u8]) -> std::io::Result<()> {
51 Ok(())
52 }
53 }
54
55 impl DatagramTransportMultiConnection for TestMultiTransportConnection {
56 fn id(&self) -> u8 {
57 self.id
58 }
59 }
60
61 impl DatagramTransportMulti for TestMultiTransport {
62 fn read(
63 &mut self,
64 buf: &mut [u8],
65 ) -> std::io::Result<(impl DatagramTransportMultiConnection, usize)> {
66 buf[0] = 0xca;
67 Ok((TestMultiTransportConnection { id: 1 }, 1))
68 }
69 }
70
71 use super::*;
72
73 #[test]
74 fn single_write() {
75 let mut transport = TestTransport {};
76 let data: &[u8] = &[1, 2, 3, 4, 5];
77 let result = transport.write(data);
78 assert!(result.is_ok());
79 }
80
81 #[test]
82 fn multi_read() {
83 let mut transport = TestMultiTransport {};
84 let mut buf = [0; 10];
85 {
86 let (mut connection, size) = transport.read(&mut buf).unwrap();
87 assert!(size == 1);
88 assert!(connection.id() == 1);
89 let out_data: &[u8] = &[1, 2, 3, 4, 5];
90 connection.write(&out_data).unwrap();
91 }
92 assert_eq!(buf[0], 0xca);
93 }
94}