1 {-# LANGUAGE OverloadedStrings #-} 2 module Databrary.Web.Messages 3 ( generateMessagesJS 4 ) where 5 6 import Control.Monad.IO.Class (liftIO) 7 import qualified Data.Aeson.Encoding as JSON 8 import qualified Data.ByteString.Builder as BSB 9 import System.IO (withBinaryFile, IOMode(WriteMode), hPutStr) 10 11 import qualified Databrary.JSON as JSON 12 import Databrary.Service.Messages 13 import Databrary.Files 14 import Databrary.Web 15 import Databrary.Web.Types 16 import Databrary.Web.Generate 17 18 generateMessagesJS :: WebGenerator 19 generateMessagesJS = \fo@(f, _) -> do 20 mf <- liftIO messagesFile 21 mfRawFilePath <- liftIO $ rawFilePath mf 22 fp <- liftIO $ unRawFilePath $ webFileAbs f 23 webRegenerate (do 24 msg <- liftIO $ loadMessagesFrom mf 25 withBinaryFile fp WriteMode $ \h -> do 26 hPutStr h "app.constant('messageData'," 27 BSB.hPutBuilder h $ JSON.fromEncoding $ JSON.value $ JSON.toJSON msg 28 hPutStr h ");") 29 [mfRawFilePath] [] fo