module System.Mesos.Raw.Filters where import System.Mesos.Internal type FiltersPtr = Ptr Filters foreign import ccall unsafe "ext/types.h toFilters" c_toFilters :: Ptr CDouble -> IO FiltersPtr foreign import ccall unsafe "ext/types.h fromFilters" c_fromFilters :: FiltersPtr -> Ptr CBool -> Ptr CDouble -> IO () foreign import ccall unsafe "ext/types.h destroyFilters" c_destroyFilters :: FiltersPtr -> IO () instance CPPValue Filters where marshal f = case filtersRefuseSeconds f of Nothing -> liftIO $ c_toFilters nullPtr Just s -> do sp <- alloc poke sp (CDouble s) liftIO $ c_toFilters sp unmarshal fp = do rsc <- alloc rsp <- alloc liftIO $ c_fromFilters fp rsc rsp ms <- peekMaybePrim rsp rsc return $ Filters $ fmap (\(CDouble d) -> d) ms destroy = c_destroyFilters equalExceptDefaults (Filters f) (Filters f') = defEq 5.0 f f'