{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE RankNTypes #-}
module Network.WebexTeams.Pipes
(
streamListWithFilter
, streamTeamList
, streamOrganizationList
, streamRoleList
) where
import Control.Monad (unless)
import Data.Foldable (traverse_)
import Pipes (MonadIO, Producer', liftIO, yield)
import Network.WebexTeams hiding (streamOrganizationList,
streamRoleList, streamTeamList)
readerToProducer :: MonadIO m => ListReader i -> Producer' i m ()
readerToProducer reader = go
where
go = do
xs <- liftIO reader
unless (null xs) $ do
traverse_ yield xs
go
streamListWithFilter :: (MonadIO m, WebexTeamsFilter filter, WebexTeamsListItem (ToResponse filter))
=> Authorization
-> WebexTeamsRequest
-> filter
-> Producer' (ToResponse filter) m ()
streamListWithFilter auth base param = getListWithFilter auth base param >>= readerToProducer
streamTeamList :: MonadIO m => Authorization -> WebexTeamsRequest -> Producer' Team m ()
streamTeamList auth base = getTeamList auth base >>= readerToProducer
streamOrganizationList :: MonadIO m => Authorization -> WebexTeamsRequest -> Producer' Organization m ()
streamOrganizationList auth base = getOrganizationList auth base >>= readerToProducer
streamRoleList :: MonadIO m => Authorization -> WebexTeamsRequest -> Producer' Role m ()
streamRoleList auth base = getRoleList auth base >>= readerToProducer