module System.Mesos.Raw.FrameworkId where
import           Control.Lens
import           System.Mesos.Lens
import           System.Mesos.Internal

type FrameworkIDPtr = Ptr FrameworkID

foreign import ccall unsafe "ext/types.h toFrameworkID" c_toFrameworkID :: ToID FrameworkIDPtr

foreign import ccall unsafe "ext/types.h fromFrameworkID" c_fromFrameworkID :: FromID FrameworkIDPtr

foreign import ccall unsafe "ext/types.h destroyFrameworkID" c_destroyFrameworkID :: FrameworkIDPtr -> IO ()

instance CPPValue FrameworkID where
  marshal x = do
    (strp, l) <- cstring (x^.id')
    liftIO $ c_toFrameworkID strp (fromIntegral l)

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

  destroy = c_destroyFrameworkID