{-# language BangPatterns #-}
{-# language DataKinds #-}

module Socket.Stream.Interruptible.Hybrid
  ( sendMutableBytesUnmanagedBytes
  ) where

import Control.Concurrent.STM (TVar)
import Data.Bytes.Types (MutableBytes,UnmanagedBytes)
import GHC.Exts (RealWorld)
import Socket (Interruptibility(Interruptible))
import Socket.Stream (Connection,SendException)

import qualified Socket.Stream.Interruptible.MutableBytes.Addr.Send as MBA

sendMutableBytesUnmanagedBytes ::
     TVar Bool
     -- ^ Interrupt. On 'True', give up and return @'Left' 'SendInterrupted'@.
  -> Connection -- ^ Connection
  -> MutableBytes RealWorld -- ^ First payload
  -> UnmanagedBytes -- ^ Second payload
  -> IO (Either (SendException 'Interruptible) ())
sendMutableBytesUnmanagedBytes = MBA.sendBoth