1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
mod net;
pub mod dirt;
pub mod f1;
pub type TelemetryPacket = [u8];
pub trait TelemetryEvent {
fn from_packet(packet: &TelemetryPacket) -> Result<Self, Box<dyn std::error::Error>>
where
Self: Sized;
}
pub struct TelemetryServer<T: TelemetryEvent> {
srv: net::Server,
phantom: std::marker::PhantomData<T>,
}
impl<T: TelemetryEvent> TelemetryServer<T> {
pub fn new(address: &'static str) -> Result<TelemetryServer<T>, std::io::Error> {
let srv = net::Server::new(address)?;
Ok(TelemetryServer {
srv,
phantom: std::marker::PhantomData,
})
}
pub fn next(&self) -> Result<T, Box<dyn std::error::Error>> {
let packet = self.srv.recv()?;
T::from_packet(&packet)
}
}