module System.Mesos.Raw.StdString where import System.Mesos.Internal newtype StdString = StdString { fromStdString :: ByteString } type StdStringPtr = Ptr StdString foreign import ccall unsafe "ext/types.h toStdString" c_toStdString :: Ptr CChar -> CInt -> IO StdStringPtr foreign import ccall unsafe "ext/types.h fromStdString" c_fromStdString :: StdStringPtr -> Ptr (Ptr CChar) -> Ptr CInt -> IO () foreign import ccall unsafe "ext/types.h destroyStdString" c_destroyStdString :: StdStringPtr -> IO () instance CPPValue StdString where marshal (StdString bs) = do (sp, sl) <- cstring bs liftIO $ c_toStdString sp $ fromIntegral sl unmarshal p = do spp <- alloc slp <- alloc liftIO $ c_fromStdString p spp slp StdString <$> peekCString (spp, slp) destroy = c_destroyStdString