{-# LINE 1 "src/Client/CApi/Types.hsc" #-}
{-# Language ForeignFunctionInterface, RecordWildCards #-}
{-# LINE 2 "src/Client/CApi/Types.hsc" #-}
{-# LINE 15 "src/Client/CApi/Types.hsc" #-}
module Client.CApi.Types
(
FgnExtension(..)
, StartExtension
, StopExtension
, ProcessMessage
, ProcessCommand
, FgnStringLen(..)
, FgnMsg(..)
, FgnCmd(..)
, Dynamic
, runStartExtension
, runStopExtension
, runProcessMessage
, runProcessCommand
, MessageCode(..), normalMessage, errorMessage
, MessageResult(..), passMessage, dropMessage
) where
import Foreign.C
import Foreign.Ptr
import Foreign.Storable
newtype MessageCode = MessageCode CInt deriving Eq
normalMessage :: MessageCode
normalMessage = MessageCode 0
errorMessage :: MessageCode
errorMessage = MessageCode 1
{-# LINE 57 "src/Client/CApi/Types.hsc" #-}
newtype MessageResult = MessageResult CInt deriving Eq
passMessage :: MessageResult
passMessage = MessageResult 0
dropMessage :: MessageResult
dropMessage = MessageResult 1
{-# LINE 64 "src/Client/CApi/Types.hsc" #-}
type StartExtension =
Ptr () ->
CString ->
IO (Ptr ())
type StopExtension =
Ptr () ->
Ptr () ->
IO ()
type ProcessMessage =
Ptr () ->
Ptr () ->
Ptr FgnMsg ->
IO MessageResult
type ProcessCommand =
Ptr () ->
Ptr () ->
Ptr FgnCmd ->
IO ()
type Dynamic a = FunPtr a -> a
foreign import ccall "dynamic" runStartExtension :: Dynamic StartExtension
foreign import ccall "dynamic" runStopExtension :: Dynamic StopExtension
foreign import ccall "dynamic" runProcessMessage :: Dynamic ProcessMessage
foreign import ccall "dynamic" runProcessCommand :: Dynamic ProcessCommand
data FgnExtension = FgnExtension
{ fgnStart :: FunPtr StartExtension
, fgnStop :: FunPtr StopExtension
, fgnMessage :: FunPtr ProcessMessage
, fgnCommand :: FunPtr ProcessCommand
, fgnName :: CString
, fgnMajorVersion, fgnMinorVersion :: CInt
}
instance Storable FgnExtension where
alignment _ = (8)
{-# LINE 115 "src/Client/CApi/Types.hsc" #-}
sizeOf _ = (48)
{-# LINE 116 "src/Client/CApi/Types.hsc" #-}
peek p = FgnExtension
<$> ((\hsc_ptr -> peekByteOff hsc_ptr 16)) p
{-# LINE 118 "src/Client/CApi/Types.hsc" #-}
<*> ((\hsc_ptr -> peekByteOff hsc_ptr 24)) p
{-# LINE 119 "src/Client/CApi/Types.hsc" #-}
<*> ((\hsc_ptr -> peekByteOff hsc_ptr 32)) p
{-# LINE 120 "src/Client/CApi/Types.hsc" #-}
<*> ((\hsc_ptr -> peekByteOff hsc_ptr 40)) p
{-# LINE 121 "src/Client/CApi/Types.hsc" #-}
<*> ((\hsc_ptr -> peekByteOff hsc_ptr 0)) p
{-# LINE 122 "src/Client/CApi/Types.hsc" #-}
<*> ((\hsc_ptr -> peekByteOff hsc_ptr 8)) p
{-# LINE 123 "src/Client/CApi/Types.hsc" #-}
<*> ((\hsc_ptr -> peekByteOff hsc_ptr 12)) p
{-# LINE 124 "src/Client/CApi/Types.hsc" #-}
poke p FgnExtension{..} =
do ((\hsc_ptr -> pokeByteOff hsc_ptr 16)) p fgnStart
{-# LINE 126 "src/Client/CApi/Types.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 24)) p fgnStop
{-# LINE 127 "src/Client/CApi/Types.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 32)) p fgnMessage
{-# LINE 128 "src/Client/CApi/Types.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 40)) p fgnCommand
{-# LINE 129 "src/Client/CApi/Types.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 0)) p fgnName
{-# LINE 130 "src/Client/CApi/Types.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 8)) p fgnMajorVersion
{-# LINE 131 "src/Client/CApi/Types.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 12)) p fgnMinorVersion
{-# LINE 132 "src/Client/CApi/Types.hsc" #-}
data FgnMsg = FgnMsg
{ fmNetwork :: FgnStringLen
, fmPrefixNick :: FgnStringLen
, fmPrefixUser :: FgnStringLen
, fmPrefixHost :: FgnStringLen
, fmCommand :: FgnStringLen
, fmParams :: Ptr FgnStringLen
, fmParamN :: CSize
, fmTagKeys :: Ptr FgnStringLen
, fmTagVals :: Ptr FgnStringLen
, fmTagN :: CSize
}
instance Storable FgnMsg where
alignment _ = (8)
{-# LINE 151 "src/Client/CApi/Types.hsc" #-}
sizeOf _ = (120)
{-# LINE 152 "src/Client/CApi/Types.hsc" #-}
peek p = FgnMsg
<$> ((\hsc_ptr -> peekByteOff hsc_ptr 0)) p
{-# LINE 154 "src/Client/CApi/Types.hsc" #-}
<*> ((\hsc_ptr -> peekByteOff hsc_ptr 16)) p
{-# LINE 155 "src/Client/CApi/Types.hsc" #-}
<*> ((\hsc_ptr -> peekByteOff hsc_ptr 32)) p
{-# LINE 156 "src/Client/CApi/Types.hsc" #-}
<*> ((\hsc_ptr -> peekByteOff hsc_ptr 48)) p
{-# LINE 157 "src/Client/CApi/Types.hsc" #-}
<*> ((\hsc_ptr -> peekByteOff hsc_ptr 64)) p
{-# LINE 158 "src/Client/CApi/Types.hsc" #-}
<*> ((\hsc_ptr -> peekByteOff hsc_ptr 80)) p
{-# LINE 159 "src/Client/CApi/Types.hsc" #-}
<*> ((\hsc_ptr -> peekByteOff hsc_ptr 88)) p
{-# LINE 160 "src/Client/CApi/Types.hsc" #-}
<*> ((\hsc_ptr -> peekByteOff hsc_ptr 96)) p
{-# LINE 161 "src/Client/CApi/Types.hsc" #-}
<*> ((\hsc_ptr -> peekByteOff hsc_ptr 104)) p
{-# LINE 162 "src/Client/CApi/Types.hsc" #-}
<*> ((\hsc_ptr -> peekByteOff hsc_ptr 112)) p
{-# LINE 163 "src/Client/CApi/Types.hsc" #-}
poke p FgnMsg{..} =
do ((\hsc_ptr -> pokeByteOff hsc_ptr 0)) p fmNetwork
{-# LINE 166 "src/Client/CApi/Types.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 16)) p fmPrefixNick
{-# LINE 167 "src/Client/CApi/Types.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 32)) p fmPrefixUser
{-# LINE 168 "src/Client/CApi/Types.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 48)) p fmPrefixHost
{-# LINE 169 "src/Client/CApi/Types.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 64)) p fmCommand
{-# LINE 170 "src/Client/CApi/Types.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 80)) p fmParams
{-# LINE 171 "src/Client/CApi/Types.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 88)) p fmParamN
{-# LINE 172 "src/Client/CApi/Types.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 96)) p fmTagKeys
{-# LINE 173 "src/Client/CApi/Types.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 104)) p fmTagVals
{-# LINE 174 "src/Client/CApi/Types.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 112)) p fmTagN
{-# LINE 175 "src/Client/CApi/Types.hsc" #-}
data FgnCmd = FgnCmd
{ fcParams :: Ptr FgnStringLen
, fcParamN :: CSize
}
instance Storable FgnCmd where
alignment _ = (8)
{-# LINE 186 "src/Client/CApi/Types.hsc" #-}
sizeOf _ = (16)
{-# LINE 187 "src/Client/CApi/Types.hsc" #-}
peek p = FgnCmd
<$> ((\hsc_ptr -> peekByteOff hsc_ptr 0)) p
{-# LINE 189 "src/Client/CApi/Types.hsc" #-}
<*> ((\hsc_ptr -> peekByteOff hsc_ptr 8)) p
{-# LINE 190 "src/Client/CApi/Types.hsc" #-}
poke p FgnCmd{..} =
do ((\hsc_ptr -> pokeByteOff hsc_ptr 0)) p fcParams
{-# LINE 193 "src/Client/CApi/Types.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 8)) p fcParamN
{-# LINE 194 "src/Client/CApi/Types.hsc" #-}
data FgnStringLen = FgnStringLen !CString !CSize
instance Storable FgnStringLen where
alignment _ = (8)
{-# LINE 202 "src/Client/CApi/Types.hsc" #-}
sizeOf _ = (16)
{-# LINE 203 "src/Client/CApi/Types.hsc" #-}
peek p = FgnStringLen
<$> ((\hsc_ptr -> peekByteOff hsc_ptr 0)) p
{-# LINE 205 "src/Client/CApi/Types.hsc" #-}
<*> ((\hsc_ptr -> peekByteOff hsc_ptr 8)) p
{-# LINE 206 "src/Client/CApi/Types.hsc" #-}
poke p (FgnStringLen x y) =
do ((\hsc_ptr -> pokeByteOff hsc_ptr 0)) p x
{-# LINE 208 "src/Client/CApi/Types.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 8)) p y
{-# LINE 209 "src/Client/CApi/Types.hsc" #-}