hs-mesos-0.20.0.0: src/System/Mesos/Raw/ResourceUsage.hs
module System.Mesos.Raw.ResourceUsage where
import System.Mesos.Internal
import System.Mesos.Raw.ExecutorId
import System.Mesos.Raw.FrameworkId
import System.Mesos.Raw.ResourceStatistics
import System.Mesos.Raw.SlaveId
import System.Mesos.Raw.TaskId
type ResourceUsagePtr = Ptr ResourceUsage
foreign import ccall unsafe "ext/types.h toResourceUsage" c_toResourceUsage
:: SlaveIDPtr
-> FrameworkIDPtr
-> ExecutorIDPtr
-> Ptr CChar
-> CInt
-> TaskIDPtr
-> ResourceStatisticsPtr
-> IO ResourceUsagePtr
foreign import ccall unsafe "ext/types.h fromResourceUsage" c_fromResourceUsage
:: ResourceUsagePtr
-> Ptr SlaveIDPtr
-> Ptr FrameworkIDPtr
-> Ptr ExecutorIDPtr
-> Ptr (Ptr CChar)
-> Ptr CInt
-> Ptr TaskIDPtr
-> Ptr ResourceStatisticsPtr
-> IO ()
foreign import ccall unsafe "ext/types.h destroyResourceUsage" c_destroyResourceUsage
:: ResourceUsagePtr
-> IO ()
instance CPPValue ResourceUsage where
marshal (ResourceUsage sid fid eid en tid rs) = do
sidP <- cppValue sid
fidP <- cppValue fid
eidP <- maybe (return nullPtr) cppValue eid
tidP <- maybe (return nullPtr) cppValue tid
rsP <- maybe (return nullPtr) cppValue rs
(enP, enL) <- maybeCString en
liftIO $ c_toResourceUsage sidP fidP eidP enP (fromIntegral enL) tidP rsP
unmarshal up = do
sidPP <- alloc
fidPP <- alloc
eidPP <- alloc
enPP <- alloc
enLP <- alloc
tidPP <- alloc
rsPP <- alloc
poke eidPP nullPtr
poke enPP nullPtr
poke tidPP nullPtr
poke rsPP nullPtr
liftIO $ c_fromResourceUsage up sidPP fidPP eidPP enPP enLP tidPP rsPP
sid <- unmarshal =<< peek sidPP
fid <- unmarshal =<< peek fidPP
eidP <- peek eidPP
eid <- if eidP == nullPtr
then return Nothing
else Just <$> unmarshal eidP
en <- peekMaybeBS enPP enLP
tidP <- peek tidPP
tid <- if tidP == nullPtr
then return Nothing
else Just <$> unmarshal tidP
rsP <- peek rsPP
rs <- if rsP == nullPtr
then return Nothing
else Just <$> unmarshal rsP
return $ ResourceUsage sid fid eid en tid rs
destroy = c_destroyResourceUsage