@@ -69,8 +69,7 @@ import Control.Monad.CatchIO (MonadCatchIO, finally)
69import qualified Data.ListLike as LL
69import qualified Data.ListLike as LL
71data Event =
71data Event =
73− | EventStreamStart
72+ EventStreamStart
74 | EventStreamEnd
73 | EventStreamEnd
75 | EventDocumentStart
74 | EventDocumentStart
76 | EventDocumentEnd
75 | EventDocumentEnd
@@ -243,7 +242,7 @@ makeString f a = do
244parserParseOne :: (MonadFailure YamlException m, With m)
243parserParseOne :: (MonadFailure YamlException m, With m)
245 => Parser
244 => Parser
246− -> m Event
245+ -> m (Maybe Event)
247parserParseOne parser = allocaBytesR eventSize $ \er -> do
246parserParseOne parser = allocaBytesR eventSize $ \er -> do
248 res <- liftIO $ c_yaml_parser_parse parser er
247 res <- liftIO $ c_yaml_parser_parse parser er
@@ -301,21 +300,21 @@ foreign import ccall unsafe "get_mapping_start_anchor"
301foreign import ccall unsafe "get_alias_anchor"
300foreign import ccall unsafe "get_alias_anchor"
302 c_get_alias_anchor :: EventRaw -> IO CString
301 c_get_alias_anchor :: EventRaw -> IO CString
304−getEvent :: EventRaw -> IO Event
303+getEvent :: EventRaw -> IO (Maybe Event)
305getEvent er = do
304getEvent er = do
306 et <- c_get_event_type er
305 et <- c_get_event_type er
307 case toEnum $ fromEnum et of
306 case toEnum $ fromEnum et of
308− YamlNoEvent -> return EventNone
307+ YamlNoEvent -> return Nothing
309− YamlStreamStartEvent -> return EventStreamStart
308+ YamlStreamStartEvent -> return $ Just EventStreamStart
310− YamlStreamEndEvent -> return EventStreamEnd
309+ YamlStreamEndEvent -> return $ Just EventStreamEnd
311− YamlDocumentStartEvent -> return EventDocumentStart
310+ YamlDocumentStartEvent -> return $ Just EventDocumentStart
312− YamlDocumentEndEvent -> return EventDocumentEnd
311+ YamlDocumentEndEvent -> return $ Just EventDocumentEnd
313 YamlAliasEvent -> do
312 YamlAliasEvent -> do
314 yanchor <- c_get_alias_anchor er
313 yanchor <- c_get_alias_anchor er
315 anchor <- if yanchor == nullPtr
314 anchor <- if yanchor == nullPtr
316 then error "got YamlAliasEvent with empty anchor"
315 then error "got YamlAliasEvent with empty anchor"
317 else peekCString yanchor
316 else peekCString yanchor
318− return $ EventAlias anchor
317+ return $ Just $ EventAlias anchor
319 YamlScalarEvent -> do
318 YamlScalarEvent -> do
320 yvalue <- c_get_scalar_value er
319 yvalue <- c_get_scalar_value er
321 ylen <- c_get_scalar_length er
320 ylen <- c_get_scalar_length er
@@ -338,21 +337,21 @@ getEvent er = do
338 anchor <- if yanchor == nullPtr
337 anchor <- if yanchor == nullPtr
339 then return Nothing
338 then return Nothing
340 else fmap Just $ peekCString yanchor
339 else fmap Just $ peekCString yanchor
341− return $ EventScalar bs (bsToTag tagbs) style anchor
340+ return $ Just $ EventScalar bs (bsToTag tagbs) style anchor
342 YamlSequenceStartEvent -> do
341 YamlSequenceStartEvent -> do
343 yanchor <- c_get_sequence_start_anchor er
342 yanchor <- c_get_sequence_start_anchor er
344 anchor <- if yanchor == nullPtr
343 anchor <- if yanchor == nullPtr
345 then return Nothing
344 then return Nothing
346 else fmap Just $ peekCString yanchor
345 else fmap Just $ peekCString yanchor
347− return $ EventSequenceStart anchor
346+ return $ Just $ EventSequenceStart anchor
348− YamlSequenceEndEvent -> return EventSequenceEnd
347+ YamlSequenceEndEvent -> return $ Just EventSequenceEnd
349 YamlMappingStartEvent -> do
348 YamlMappingStartEvent -> do
350 yanchor <- c_get_mapping_start_anchor er
349 yanchor <- c_get_mapping_start_anchor er
351 anchor <- if yanchor == nullPtr
350 anchor <- if yanchor == nullPtr
352 then return Nothing
351 then return Nothing
353 else fmap Just $ peekCString yanchor
352 else fmap Just $ peekCString yanchor
354− return $ EventMappingStart anchor
353+ return $ Just $ EventMappingStart anchor
355− YamlMappingEndEvent -> return EventMappingEnd
354+ YamlMappingEndEvent -> return $ Just EventMappingEnd
357-- Emitter
356-- Emitter
@@ -425,7 +424,7 @@ emitMappingWithAnchor e a = emitEvent (EventMappingStart a) >> e
427parseEvent :: (With m, MonadFailure YamlException m)
426parseEvent :: (With m, MonadFailure YamlException m)
428− => YamlDecoder m Event
427+ => YamlDecoder m (Maybe Event)
429parseEvent = ask >>= parserParseOne
428parseEvent = ask >>= parserParseOne
431type YamlDecoder = ReaderT Parser
430type YamlDecoder = ReaderT Parser
@@ -576,7 +575,6 @@ toEventRaw e f = allocaBytesR eventSize $ \er -> do
576 c_yaml_alias_event_initialize
575 c_yaml_alias_event_initialize
579− EventNone -> error "toEventRaw: EventNone not supported"
580 unless (ret == 1) $ throwIO $ ToEventRawException ret
578 unless (ret == 1) $ throwIO $ ToEventRawException ret
@@ -636,8 +634,8 @@ runParser fp iter = do
636 e <- liftIO $ withForeignPtr fp parserParseOne'
634 e <- liftIO $ withForeignPtr fp parserParseOne'
637 case e of
635 case e of
638 Left err -> return $ throwErr $ Err $ show err
636 Left err -> return $ throwErr $ Err $ show err
639− Right EventNone -> return iter
637+ Right Nothing -> return iter
640− Right ev -> do
638+ Right (Just ev) -> do
641 igv <- runIter iter $ Chunk $ SC.fromList [ev]
639 igv <- runIter iter $ Chunk $ SC.fromList [ev]
642 case igv of
640 case igv of
643 Done a _ -> return $ return a
641 Done a _ -> return $ return a
@@ -645,7 +643,7 @@ runParser fp iter = do
645 Cont _ (Just err) -> return $ throwErr err
643 Cont _ (Just err) -> return $ throwErr err
647parserParseOne' :: Parser
645parserParseOne' :: Parser
648− -> IO (Either YamlException Event)
646+ -> IO (Either YamlException (Maybe Event))
649parserParseOne' parser = allocaBytesR eventSize $ \er -> do
647parserParseOne' parser = allocaBytesR eventSize $ \er -> do
650 res <- liftIO $ c_yaml_parser_parse parser er
648 res <- liftIO $ c_yaml_parser_parse parser er
651 flip finally (c_yaml_event_delete er) $
649 flip finally (c_yaml_event_delete er) $