1use core::net::{Ipv4Addr, Ipv6Addr};
2
3use embedded_io_async::ErrorType;
4
5pub trait MulticastV4: ErrorType {
6 async fn join_v4(
7 &mut self,
8 multicast_addr: Ipv4Addr,
9 interface: Ipv4Addr,
10 ) -> Result<(), Self::Error>;
11 async fn leave_v4(
12 &mut self,
13 multicast_addr: Ipv4Addr,
14 interface: Ipv4Addr,
15 ) -> Result<(), Self::Error>;
16}
17
18impl<T> MulticastV4 for &mut T
19where
20 T: MulticastV4,
21{
22 async fn join_v4(
23 &mut self,
24 multicast_addr: Ipv4Addr,
25 interface: Ipv4Addr,
26 ) -> Result<(), Self::Error> {
27 (**self).join_v4(multicast_addr, interface).await
28 }
29
30 async fn leave_v4(
31 &mut self,
32 multicast_addr: Ipv4Addr,
33 interface: Ipv4Addr,
34 ) -> Result<(), Self::Error> {
35 (**self).leave_v4(multicast_addr, interface).await
36 }
37}
38
39pub trait MulticastV6: ErrorType {
40 async fn join_v6(
41 &mut self,
42 multicast_addr: Ipv6Addr,
43 interface: u32,
44 ) -> Result<(), Self::Error>;
45 async fn leave_v6(
46 &mut self,
47 multicast_addr: Ipv6Addr,
48 interface: u32,
49 ) -> Result<(), Self::Error>;
50}
51
52impl<T> MulticastV6 for &mut T
53where
54 T: MulticastV6,
55{
56 async fn join_v6(
57 &mut self,
58 multicast_addr: Ipv6Addr,
59 interface: u32,
60 ) -> Result<(), Self::Error> {
61 (**self).join_v6(multicast_addr, interface).await
62 }
63
64 async fn leave_v6(
65 &mut self,
66 multicast_addr: Ipv6Addr,
67 interface: u32,
68 ) -> Result<(), Self::Error> {
69 (**self).leave_v6(multicast_addr, interface).await
70 }
71}