packages feed

greskell-websocket-1.0.0.1: src/Network/Greskell/WebSocket/Connection/Settings.hs

-- |
-- Module: Network.Greskell.WebSocket.Connection.Settings
-- Description: Settings for making Connection
-- Maintainer: Toshio Ito <debug.ito@gmail.com>
--
--
module Network.Greskell.WebSocket.Connection.Settings
    ( -- * Settings
      Settings
    , defSettings
    , defJSONSettings
      -- ** accessor functions
    , codec
    , endpointPath
    , onGeneralException
    , responseTimeout
    , concurrency
    , requestQueueSize
    ) where

import           Data.Greskell.GraphSON                     (FromGraphSON)

import           Network.Greskell.WebSocket.Codec           (Codec)
import           Network.Greskell.WebSocket.Codec.JSON      (jsonCodec)
import           Network.Greskell.WebSocket.Connection.Type (GeneralException)

import           System.IO                                  (hPutStrLn, stderr)

-- | 'Settings' for making connection to Gremlin Server.
--
-- You can get the default 'Settings' by 'defSettings' function, and
-- customize its fields by accessor functions.
--
-- Type @s@ is the body of Response.
data Settings s
  = Settings
      { codec              :: !(Codec s)
        -- ^ codec for the connection.
      , endpointPath       :: !String
        -- ^ Path of the WebSocket endpoint. Default: \"/gremlin\"
      , onGeneralException :: !(GeneralException -> IO ())
        -- ^ An exception handler for 'GeneralException'. This exception
        -- is not fatal, so the connection survives after this handler is
        -- called. You don't have to re-throw the exception. Default:
        -- print the exception to stderr.
      , responseTimeout    :: !Int
        -- ^ Time out (in seconds) for responses. It is the maximum time
        -- for which the connection waits for a response to complete after
        -- it sends a request. If the response consists of more than one
        -- ResponseMessages, the timeout applies to the last of the
        -- ResponseMessages. Default: 60
      , concurrency        :: !Int
        -- ^ Maximum concurrent requests the connection can make to the
        -- server. If the client tries to make more concurrent requests
        -- than this value, later requests are queued in the connection or
        -- the client may be blocked. Default: 4
      , requestQueueSize   :: !Int
        -- ^ Size of the internal queue of requests. Usually you don't
        -- need to customize the field. See also 'concurrency'. Default:
        -- 8.
      }

defSettings :: Codec s -> Settings s
defSettings c = Settings
                { codec = c,
                  endpointPath = "/gremlin",
                  onGeneralException = \e -> hPutStrLn stderr $ show e,
                  responseTimeout = 60,
                  concurrency = 4,
                  requestQueueSize = 8
                }

-- | 'defSettings' with 'jsonCodec'.
defJSONSettings :: FromGraphSON s => Settings s
defJSONSettings = defSettings jsonCodec