module System.Mesos.Raw.SlaveId where
import           System.Mesos.Internal

type SlaveIDPtr = Ptr SlaveID

foreign import ccall unsafe "ext/types.h toSlaveID" c_toSlaveID :: ToID SlaveIDPtr

foreign import ccall unsafe "ext/types.h fromSlaveID" c_fromSlaveID :: FromID SlaveIDPtr

foreign import ccall unsafe "ext/types.h destroySlaveID" c_destroySlaveID :: SlaveIDPtr -> IO ()

instance CPPValue SlaveID where
  marshal x = do
    (strp, l) <- cstring $ slaveIDId' x
    liftIO $ c_toSlaveID strp $ fromIntegral l

  unmarshal p = fmap SlaveID $ do
    ptrPtr <- alloc
    len <- liftIO $ c_fromSlaveID p ptrPtr
    peekCString' (ptrPtr, len)

  destroy = c_destroySlaveID