-- This file is part of HamSql -- -- Copyright 2014 by it's authors. -- Some rights reserved. See COPYING, AUTHORS. {-# LANGUAGE TemplateHaskell #-} module Database.HamSql.Internal.Documentation where import Data.FileEmbed import qualified Data.Text as T import Data.Text.Encoding import qualified Data.Text.IO as T.IO import System.FilePath import Text.DocTemplates import Database.HamSql.Internal.Option import Database.HamSql.Internal.Utils import Database.HamSql.Setup import Database.YamSql (Schema (..), SqlName (..)) templateFromFile :: FilePath -> IO Template templateFromFile "DEFAULT.rst" = return templateDefaultSchema templateFromFile fname = do str <- T.IO.readFile fname return $ templateCompile str templateCompile :: Text -> Template templateCompile str = case compileTemplate str of (Left e) -> err $ tshow e (Right t) -> t docWrite :: OptDoc -> Setup -> IO () docWrite optDoc s = do t <- templateFromFile (optTemplate optDoc) _ <- mapM (docWriteSchema optDoc t) (fromMaybe [] $ setupSchemaData s) return () docWriteSchema :: OptDoc -> Template -> Schema -> IO () docWriteSchema optDoc t m = T.IO.writeFile path (renderTemplate t m) where path = optOutputDir optDoc getName (schemaName m) <.> takeExtension (optTemplate optDoc) getName (SqlName n) = T.unpack n templateDefaultSchema :: Template templateDefaultSchema = templateCompile $ decodeUtf8 $(embedFile "data/doc-template.rst")