1use std::marker::PhantomData;
4
5use bytes::Buf;
6use h3::{
7 quic::{self},
8 server::Connection,
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(
23 &self,
24 stream_id: quic::StreamId,
25 ) -> crate::datagram_handler::DatagramSender<
26 <C as crate::quic_traits::DatagramConnectionExt<B>>::SendDatagramHandler,
27 B,
28 > {
29 DatagramSender {
30 handler: self.inner.conn.send_datagram_handler(),
31 _marker: PhantomData,
32 shared_state: self.inner.shared.clone(),
33 stream_id,
34 }
35 }
36
37 fn get_datagram_reader(
39 &self,
40 ) -> crate::datagram_handler::DatagramReader<
41 <C as crate::quic_traits::DatagramConnectionExt<B>>::RecvDatagramHandler,
42 > {
43 DatagramReader {
44 handler: self.inner.conn.recv_datagram_handler(),
45 shared_state: self.inner.shared.clone(),
46 }
47 }
48}