packages feed

conduit-find-0.1.0.4: test/find-hs.hs

{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE LambdaCase #-}

module Main where

import Data.Conduit ((.|), runConduitRes)
import Control.Monad (guard, void)
import Control.Monad.IO.Class (liftIO)
import Control.Monad.Reader.Class (asks)
import Data.Conduit.Find
import Data.Conduit.List qualified as DCL
import Data.List (isSuffixOf)
import System.Environment (getArgs)
import System.Posix.Process (executeFile)
import Data.Conduit.Filesystem (sourceDirectoryDeep)


main :: IO ()
main = do
    getArgs >>= \case
      [command, dir] -> runCommand command dir
      [command] -> runCommand command "."
      [] -> runCommand "find" "."
      o -> fail $ "Bad arguments: " <> show o

runCommand command dir =
    case command of
        "conduit" -> do
            putStrLn "Running sourceDirectoryDeep from conduit-extra"
            runConduitRes $
                sourceDirectoryDeep False dir
                    .| DCL.filter (".hs" `isSuffixOf`)
                    .| DCL.mapM_ (liftIO . putStrLn)
                    .| DCL.sinkNull

        "find-conduit" -> do
            putStrLn "Running findFiles from find-conduit"
            findFiles defaultFindOptions { findFollowSymlinks = False }
                dir $ do
                    path <- asks entryPath
                    void $ guard (".hs" `isSuffixOf` path)
                    norecurse
                    liftIO $ putStrLn path

        "find-conduit2" -> do
            putStrLn "Running findFiles from find-conduit"
            runConduitRes $
                sourceFindFiles defaultFindOptions { findFollowSymlinks = False }
                    dir (return ())
                    .| DCL.filter ((".hs" `isSuffixOf`) . entryPath . fst)
                    .| DCL.mapM_ (liftIO . putStrLn . entryPath . fst)
                    .| DCL.sinkNull

        "find" -> do
            putStrLn "Running GNU find"
            executeFile "find" True [dir, "-name", "*.hs", "-print"] Nothing

        _ ->
            putStrLn $ "Unknown command " ++ show command