h3_datagram/
server.rs

1//! server API
2
3use 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    /// Get the datagram sender
22    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    /// Get the datagram reader
38    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}