packages feed

helics-0.3.0: common/Network/Helics/Types.hs

{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE CPP #-}

module Network.Helics.Types where

import Control.Exception

import Foreign.C.Types
import Foreign.C.String

import Data.Typeable
import Data.Default.Class
import qualified Data.ByteString as S

-- common
newtype ReturnCode = ReturnCode CInt deriving (Eq, Typeable, Show)
instance Exception ReturnCode

-- client
type StatusCallback = CInt -> IO ()
newtype StatusCode = StatusCode CInt deriving (Eq, Show)

-- transaction
newtype TransactionId = TransactionId CLong

newtype SegmentId = SegmentId CLong
type SqlObfuscator = CString -> IO CString

-- main
data HelicsConfig = HelicsConfig
    { licenseKey      :: S.ByteString
    , appName         :: S.ByteString
    , language        :: S.ByteString
    , languageVersion :: S.ByteString
    , statusCallback  :: Maybe (StatusCode -> IO ())
    }

instance Default HelicsConfig where
    def = HelicsConfig
        (error "license key is not set.")
        "App"
        "Haskell"
        COMPILER_VERSION
        Nothing

data TransactionType
    = Default
    | Web   S.ByteString
    | Other S.ByteString

instance Default TransactionType where
    def = Default

data Operation
    = SELECT
    | INSERT
    | UPDATE
    | DELETE
    deriving (Show)

data DatastoreSegment = DatastoreSegment
    { table              :: S.ByteString
    , operation          :: Operation
    , sql                :: S.ByteString
    , sqlTraceRollupName :: S.ByteString
    , sqlObFuscator      :: Maybe (S.ByteString -> S.ByteString)
    }
instance Default DatastoreSegment where
    def = DatastoreSegment "unknown" SELECT "" "unknown" Nothing