    {-# LANGUAGE OverloadedStrings #-}

    module Network.Wai.Handler.Warp.HTTP2.EncodeFrame where

    import Data.ByteString (ByteString)
    import Network.HTTP2

    ----------------------------------------------------------------

    goawayFrame :: StreamId -> ErrorCodeId -> ByteString -> ByteString
    goawayFrame sid etype debugmsg = encodeFrame einfo frame
      where
        einfo = encodeInfo id 0
        frame = GoAwayFrame sid etype debugmsg

    resetFrame :: ErrorCodeId -> StreamId -> ByteString
    resetFrame etype sid = encodeFrame einfo frame
      where
        einfo = encodeInfo id sid
        frame = RSTStreamFrame etype

    settingsFrame :: (FrameFlags -> FrameFlags) -> SettingsList -> ByteString
    settingsFrame func alist = encodeFrame einfo $ SettingsFrame alist
      where
        einfo = encodeInfo func 0

    pingFrame :: ByteString -> ByteString
    pingFrame bs = encodeFrame einfo $ PingFrame bs
      where
        einfo = encodeInfo setAck 0

    windowUpdateFrame :: StreamId -> WindowSize -> ByteString
    windowUpdateFrame sid winsiz = encodeFrame einfo $ WindowUpdateFrame winsiz
      where
        einfo = encodeInfo id sid