{-# 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 ( MonadWriter, execWriter )
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
   String -> m ()
forall a (m :: * -> *). MonadWriter (Seq a) m => [a] -> m ()
tellSeq String
"package\n"
   String -> m ()
forall a (m :: * -> *). MonadWriter (Seq a) m => [a] -> m ()
tellSeq (String -> m ()) -> String -> m ()
forall a b. (a -> b) -> a -> b
$ String -> Maybe String -> String
formatSubline String
"version" (String -> Maybe String
forall a. a -> Maybe a
Just String
version)
   String -> m ()
forall a (m :: * -> *). MonadWriter (Seq a) m => [a] -> m ()
tellSeq (String -> m ()) -> String -> m ()
forall a b. (a -> b) -> a -> b
$ String -> Maybe String -> String
formatSubline String
"unique-identifier" (String -> Maybe String
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) = Seq Char -> String
forall a. Seq a -> [a]
forall (t :: * -> *) a. Foldable t => t a -> [a]
toList (Seq Char -> String)
-> (Writer (Seq Char) () -> Seq Char)
-> Writer (Seq Char) ()
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Writer (Seq Char) () -> Seq Char
forall w a. Writer w a -> w
execWriter
   (Writer (Seq Char) () -> String) -> Writer (Seq Char) () -> String
forall a b. (a -> b) -> a -> b
$ (String, String) -> Writer (Seq Char) ()
forall (m :: * -> *).
MonadWriter (Seq Char) m =>
(String, String) -> m ()
tellPackage (String
v, String
u)