hs-mesos-0.20.0.0: src/System/Mesos/Raw/Offer.hs
module System.Mesos.Raw.Offer where
import System.Mesos.Internal
import System.Mesos.Raw.Attribute
import System.Mesos.Raw.ExecutorId
import System.Mesos.Raw.FrameworkId
import System.Mesos.Raw.OfferId
import System.Mesos.Raw.Resource
import System.Mesos.Raw.SlaveId
type OfferPtr = Ptr Offer
foreign import ccall unsafe "ext/types.h toOffer" c_toOffer
:: OfferIDPtr
-> FrameworkIDPtr
-> SlaveIDPtr
-> Ptr CChar
-> CInt
-> Ptr ResourcePtr
-> CInt
-> Ptr AttributePtr
-> CInt
-> Ptr ExecutorIDPtr
-> CInt
-> IO OfferPtr
foreign import ccall unsafe "ext/types.h fromOffer" c_fromOffer
:: OfferPtr
-> Ptr OfferIDPtr
-> Ptr FrameworkIDPtr
-> Ptr SlaveIDPtr
-> Ptr (Ptr CChar)
-> Ptr CInt
-> Ptr (Ptr ResourcePtr)
-> Ptr CInt
-> Ptr (Ptr AttributePtr)
-> Ptr CInt
-> Ptr (Ptr ExecutorIDPtr)
-> Ptr CInt
-> IO ()
foreign import ccall unsafe "ext/types.h destroyOffer" c_destroyOffer
:: OfferPtr
-> IO ()
instance CPPValue Offer where
marshal (Offer oid fid sid hn rs as es) = do
oidP <- cppValue oid
fidP <- cppValue fid
sidP <- cppValue sid
rPs <- mapM cppValue rs
aPs <- mapM (cppValue . uncurry Attribute) as
ePs <- mapM cppValue es
(hnp, hnl) <- cstring hn
(rPP, rLen) <- arrayLen rPs
(aPP, aLen) <- arrayLen aPs
(ePP, eLen) <- arrayLen ePs
liftIO $ c_toOffer oidP fidP sidP hnp (fromIntegral hnl) rPP (fromIntegral rLen) aPP (fromIntegral aLen) ePP (fromIntegral eLen)
unmarshal op = do
oidPP <- alloc
fidPP <- alloc
sidPP <- alloc
hnPP <- alloc
hLenP <- alloc
rPPP <- alloc
rLenP <- alloc
aPPP <- alloc
aLenP <- alloc
ePPP <- alloc
eLenP <- alloc
liftIO $ c_fromOffer op oidPP fidPP sidPP hnPP hLenP rPPP rLenP aPPP aLenP ePPP eLenP
oid <- unmarshal =<< peek oidPP
fid <- unmarshal =<< peek fidPP
sid <- unmarshal =<< peek sidPP
hn <- peekCString (hnPP, hLenP)
rPP <- peek rPPP
rs <- mapM unmarshal =<< peekArray (rPP, rLenP)
aPP <- peek aPPP
as <- mapM unmarshal =<< peekArray (aPP, aLenP)
ePP <- peek ePPP
es <- mapM unmarshal =<< peekArray (ePP, eLenP)
return $ Offer oid fid sid hn rs (map (\(Attribute k v) -> (k, v)) as) es
destroy = c_destroyOffer
equalExceptDefaults (Offer oid fid sid hn rs as es) (Offer oid' fid' sid' hn' rs' as' es') =
oid == oid' && fid == fid' && sid == sid' && hn == hn' &&
and (zipWith equalExceptDefaults rs rs') &&
and (zipWith (\l r -> equalExceptDefaults (uncurry Attribute l) (uncurry Attribute r)) as as') &&
es == es'