h3_datagram/
client.rs

1//! client API
2
3use 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}