{-# LANGUAGE RecordWildCards #-} module Network.QUIC.Stream.Queue where import Data.ByteString (ByteString) import UnliftIO.STM import Network.QUIC.Stream.Types putRecvStreamQ :: Stream -> ByteString -> IO () putRecvStreamQ :: Stream -> ByteString -> IO () putRecvStreamQ Stream{StreamId TVar TxFlow IORef RxFlow IORef (Skew RxStreamData) IORef StreamState MVar () Connection RecvStreamQ streamSyncFinTx :: Stream -> MVar () streamReass :: Stream -> IORef (Skew RxStreamData) streamRecvQ :: Stream -> RecvStreamQ streamStateRx :: Stream -> IORef StreamState streamStateTx :: Stream -> IORef StreamState streamFlowRx :: Stream -> IORef RxFlow streamFlowTx :: Stream -> TVar TxFlow streamConnection :: Stream -> Connection streamId :: Stream -> StreamId streamSyncFinTx :: MVar () streamReass :: IORef (Skew RxStreamData) streamRecvQ :: RecvStreamQ streamStateRx :: IORef StreamState streamStateTx :: IORef StreamState streamFlowRx :: IORef RxFlow streamFlowTx :: TVar TxFlow streamConnection :: Connection streamId :: StreamId ..} = forall (m :: * -> *) a. MonadIO m => STM a -> m a atomically forall b c a. (b -> c) -> (a -> b) -> a -> c . 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 TxFlow IORef RxFlow IORef (Skew RxStreamData) IORef StreamState MVar () Connection RecvStreamQ streamSyncFinTx :: MVar () streamReass :: IORef (Skew RxStreamData) streamRecvQ :: RecvStreamQ streamStateRx :: IORef StreamState streamStateTx :: IORef StreamState streamFlowRx :: IORef RxFlow streamFlowTx :: TVar TxFlow streamConnection :: Connection streamId :: StreamId streamSyncFinTx :: Stream -> MVar () streamReass :: Stream -> IORef (Skew RxStreamData) streamRecvQ :: Stream -> RecvStreamQ streamStateRx :: Stream -> IORef StreamState streamStateTx :: Stream -> IORef StreamState streamFlowRx :: Stream -> IORef RxFlow streamFlowTx :: Stream -> TVar TxFlow streamConnection :: Stream -> Connection streamId :: Stream -> StreamId ..} = forall (m :: * -> *) a. MonadIO m => STM a -> m a atomically forall a b. (a -> b) -> a -> b $ forall a. TQueue a -> STM a readTQueue 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 TxFlow IORef RxFlow IORef (Skew RxStreamData) IORef StreamState MVar () Connection RecvStreamQ streamSyncFinTx :: MVar () streamReass :: IORef (Skew RxStreamData) streamRecvQ :: RecvStreamQ streamStateRx :: IORef StreamState streamStateTx :: IORef StreamState streamFlowRx :: IORef RxFlow streamFlowTx :: TVar TxFlow streamConnection :: Connection streamId :: StreamId streamSyncFinTx :: Stream -> MVar () streamReass :: Stream -> IORef (Skew RxStreamData) streamRecvQ :: Stream -> RecvStreamQ streamStateRx :: Stream -> IORef StreamState streamStateTx :: Stream -> IORef StreamState streamFlowRx :: Stream -> IORef RxFlow streamFlowTx :: Stream -> TVar TxFlow streamConnection :: Stream -> Connection streamId :: Stream -> StreamId ..} = forall (m :: * -> *) a. MonadIO m => STM a -> m a atomically forall a b. (a -> b) -> a -> b $ forall a. TQueue a -> STM (Maybe a) tryReadTQueue forall a b. (a -> b) -> a -> b $ RecvStreamQ -> TQueue ByteString recvStreamQ RecvStreamQ streamRecvQ