packages feed

scrapbook-0.3.2: src/ScrapBook/Cmd/Run.hs

{-# LANGUAGE DataKinds        #-}
{-# LANGUAGE LambdaCase       #-}
{-# LANGUAGE OverloadedLabels #-}
{-# LANGUAGE TypeOperators    #-}

module ScrapBook.Cmd.Run
    ( run
    , run'
    ) where

import           RIO

import           Data.Yaml (ParseException)
import           ScrapBook

run :: MonadUnliftIO m => Format -> Config -> m Text
run fmt conf = do
  results <- forM (conf ^. #sites) $ \site ->
    collect (fetch $ toSite site) `catch` handler
  collect $ write conf fmt (concat results)
  where
    handler :: MonadUnliftIO m => CollectError -> m [Post Site]
    handler e = collect (logError $ displayShow e) >> pure []

run' :: (MonadUnliftIO m, MonadThrow m) =>
  Format -> Either ParseException Config -> m (Config, Text)
run' fmt = \case
  Left err   -> throwM $ YamlParseException err
  Right conf -> (,) conf <$> run fmt conf