module System.Mesos.Raw.Attribute where
import System.Mesos.Internal
import System.Mesos.Raw.Value
type AttributePtr = Ptr Attribute
data Attribute = Attribute
{ attributeName :: !ByteString
, attributeValue :: !Value
} deriving (Show, Eq)
toAttribute :: (ByteString, Value) -> Attribute
toAttribute (k, v) = Attribute k v
fromAttribute :: Attribute -> (ByteString, Value)
fromAttribute (Attribute k v) = (k, v)
foreign import ccall unsafe "ext/types.h toAttribute" c_toAttribute
:: Ptr CChar
-> CInt
-> ValuePtr
-> IO AttributePtr
foreign import ccall unsafe "ext/types.h fromAttribute" c_fromAttribute
:: AttributePtr
-> Ptr (Ptr CChar)
-> Ptr CInt
-> Ptr ValuePtr
-> IO ()
foreign import ccall unsafe "ext/types.h destroyAttribute" c_destroyAttribute
:: AttributePtr
-> IO ()
instance CPPValue Attribute where
marshal a = do
(np, nl) <- cstring $ attributeName a
vp <- cppValue $ attributeValue a
p <- liftIO $ c_toAttribute np (fromIntegral nl) vp
return p
unmarshal ap = do
nps@(npp, nlp) <- arrayPair
vpp <- alloc
liftIO $ c_fromAttribute ap npp nlp vpp
vp <- peek vpp
n <- peekCString nps
v <- peekCPP vp
return $ Attribute n v
destroy = c_destroyAttribute