cfn-flip-0.1.0.1: src/CfnFlip/Libyaml.hs
module CfnFlip.Libyaml
( InvalidYamlEvent(..)
, makeMapping
, makeSequence
, startsMapOrSequence
, isSameStart
, isStartsEnd
, takeMapOrSequenceC
, module Text.Libyaml
) where
import CfnFlip.Prelude
import CfnFlip.Conduit
import Text.Libyaml
(Event(..), MappingStyle(..), SequenceStyle(..), Style(..), Tag(..))
data InvalidYamlEvent = InvalidYamlEvent Event String
deriving stock Show
deriving anyclass Exception
makeMapping
:: Monad m => ByteString -> ConduitT i Event m () -> ConduitT i Event m ()
makeMapping tag inner = do
yield $ EventMappingStart NoTag BlockMapping Nothing
yield $ EventScalar tag NoTag Plain Nothing
inner
yield EventMappingEnd
makeSequence :: Monad m => ConduitT i Event m () -> ConduitT i Event m ()
makeSequence inner = do
yield $ EventSequenceStart NoTag BlockSequence Nothing
inner
yield EventSequenceEnd
startsMapOrSequence :: Event -> Bool
startsMapOrSequence = \case
EventMappingStart{} -> True
EventSequenceStart{} -> True
_ -> False
isSameStart :: Event -> Event -> Bool
x `isSameStart` y = case (x, y) of
(EventMappingStart{}, EventMappingStart{}) -> True
(EventSequenceStart{}, EventSequenceStart{}) -> True
_ -> False
isStartsEnd :: Event -> Event -> Bool
x `isStartsEnd` y = case (x, y) of
(EventMappingStart{}, EventMappingEnd{}) -> True
(EventSequenceStart{}, EventSequenceEnd{}) -> True
_ -> False
takeMapOrSequenceC :: Monad m => Event -> ConduitT Event Event m ()
takeMapOrSequenceC e = takeBalancedC (isSameStart e) (isStartsEnd e)