on master help sign in
Change parseMany result stream to Either type
4f87668Harendra Kumar
core/src/Streamly/Internal/Data/Stream/StreamD/Nesting.hs+63−20
@@ -1147,14 +1147,15 @@ data ParseChunksState x inpBuf st pst =
1147 | ParseChunksExtract inpBuf inpBuf !pst
1147 | ParseChunksExtract inpBuf inpBuf !pst
1148 | ParseChunksYield x (ParseChunksState x inpBuf st pst)
1148 | ParseChunksYield x (ParseChunksState x inpBuf st pst)
1149
1149
1150+-- XXX return the remaining stream as part of the error.
1150-- XXX This is in fact parseMany1 (a la foldMany1). Do we need a parseMany as
1151-- XXX This is in fact parseMany1 (a la foldMany1). Do we need a parseMany as
1151-- well?
1152-- well?
1152{-# INLINE_NORMAL parseMany #-}
1153{-# INLINE_NORMAL parseMany #-}
1153parseMany
1154parseMany
1154− :: MonadThrow m
1155+ :: Monad m
1155 => PRD.Parser a m b
1156 => PRD.Parser a m b
1156 -> Stream m a
1157 -> Stream m a
1157− -> Stream m b
1158+ -> Stream m (Either ParseError b)
1158parseMany (PRD.Parser pstep initial extract) (Stream step state) =
1159parseMany (PRD.Parser pstep initial extract) (Stream step state) =
1159 Stream stepOuter (ParseChunksInit [] state)
1160 Stream stepOuter (ParseChunksInit [] state)
1160
1161
@@ -1173,8 +1174,13 @@ parseMany (PRD.Parser pstep initial extract) (Stream step state) =
1173 return $ Skip $ ParseChunksBuf [x] s [] ps
1174 return $ Skip $ ParseChunksBuf [x] s [] ps
1174 PRD.IDone pb ->
1175 PRD.IDone pb ->
1175 let next = ParseChunksInit [x] s
1176 let next = ParseChunksInit [x] s
1176− in return $ Skip $ ParseChunksYield pb next
1177+ in return $ Skip $ ParseChunksYield (Right pb) next
1177− PRD.IError err -> throwM $ ParseError err
1178+ PRD.IError err ->
1179+ return
1180+ $ Skip
1181+ $ ParseChunksYield
1182+ (Left (ParseError err))
1183+ (ParseChunksInitLeftOver [])
1178 Skip s -> return $ Skip $ ParseChunksInit [] s
1184 Skip s -> return $ Skip $ ParseChunksInit [] s
1179 Stop -> return Stop
1185 Stop -> return Stop
1180
1186
@@ -1186,8 +1192,13 @@ parseMany (PRD.Parser pstep initial extract) (Stream step state) =
1186 return $ Skip $ ParseChunksBuf src st [] ps
1192 return $ Skip $ ParseChunksBuf src st [] ps
1187 PRD.IDone pb ->
1193 PRD.IDone pb ->
1188 let next = ParseChunksInit src st
1194 let next = ParseChunksInit src st
1189− in return $ Skip $ ParseChunksYield pb next
1195+ in return $ Skip $ ParseChunksYield (Right pb) next
1190− PRD.IError err -> throwM $ ParseError err
1196+ PRD.IError err ->
1197+ return
1198+ $ Skip
1199+ $ ParseChunksYield
1200+ (Left (ParseError err))
1201+ (ParseChunksInitLeftOver [])
1191
1202
1192 -- This is simplified ParseChunksInit
1203 -- This is simplified ParseChunksInit
1193 stepOuter _ (ParseChunksInitBuf src) = do
1204 stepOuter _ (ParseChunksInitBuf src) = do
@@ -1197,8 +1208,13 @@ parseMany (PRD.Parser pstep initial extract) (Stream step state) =
1197 return $ Skip $ ParseChunksExtract src [] ps
1208 return $ Skip $ ParseChunksExtract src [] ps
1198 PRD.IDone pb ->
1209 PRD.IDone pb ->
1199 let next = ParseChunksInitBuf src
1210 let next = ParseChunksInitBuf src
1200− in return $ Skip $ ParseChunksYield pb next
1211+ in return $ Skip $ ParseChunksYield (Right pb) next
1201− PRD.IError err -> throwM $ ParseError err
1212+ PRD.IError err ->
1213+ return
1214+ $ Skip
1215+ $ ParseChunksYield
1216+ (Left (ParseError err))
1217+ (ParseChunksInitLeftOver [])
1202
1218
1203 -- XXX we just discard any leftover input at the end
1219 -- XXX we just discard any leftover input at the end
1204 stepOuter _ (ParseChunksInitLeftOver _) = return Stop
1220 stepOuter _ (ParseChunksInitLeftOver _) = return Stop
@@ -1226,13 +1242,18 @@ parseMany (PRD.Parser pstep initial extract) (Stream step state) =
1226 return $ Skip $ ParseChunksBuf src s buf1 pst1
1242 return $ Skip $ ParseChunksBuf src s buf1 pst1
1227 PR.Done 0 b -> do
1243 PR.Done 0 b -> do
1228 return $ Skip $
1244 return $ Skip $
1229− ParseChunksYield b (ParseChunksInit [] s)
1245+ ParseChunksYield (Right b) (ParseChunksInit [] s)
1230 PR.Done n b -> do
1246 PR.Done n b -> do
1231 assert (n <= length (x:buf)) (return ())
1247 assert (n <= length (x:buf)) (return ())
1232 let src = Prelude.reverse (Prelude.take n (x:buf))
1248 let src = Prelude.reverse (Prelude.take n (x:buf))
1233 return $ Skip $
1249 return $ Skip $
1234− ParseChunksYield b (ParseChunksInit src s)
1250+ ParseChunksYield (Right b) (ParseChunksInit src s)
1251+ PR.Error err ->
1252+ return
1253+ $ Skip
1254+ $ ParseChunksYield
1235− PR.Error err -> throwM $ ParseError err
1255+ (Left (ParseError err))
1256+ (ParseChunksInitLeftOver [])
1236 Skip s -> return $ Skip $ ParseChunksStream s buf pst
1257 Skip s -> return $ Skip $ ParseChunksStream s buf pst
1237 Stop -> return $ Skip $ ParseChunksStop buf pst
1258 Stop -> return $ Skip $ ParseChunksStop buf pst
1238
1259
@@ -1259,12 +1280,20 @@ parseMany (PRD.Parser pstep initial extract) (Stream step state) =
1259 src = Prelude.reverse src0 ++ xs
1280 src = Prelude.reverse src0 ++ xs
1260 return $ Skip $ ParseChunksBuf src s buf1 pst1
1281 return $ Skip $ ParseChunksBuf src s buf1 pst1
1261 PR.Done 0 b ->
1282 PR.Done 0 b ->
1283+ return
1284+ $ Skip
1262− return $ Skip $ ParseChunksYield b (ParseChunksInit xs s)
1285+ $ ParseChunksYield (Right b) (ParseChunksInit xs s)
1263 PR.Done n b -> do
1286 PR.Done n b -> do
1264 assert (n <= length (x:buf)) (return ())
1287 assert (n <= length (x:buf)) (return ())
1265 let src = Prelude.reverse (Prelude.take n (x:buf)) ++ xs
1288 let src = Prelude.reverse (Prelude.take n (x:buf)) ++ xs
1289+ return $ Skip
1266− return $ Skip $ ParseChunksYield b (ParseChunksInit src s)
1290+ $ ParseChunksYield (Right b) (ParseChunksInit src s)
1291+ PR.Error err ->
1292+ return
1293+ $ Skip
1294+ $ ParseChunksYield
1267− PR.Error err -> throwM $ ParseError err
1295+ (Left (ParseError err))
1296+ (ParseChunksInitLeftOver [])
1268
1297
1269 -- This is simplified ParseChunksBuf
1298 -- This is simplified ParseChunksBuf
1270 stepOuter _ (ParseChunksExtract [] buf pst) =
1299 stepOuter _ (ParseChunksExtract [] buf pst) =
@@ -1288,12 +1317,21 @@ parseMany (PRD.Parser pstep initial extract) (Stream step state) =
1288 src = Prelude.reverse src0 ++ xs
1317 src = Prelude.reverse src0 ++ xs
1289 return $ Skip $ ParseChunksExtract src buf1 pst1
1318 return $ Skip $ ParseChunksExtract src buf1 pst1
1290 PR.Done 0 b ->
1319 PR.Done 0 b ->
1320+ return
1321+ $ Skip
1291− return $ Skip $ ParseChunksYield b (ParseChunksInitBuf xs)
1322+ $ ParseChunksYield (Right b) (ParseChunksInitBuf xs)
1292 PR.Done n b -> do
1323 PR.Done n b -> do
1293 assert (n <= length (x:buf)) (return ())
1324 assert (n <= length (x:buf)) (return ())
1294 let src = Prelude.reverse (Prelude.take n (x:buf)) ++ xs
1325 let src = Prelude.reverse (Prelude.take n (x:buf)) ++ xs
1326+ return
1327+ $ Skip
1295− return $ Skip $ ParseChunksYield b (ParseChunksInitBuf src)
1328+ $ ParseChunksYield (Right b) (ParseChunksInitBuf src)
1329+ PR.Error err ->
1330+ return
1331+ $ Skip
1332+ $ ParseChunksYield
1296− PR.Error err -> throwM $ ParseError err
1333+ (Left (ParseError err))
1334+ (ParseChunksInitLeftOver [])
1297
1335
1298 -- This is simplified ParseChunksExtract
1336 -- This is simplified ParseChunksExtract
1299 stepOuter _ (ParseChunksStop buf pst) = do
1337 stepOuter _ (ParseChunksStop buf pst) = do
@@ -1309,13 +1347,18 @@ parseMany (PRD.Parser pstep initial extract) (Stream step state) =
1309 return $ Skip $ ParseChunksExtract src buf1 pst1
1347 return $ Skip $ ParseChunksExtract src buf1 pst1
1310 PR.Done 0 b -> do
1348 PR.Done 0 b -> do
1311 return $ Skip $
1349 return $ Skip $
1312− ParseChunksYield b (ParseChunksInitLeftOver [])
1350+ ParseChunksYield (Right b) (ParseChunksInitLeftOver [])
1313 PR.Done n b -> do
1351 PR.Done n b -> do
1314 assert (n <= length buf) (return ())
1352 assert (n <= length buf) (return ())
1315 let src = Prelude.reverse (Prelude.take n buf)
1353 let src = Prelude.reverse (Prelude.take n buf)
1316 return $ Skip $
1354 return $ Skip $
1317− ParseChunksYield b (ParseChunksInitBuf src)
1355+ ParseChunksYield (Right b) (ParseChunksInitBuf src)
1356+ PR.Error err ->
1357+ return
1358+ $ Skip
1359+ $ ParseChunksYield
1318− PR.Error err -> throwM $ ParseError err
1360+ (Left (ParseError err))
1361+ (ParseChunksInitLeftOver [])
1319
1362
1320 stepOuter _ (ParseChunksYield a next) = return $ Yield a next
1363 stepOuter _ (ParseChunksYield a next) = return $ Yield a next
1321
1364