module Database.CouchDB.Conduit.Internal.View where import qualified Data.Aeson as A import Data.Conduit (resourceThrow, Conduit(..), ResourceIO) import qualified Data.Conduit.List as CL (mapM) import Data.ByteString.Char8 (pack) import Database.CouchDB.Conduit.Internal.Connection (CouchError(..)) -- | Convert CouchDB view row or row value from 'Database.CouchDB.Conduit.View' -- to concrete type. -- -- > res <- couchView "mydesign" "myview" [] $ rowValue =$= toType =$ consume toTypeWith :: ResourceIO m => (A.Value -> A.Result a) -- ^ Parser -> Conduit A.Value m a toTypeWith f = CL.mapM (\v -> case f v of A.Error e -> resourceThrow $ CouchInternalError $ pack ("Error parsing json: " ++ e) A.Success o -> return o)