1use std::marker::PhantomData;
4
5use bytes::Buf;
6use h3::{
7 client::Connection,
8 quic::{self},
9};
10
11use crate::{
12 datagram_handler::{DatagramReader, DatagramSender, HandleDatagramsExt},
13 quic_traits::DatagramConnectionExt,
14};
15
16impl<B, C> HandleDatagramsExt<C, B> for Connection<C, B>
17where
18 B: Buf,
19 C: quic::Connection<B> + DatagramConnectionExt<B>,
20{
21 fn get_datagram_sender(
22 &self,
23 stream_id: quic::StreamId,
24 ) -> crate::datagram_handler::DatagramSender<
25 <C as crate::quic_traits::DatagramConnectionExt<B>>::SendDatagramHandler,
26 B,
27 > {
28 DatagramSender {
29 handler: self.inner.conn.send_datagram_handler(),
30 _marker: PhantomData,
31 shared_state: self.inner.shared.clone(),
32 stream_id,
33 }
34 }
35
36 fn get_datagram_reader(
37 &self,
38 ) -> crate::datagram_handler::DatagramReader<
39 <C as crate::quic_traits::DatagramConnectionExt<B>>::RecvDatagramHandler,
40 > {
41 DatagramReader {
42 handler: self.inner.conn.recv_datagram_handler(),
43 shared_state: self.inner.shared.clone(),
44 }
45 }
46}