module Data.Conduit.OpenPGP.Filter (
conduitPktFilter
, conduitTKFilter
, FilterPredicates(..)
) where
import Control.Monad.Trans.Reader (Reader, runReader)
import Data.Conduit (Conduit)
import qualified Data.Conduit.List as CL
import Codec.Encryption.OpenPGP.Types
data FilterPredicates =
RTKFilterPredicate (Reader TK Bool)
| RPFilterPredicate (Reader Pkt Bool)
conduitPktFilter :: Monad m => FilterPredicates -> Conduit Pkt m Pkt
conduitPktFilter = CL.filter . superPredicate
superPredicate :: FilterPredicates -> Pkt -> Bool
superPredicate (RPFilterPredicate e) p = runReader e p
superPredicate _ _ = False
conduitTKFilter :: Monad m => FilterPredicates -> Conduit TK m TK
conduitTKFilter = CL.filter . superTKPredicate
superTKPredicate :: FilterPredicates -> TK -> Bool
superTKPredicate (RTKFilterPredicate e) = runReader e