packages feed

scrapbook-core-0.5.0: src/ScrapBook/Write.hs

{-# LANGUAGE DataKinds         #-}
{-# LANGUAGE FlexibleContexts  #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE PolyKinds         #-}
{-# LANGUAGE TypeFamilies      #-}
{-# LANGUAGE TypeOperators     #-}

module ScrapBook.Write
    ( write
    , fileName
    , updateFileName
    , Write (..)
    ) where

import           RIO

import           Data.Extensible
import           ScrapBook.Collecter      (Collecter)
import           ScrapBook.Data.Config    (HasWriteConfigFields)
import           ScrapBook.Data.Format    (Format)
import           ScrapBook.Data.Site      (IsSiteFields, Post)
import           ScrapBook.Feed           ()
import           ScrapBook.Json           ()
import           ScrapBook.Write.Internal (Write (..))

write :: (IsSiteFields xs, HasWriteConfigFields ys) =>
  Record ys -> Format -> [Post (Record xs)] -> Collecter Text
write conf fmt posts = flip matchField fmt $
  htabulateFor (Proxy :: Proxy Write) $
    \m -> Field (Match . pure $ writeTo m conf posts)

fileName :: HasWriteConfigFields xs => Record xs -> Format -> FilePath
fileName conf = matchField $
  htabulateFor (Proxy :: Proxy Write) $
    \m -> Field (Match . pure $ fileName' m conf)

updateFileName :: HasWriteConfigFields xs =>
  Format -> FilePath -> Record xs -> Record xs
updateFileName = matchField $
  htabulateFor (Proxy :: Proxy Write) $ Field . Match . pure . updateFileName'