    -- |
    -- Module      : Data.PEM.Types
    -- License     : BSD-style
    -- Maintainer  : Vincent Hanquez <vincent@snarc.org>
    -- Stability   : experimental
    -- Portability : portable
    --
    module Data.PEM.Types where

    import Data.ByteString (ByteString)
    import Basement.NormalForm

    -- | Represent one PEM section
    --
    -- for now headers are not serialized at all.
    -- this is just available here as a placeholder for a later implementation.
    data PEM = PEM
        { pemName    :: String                 -- ^ the name of the section, found after the dash BEGIN tag.
        , pemHeader  :: [(String, ByteString)] -- ^ optionals key value pair header
        , pemContent :: ByteString             -- ^ binary content of the section
        } deriving (Show,Eq)

    instance NormalForm PEM where
        toNormalForm pem =
            toNormalForm (pemName pem) `seq` nfLbs (pemHeader pem) `seq` pemContent pem `seq` ()
          where
            nfLbs []         = ()
            nfLbs ((s,bs):l) = toNormalForm s `seq` bs `seq` nfLbs l