1 {-# LANGUAGE OverloadedStrings #-} 2 module 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 JSON 12 import Service.Messages 13 import Files 14 import Web 15 import Web.Types 16 import 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