buffet-0.2.0: src/Buffet/Document/TemplateContext.hs
module Buffet.Document.TemplateContext
( get
) where
import qualified Buffet.Document.TemplateBuffet as TemplateBuffet
import qualified Buffet.Ir.Ir as Ir
import qualified Data.Aeson as Aeson
import qualified Data.Bifunctor as Bifunctor
import qualified Data.HashMap.Strict as HashMap
import qualified Data.Text as T
import Prelude (($), (.), fmap)
get :: Ir.Buffet -> Aeson.Value
get = escapeKeysForMustache . Aeson.toJSON . TemplateBuffet.get
escapeKeysForMustache :: Aeson.Value -> Aeson.Value
escapeKeysForMustache = mapKeys $ T.replace (T.pack ".") (T.pack "_")
mapKeys :: (T.Text -> T.Text) -> Aeson.Value -> Aeson.Value
mapKeys function (Aeson.Array array) =
Aeson.Array $ fmap (mapKeys function) array
mapKeys function (Aeson.Object object) =
Aeson.Object .
HashMap.fromList . fmap (Bifunctor.bimap function $ mapKeys function) $
HashMap.toList object
mapKeys _ value = value