lio-0.9.0.0: LIO/DCLabel/Serialize.hs
{-# LANGUAGE Trustworthy #-}
{-# LANGUAGE StandaloneDeriving,
GeneralizedNewtypeDeriving #-}
{- | This module provides instances for binary serialization of
'DCLabel's. Specifically, we provide insgtances for @cereal@\'s
@Data.Serialize@. -}
module LIO.DCLabel.Serialize () where
import LIO.DCLabel.Core
import Data.Serialize
import Control.Monad
deriving instance Serialize Principal
deriving instance Serialize Clause
-- | Serialize components by converting them to maybe's
instance Serialize Component where
put c = put . dcToMaybe $! c
where dcToMaybe DCFalse = Nothing
dcToMaybe (DCFormula f) = Just f
get = dcFromMaybe `liftM` get
where dcFromMaybe Nothing = dcFalse
dcFromMaybe (Just f) = dcFormula f
-- | Serialize labels by converting them to pairs of components.
instance Serialize DCLabel where
put l = put (dcSecrecy l, dcIntegrity l)
get = uncurry dcLabelNoReduce `liftM` get