{-| Description: Defines a fetcher strategy to take entries from a RSS or Atom feed. This module is the namespace to define a fetcher strategy which takes entries from a URL pointing to a RSS or Atom feed. -} module Follow.Fetchers.Feed ( fetch , FeedError(..) ) where import Control.Monad.Catch (MonadThrow) import qualified Data.ByteString as BS (ByteString) import Follow.Fetchers.Feed.Internal import Follow.Types (Fetched) import HTTP.Follow (getResponseBody, parseUrl) import qualified Network.HTTP.Req as R (MonadHttp) -- | The fetcher strategy. fetch :: (R.MonadHttp m, MonadThrow m) => BS.ByteString -> Fetched m fetch url = do url' <- parseUrl url response <- getResponseBody url' feed <- parseFeed response return $ feedToEntries feed