-- |
-- 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