packages feed

servant-subscriber-0.1.0.0: src/Servant/Subscriber/Backend.hs

-- | A backend for subscriber allows us to query a server and get a response.
-- | We mimick Wai's interface but with 'Request' and 'Response' types that match our needs.
-- | Our only backend right now actually is implemented via the WAI Application interface, see: "Servant.Subscriber.Backend.Wai".
module Servant.Subscriber.Backend where

import qualified Blaze.ByteString.Builder      as B
import           Control.Concurrent.STM        (STM, atomically, retry)
import           Control.Concurrent.STM.TVar
import           Control.Monad                 (void)
import           Data.Aeson
import qualified Data.ByteString               as BS
import qualified Data.CaseInsensitive          as Case
import           Data.IntMap                   (IntMap)
import qualified Data.IntMap                   as IntMap
import           Data.Map                      (Map)
import           Data.Text                     (Text)
import qualified Data.Text.Encoding            as T
import           Data.Time
import           GHC.Generics
import qualified Network.HTTP.Types            as H
import qualified Network.Wai                   as Wai
import qualified Network.Wai.Internal          as Wai
import           Network.WebSockets.Connection as WS
import           Servant.Server

import           Servant.Subscriber.Request
import           Servant.Subscriber.Response

data ResponseReceived = ResponseReceived

type Application = HttpRequest -> (HttpResponse -> IO ResponseReceived) -> IO ResponseReceived

class Backend a where
  requestResource :: a -> Application