simple_someip/
net_endpoint.rs1use core::net::SocketAddr;
12
13#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
20#[non_exhaustive]
21pub enum TransportProtocol {
22 Udp,
24 Tcp,
26}
27
28#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
30pub struct NetEndpoint {
31 pub addr: SocketAddr,
33 pub protocol: TransportProtocol,
35}
36
37impl NetEndpoint {
38 #[must_use]
39 pub const fn new(addr: SocketAddr, protocol: TransportProtocol) -> Self {
40 Self { addr, protocol }
41 }
42
43 #[must_use]
44 pub const fn udp(addr: SocketAddr) -> Self {
45 Self::new(addr, TransportProtocol::Udp)
46 }
47
48 #[must_use]
49 pub const fn tcp(addr: SocketAddr) -> Self {
50 Self::new(addr, TransportProtocol::Tcp)
51 }
52}
53
54#[cfg(test)]
55mod tests {
56 use super::*;
57 use core::net::{Ipv4Addr, SocketAddrV4};
58
59 #[test]
60 fn constructors_set_protocol() {
61 let addr = SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::LOCALHOST, 30490));
62 assert_eq!(NetEndpoint::udp(addr).protocol, TransportProtocol::Udp);
63 assert_eq!(NetEndpoint::tcp(addr).protocol, TransportProtocol::Tcp);
64 assert_eq!(NetEndpoint::udp(addr).addr, addr);
65 }
66
67 #[test]
68 fn endpoints_differing_only_in_protocol_are_distinct() {
69 let addr = SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::LOCALHOST, 30490));
70 assert_ne!(NetEndpoint::udp(addr), NetEndpoint::tcp(addr));
71 }
72}