{-# LANGUAGE OverloadedStrings #-} module System.Mesos.Raw.FrameworkInfo where import System.Mesos.Internal import System.Mesos.Raw.FrameworkId type FrameworkInfoPtr = Ptr FrameworkInfo foreign import ccall "ext/types.h toFrameworkInfo" c_toFrameworkInfo :: Ptr CChar -> CInt -> Ptr CChar -> CInt -> Ptr FrameworkIDPtr -> Ptr CDouble -> Ptr CBool -> Ptr CChar -> CInt -> Ptr CChar -> CInt -> Ptr CChar -> CInt -> IO FrameworkInfoPtr foreign import ccall "ext/types.h fromFrameworkInfo" c_fromFrameworkInfo :: FrameworkInfoPtr -> Ptr (Ptr CChar) -> Ptr CInt -> Ptr (Ptr CChar) -> Ptr CInt -> Ptr FrameworkIDPtr -> Ptr CBool -> Ptr CDouble -> Ptr CBool -> Ptr CBool -> Ptr (Ptr CChar) -> Ptr CInt -> Ptr (Ptr CChar) -> Ptr CInt -> Ptr (Ptr CChar) -> Ptr CInt -> IO () foreign import ccall "ext/types.h destroyFrameworkInfo" c_destroyFrameworkInfo :: FrameworkInfoPtr -> IO () instance CPPValue FrameworkInfo where marshal fi = do (up, ul) <- cstring $ frameworkInfoUser fi (np, nl) <- cstring $ frameworkInfoName fi (rp, rl) <- maybeCString $ frameworkInfoRole fi (hp, hl) <- maybeCString $ frameworkInfoHostname fi (pp, pl) <- maybeCString $ frameworkInfoPrincipal fi fp' <- allocMaybe $ fmap CDouble $ frameworkInfoFailoverTimeout fi cp' <- allocMaybe $ fmap toCBool $ frameworkInfoCheckpoint fi let fidFun f = case frameworkInfoId' fi of Nothing -> f nullPtr Just r -> do p <- alloc fidp <- cppValue r poke p fidp f p fidFun $ \fidp -> liftIO $ c_toFrameworkInfo up (fromIntegral ul) np (fromIntegral nl) fidp fp' cp' rp (fromIntegral rl) hp (fromIntegral hl) pp (fromIntegral pl) unmarshal fp = do (up, ul) <- arrayPair (np, nl) <- arrayPair idp <- alloc tps <- alloc tp <- alloc cps <- alloc cp <- alloc (rp, rl) <- arrayPair (hp, hl) <- arrayPair (pp, pl) <- arrayPair poke up nullPtr poke ul 0 poke np nullPtr poke nl 0 poke idp nullPtr poke rp nullPtr poke rl 0 poke hp nullPtr poke hl 0 poke pp nullPtr poke pl 0 liftIO $ c_fromFrameworkInfo fp up ul np nl idp tps tp cps cp rp rl hp hl pp pl ubs <- peekCString (up, ul) nbs <- peekCString (np, nl) mid <- do midp <- peek idp if midp == nullPtr then return Nothing else fmap Just $ unmarshal midp mt <- fmap (fmap (\(CDouble d) -> d)) $ peekMaybePrim tp tps mc <- fmap (fmap (== 1)) $ peekMaybePrim cp cps mr <- peekMaybeBS rp rl mh <- peekMaybeBS hp hl mp <- peekMaybeBS pp pl return $ FrameworkInfo ubs nbs mid mt mc mr mh mp destroy = c_destroyFrameworkInfo equalExceptDefaults (FrameworkInfo u n i ft cp r hn p) (FrameworkInfo u' n' i' ft' cp' r' hn' p') = u == u' && n == n' && i == i' && defEq 0 ft ft' && defEq False cp cp' && defEq "*" r r' && hn == hn' && p == p'