module Text.Hakyll.Internal.Template.Template
( Template (..)
, TemplateElement (..)
) where
import Control.Applicative ((<$>))
import Data.Binary (Binary, get, getWord8, put, putWord8)
newtype Template = Template { unTemplate :: [TemplateElement] }
deriving (Show, Eq, Binary)
data TemplateElement = Chunk String
| Identifier String
| EscapeCharacter
deriving (Show, Eq)
instance Binary TemplateElement where
put (Chunk string) = putWord8 0 >> put string
put (Identifier key) = putWord8 1 >> put key
put (EscapeCharacter) = putWord8 2
get = getWord8 >>= \tag ->
case tag of 0 -> Chunk <$> get
1 -> Identifier <$> get
2 -> return EscapeCharacter
_ -> error "Error reading cached template"