{-# LANGUAGE FlexibleContexts #-}

{- | Module for pretty-printing epub package info

   Used internally by Codec.Epub.Format
-}
module Codec.Epub.Format.Package
   ( formatPackage
   )
   where

import Control.Monad.Writer.Lazy
import Data.Foldable ( toList )

import Codec.Epub.Data.Package
import Codec.Epub.Format.Util


tellPackage :: MonadWriter (Seq Char) m => (String, String) -> m ()
tellPackage :: forall (m :: * -> *).
MonadWriter (Seq Char) m =>
(String, String) -> m ()
tellPackage (String
version, String
uniqueId) = do
   forall a (m :: * -> *). MonadWriter (Seq a) m => [a] -> m ()
tellSeq String
"package\n"
   forall a (m :: * -> *). MonadWriter (Seq a) m => [a] -> m ()
tellSeq forall a b. (a -> b) -> a -> b
$ String -> Maybe String -> String
formatSubline String
"version" (forall a. a -> Maybe a
Just String
version)
   forall a (m :: * -> *). MonadWriter (Seq a) m => [a] -> m ()
tellSeq forall a b. (a -> b) -> a -> b
$ String -> Maybe String -> String
formatSubline String
"unique-identifier" (forall a. a -> Maybe a
Just String
uniqueId)


{- | Format an epub Package structure for pretty printing
-}
formatPackage :: Package -> String
formatPackage :: Package -> String
formatPackage (Package String
v String
u) = forall (t :: * -> *) a. Foldable t => t a -> [a]
toList forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall w a. Writer w a -> w
execWriter
   forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *).
MonadWriter (Seq Char) m =>
(String, String) -> m ()
tellPackage (String
v, String
u)