{-# 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 MVar () TVar TxFlow IORef RxFlow IORef (Skew RxStreamData) IORef StreamState Connection RecvStreamQ streamId :: StreamId streamConnection :: Connection streamFlowTx :: TVar TxFlow streamFlowRx :: IORef RxFlow streamStateTx :: IORef StreamState streamStateRx :: IORef StreamState streamRecvQ :: RecvStreamQ streamReass :: IORef (Skew RxStreamData) streamSyncFinTx :: MVar () streamId :: Stream -> StreamId streamConnection :: Stream -> Connection streamFlowTx :: Stream -> TVar TxFlow streamFlowRx :: Stream -> IORef RxFlow streamStateTx :: Stream -> IORef StreamState streamStateRx :: Stream -> IORef StreamState streamRecvQ :: Stream -> RecvStreamQ streamReass :: Stream -> IORef (Skew RxStreamData) streamSyncFinTx :: Stream -> MVar () ..} = STM () -> IO () forall (m :: * -> *) a. MonadIO m => STM a -> m 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 MVar () TVar TxFlow IORef RxFlow IORef (Skew RxStreamData) IORef StreamState Connection RecvStreamQ streamId :: Stream -> StreamId streamConnection :: Stream -> Connection streamFlowTx :: Stream -> TVar TxFlow streamFlowRx :: Stream -> IORef RxFlow streamStateTx :: Stream -> IORef StreamState streamStateRx :: Stream -> IORef StreamState streamRecvQ :: Stream -> RecvStreamQ streamReass :: Stream -> IORef (Skew RxStreamData) streamSyncFinTx :: Stream -> MVar () streamId :: StreamId streamConnection :: Connection streamFlowTx :: TVar TxFlow streamFlowRx :: IORef RxFlow streamStateTx :: IORef StreamState streamStateRx :: IORef StreamState streamRecvQ :: RecvStreamQ streamReass :: IORef (Skew RxStreamData) streamSyncFinTx :: MVar () ..} = STM ByteString -> IO ByteString forall (m :: * -> *) a. MonadIO m => STM a -> m 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 MVar () TVar TxFlow IORef RxFlow IORef (Skew RxStreamData) IORef StreamState Connection RecvStreamQ streamId :: Stream -> StreamId streamConnection :: Stream -> Connection streamFlowTx :: Stream -> TVar TxFlow streamFlowRx :: Stream -> IORef RxFlow streamStateTx :: Stream -> IORef StreamState streamStateRx :: Stream -> IORef StreamState streamRecvQ :: Stream -> RecvStreamQ streamReass :: Stream -> IORef (Skew RxStreamData) streamSyncFinTx :: Stream -> MVar () streamId :: StreamId streamConnection :: Connection streamFlowTx :: TVar TxFlow streamFlowRx :: IORef RxFlow streamStateTx :: IORef StreamState streamStateRx :: IORef StreamState streamRecvQ :: RecvStreamQ streamReass :: IORef (Skew RxStreamData) streamSyncFinTx :: MVar () ..} = STM (Maybe ByteString) -> IO (Maybe ByteString) forall (m :: * -> *) a. MonadIO m => STM a -> m 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