{-# LANGUAGE PatternSynonyms #-}

-- | This main module provides APIs for QUIC.
--
-- The -threaded option must be specified to GHC to use this library.
module Network.QUIC (
  -- * Connection
    Connection
  , abortConnection
  -- * Stream
  , Stream
  , StreamId
  , streamId
  -- ** Category
  , isClientInitiatedBidirectional
  , isServerInitiatedBidirectional
  , isClientInitiatedUnidirectional
  , isServerInitiatedUnidirectional
  -- ** Opening
  , stream
  , unidirectionalStream
  , acceptStream
  -- ** Closing
  , closeStream
  , shutdownStream
  , resetStream
  , stopStream
  -- * IO
  , recvStream
  , sendStream
  , sendStreamMany
  -- * Information
  , ConnectionInfo(..)
  , getConnectionInfo
  -- * Statistics
  , ConnectionStats(..)
  , getConnectionStats
  -- * Synchronization
  , wait0RTTReady
  , wait1RTTReady
  , waitEstablished
  -- * Exceptions and Errors
  , QUICException(..)
  , TransportError(.., NoError, InternalError, ConnectionRefused, FlowControlError, StreamLimitError, StreamStateError, FinalSizeError, FrameEncodingError, TransportParameterError, ConnectionIdLimitError, ProtocolViolation, InvalidToken, ApplicationError, CryptoBufferExceeded, KeyUpdateError, AeadLimitReached, NoViablePath)
  , cryptoError
  , ApplicationProtocolError(..)
  ) where

import Network.QUIC.Connection
import Network.QUIC.IO
import Network.QUIC.Info
import Network.QUIC.Stream
import Network.QUIC.Types