module System.Mesos.Raw.ExecutorInfo where
import System.Mesos.Internal
import System.Mesos.Raw.CommandInfo
import System.Mesos.Raw.ContainerInfo
import System.Mesos.Raw.ExecutorId
import System.Mesos.Raw.FrameworkId
import System.Mesos.Raw.Resource
type ExecutorInfoPtr = Ptr ExecutorInfo
foreign import ccall unsafe "ext/types.h toExecutorInfo" c_toExecutorInfo
:: ExecutorIDPtr
-> FrameworkIDPtr
-> CommandInfoPtr
-> ContainerInfoPtr
-> Ptr ResourcePtr
-> CInt
-> Ptr CChar
-> CInt
-> Ptr CChar
-> CInt
-> Ptr CChar
-> CInt
-> IO ExecutorInfoPtr
foreign import ccall unsafe "ext/types.h fromExecutorInfo" c_fromExecutorInfo
:: ExecutorInfoPtr
-> Ptr ExecutorIDPtr
-> Ptr FrameworkIDPtr
-> Ptr CommandInfoPtr
-> Ptr ContainerInfoPtr
-> Ptr (Ptr ResourcePtr)
-> Ptr CInt
-> Ptr (Ptr CChar)
-> Ptr CInt
-> Ptr (Ptr CChar)
-> Ptr CInt
-> Ptr (Ptr CChar)
-> Ptr CInt
-> IO ()
foreign import ccall unsafe "ext/types.h destroyExecutorInfo" c_destroyExecutorInfo
:: ExecutorInfoPtr
-> IO ()
instance CPPValue ExecutorInfo where
marshal i = do
eidP <- cppValue $ executorInfoExecutorId i
fidP <- cppValue $ executorInfoFrameworkId i
ciP <- cppValue $ executorInfoCommandInfo i
ctrP <- case executorInfoContainerInfo i of
Nothing -> return nullPtr
Just ctr -> cppValue ctr
rps <- mapM cppValue $ executorInfoResources i
(np, nl) <- maybeCString $ executorInfoName i
(sp, sl) <- maybeCString $ executorInfoSource i
(dp, dl) <- maybeCString $ executorInfoData i
(rs, rLen) <- arrayLen rps
liftIO $ c_toExecutorInfo eidP fidP ciP ctrP rs (fromIntegral rLen) np (fromIntegral nl) sp (fromIntegral sl) dp (fromIntegral dl)
unmarshal ip = do
eidP <- alloc
fidP <- alloc
ciP <- alloc
cntP <- alloc
rpP <- alloc
rpL <- alloc
enP <- alloc
enL <- alloc
esP <- alloc
esL <- alloc
edP <- alloc
edL <- alloc
poke enP nullPtr
poke esP nullPtr
poke edP nullPtr
poke cntP nullPtr
liftIO $ c_fromExecutorInfo ip eidP fidP ciP cntP rpP rpL enP enL esP esL edP edL
eid <- unmarshal =<< peek eidP
fid <- unmarshal =<< peek fidP
ci <- unmarshal =<< peek ciP
cnt <- peekMaybeCPP cntP
rl <- peek rpL
rp <- peek rpP
rps <- peekArray' (rp, fromIntegral rl)
rs <- mapM unmarshal rps
en <- peekMaybeBS enP enL
es <- peekMaybeBS esP esL
ed <- peekMaybeBS edP edL
return $ ExecutorInfo eid fid ci cnt rs en es ed
destroy = c_destroyExecutorInfo
equalExceptDefaults (ExecutorInfo id fid ci cnt rs n s d) (ExecutorInfo id' fid' ci' cnt' rs' n' s' d') =
id == id' && fid == fid' && equalExceptDefaults ci ci' && and (zipWith equalExceptDefaults rs rs') && n == n' && s == s' && d == d' && cnt == cnt'