hs-mesos-0.20.0.0: src/System/Mesos/Raw/Volume.hs
module System.Mesos.Raw.Volume where
import System.Mesos.Internal
type VolumePtr = Ptr Volume
foreign import ccall unsafe "ext/types.h toVolume" c_toVolume
:: Ptr CChar -- ^ container_path
-> CInt -- ^ container_path length
-> Ptr CChar -- ^ host_path
-> CInt -- ^ host_path length
-> CInt -- ^ mode
-> IO VolumePtr
foreign import ccall unsafe "ext/types.h fromVolume" c_fromVolume
:: VolumePtr
-> Ptr (Ptr CChar) -- ^ container_path
-> Ptr CInt -- ^ container_path length
-> Ptr (Ptr CChar) -- ^ host_path
-> Ptr CInt -- ^ host_path length
-> Ptr CInt -- ^ mode
-> IO ()
foreign import ccall unsafe "ext/types.h destroyVolume" c_destroyVolume
:: VolumePtr -> IO ()
instance CPPValue Volume where
marshal v = do
(cp, cl) <- cstring $ volumeContainerPath v
(vp, vl) <- maybeCString $ volumeHostPath v
liftIO $ c_toVolume cp (fromIntegral cl) vp (fromIntegral vl) $ fromIntegral $ fromEnum $ volumeMode v
unmarshal p = do
(cpp, clp) <- arrayPair
(vpp, vlp) <- arrayPair
mp <- alloc
liftIO $ c_fromVolume p cpp clp vpp vlp mp
c <- peekCString (cpp, clp)
v <- peekMaybeCString (vpp, vlp)
m <- fmap (toEnum . fromIntegral) $ peek mp
return $ Volume c v m
destroy = c_destroyVolume