orgstat-0.1.8: src/OrgStat/Outputs/Class.hs
-- | Common things among reports
module OrgStat.Outputs.Class
( ReportOutput (..)
) where
import Universum
import qualified Data.Text.IO as T
import qualified Diagrams.Backend.SVG as DB
import qualified Diagrams.Prelude as D
import System.FilePath (replaceExtension)
import OrgStat.Outputs.Types (BlockOutput(..), SummaryOutput(..), TimelineOutput(..))
-- | Things that reporters output an what we can do with them.
class ReportOutput a where
-- | Writes report to the disk, given path to file.
writeReport :: (MonadIO m) => FilePath -> a -> m ()
instance ReportOutput TimelineOutput where
writeReport path (TimelineOutput diagram) =
liftIO $ DB.renderSVG (replaceExtension path "svg") size diagram
where
size = D.dims2D (D.width diagram) (D.height diagram)
instance ReportOutput SummaryOutput where
writeReport path (SummaryOutput text) =
liftIO $ T.writeFile (replaceExtension path "txt") text
instance ReportOutput BlockOutput where
writeReport path (BlockOutput text) =
liftIO $ T.writeFile (replaceExtension path "txt") text