{-# LANGUAGE RecordWildCards #-} module Network.QUIC.Stream.Queue where import Data.ByteString (ByteString) import Control.Concurrent.STM import Network.QUIC.Stream.Types putRecvStreamQ :: Stream -> ByteString -> IO () putRecvStreamQ :: Stream -> ByteString -> IO () putRecvStreamQ Stream{StreamId TVar Flow IORef (Skew RxStreamData) IORef StreamState IORef Flow Connection RecvStreamQ streamReass :: Stream -> IORef (Skew RxStreamData) streamRecvQ :: Stream -> RecvStreamQ streamStateRx :: Stream -> IORef StreamState streamStateTx :: Stream -> IORef StreamState streamFlowRx :: Stream -> IORef Flow streamFlowTx :: Stream -> TVar Flow streamConnection :: Stream -> Connection streamId :: Stream -> StreamId streamReass :: IORef (Skew RxStreamData) streamRecvQ :: RecvStreamQ streamStateRx :: IORef StreamState streamStateTx :: IORef StreamState streamFlowRx :: IORef Flow streamFlowTx :: TVar Flow streamConnection :: Connection streamId :: StreamId ..} = STM () -> IO () forall a. STM a -> IO a atomically (STM () -> IO ()) -> (ByteString -> STM ()) -> ByteString -> IO () forall b c a. (b -> c) -> (a -> b) -> a -> c . TQueue ByteString -> ByteString -> STM () forall a. TQueue a -> a -> STM () writeTQueue (RecvStreamQ -> TQueue ByteString recvStreamQ RecvStreamQ streamRecvQ) takeRecvStreamQ :: Stream -> IO ByteString takeRecvStreamQ :: Stream -> IO ByteString takeRecvStreamQ Stream{StreamId TVar Flow IORef (Skew RxStreamData) IORef StreamState IORef Flow Connection RecvStreamQ streamReass :: IORef (Skew RxStreamData) streamRecvQ :: RecvStreamQ streamStateRx :: IORef StreamState streamStateTx :: IORef StreamState streamFlowRx :: IORef Flow streamFlowTx :: TVar Flow streamConnection :: Connection streamId :: StreamId streamReass :: Stream -> IORef (Skew RxStreamData) streamRecvQ :: Stream -> RecvStreamQ streamStateRx :: Stream -> IORef StreamState streamStateTx :: Stream -> IORef StreamState streamFlowRx :: Stream -> IORef Flow streamFlowTx :: Stream -> TVar Flow streamConnection :: Stream -> Connection streamId :: Stream -> StreamId ..} = STM ByteString -> IO ByteString forall a. STM a -> IO a atomically (STM ByteString -> IO ByteString) -> STM ByteString -> IO ByteString forall a b. (a -> b) -> a -> b $ TQueue ByteString -> STM ByteString forall a. TQueue a -> STM a readTQueue (TQueue ByteString -> STM ByteString) -> TQueue ByteString -> STM ByteString forall a b. (a -> b) -> a -> b $ RecvStreamQ -> TQueue ByteString recvStreamQ RecvStreamQ streamRecvQ tryTakeRecvStreamQ :: Stream -> IO (Maybe ByteString) tryTakeRecvStreamQ :: Stream -> IO (Maybe ByteString) tryTakeRecvStreamQ Stream{StreamId TVar Flow IORef (Skew RxStreamData) IORef StreamState IORef Flow Connection RecvStreamQ streamReass :: IORef (Skew RxStreamData) streamRecvQ :: RecvStreamQ streamStateRx :: IORef StreamState streamStateTx :: IORef StreamState streamFlowRx :: IORef Flow streamFlowTx :: TVar Flow streamConnection :: Connection streamId :: StreamId streamReass :: Stream -> IORef (Skew RxStreamData) streamRecvQ :: Stream -> RecvStreamQ streamStateRx :: Stream -> IORef StreamState streamStateTx :: Stream -> IORef StreamState streamFlowRx :: Stream -> IORef Flow streamFlowTx :: Stream -> TVar Flow streamConnection :: Stream -> Connection streamId :: Stream -> StreamId ..} = STM (Maybe ByteString) -> IO (Maybe ByteString) forall a. STM a -> IO a atomically (STM (Maybe ByteString) -> IO (Maybe ByteString)) -> STM (Maybe ByteString) -> IO (Maybe ByteString) forall a b. (a -> b) -> a -> b $ TQueue ByteString -> STM (Maybe ByteString) forall a. TQueue a -> STM (Maybe a) tryReadTQueue (TQueue ByteString -> STM (Maybe ByteString)) -> TQueue ByteString -> STM (Maybe ByteString) forall a b. (a -> b) -> a -> b $ RecvStreamQ -> TQueue ByteString recvStreamQ RecvStreamQ streamRecvQ