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 Int -> InvalidYamlEvent -> ShowS [InvalidYamlEvent] -> ShowS InvalidYamlEvent -> String (Int -> InvalidYamlEvent -> ShowS) -> (InvalidYamlEvent -> String) -> ([InvalidYamlEvent] -> ShowS) -> Show InvalidYamlEvent forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> InvalidYamlEvent -> ShowS showsPrec :: Int -> InvalidYamlEvent -> ShowS $cshow :: InvalidYamlEvent -> String show :: InvalidYamlEvent -> String $cshowList :: [InvalidYamlEvent] -> ShowS showList :: [InvalidYamlEvent] -> ShowS Show deriving anyclass Show InvalidYamlEvent Typeable InvalidYamlEvent (Typeable InvalidYamlEvent, Show InvalidYamlEvent) => (InvalidYamlEvent -> SomeException) -> (SomeException -> Maybe InvalidYamlEvent) -> (InvalidYamlEvent -> String) -> Exception InvalidYamlEvent SomeException -> Maybe InvalidYamlEvent InvalidYamlEvent -> String InvalidYamlEvent -> SomeException forall e. (Typeable e, Show e) => (e -> SomeException) -> (SomeException -> Maybe e) -> (e -> String) -> Exception e $ctoException :: InvalidYamlEvent -> SomeException toException :: InvalidYamlEvent -> SomeException $cfromException :: SomeException -> Maybe InvalidYamlEvent fromException :: SomeException -> Maybe InvalidYamlEvent $cdisplayException :: InvalidYamlEvent -> String displayException :: InvalidYamlEvent -> String Exception makeMapping :: Monad m => ByteString -> ConduitT i Event m () -> ConduitT i Event m () makeMapping :: forall (m :: * -> *) i. Monad m => ByteString -> ConduitT i Event m () -> ConduitT i Event m () makeMapping ByteString tag ConduitT i Event m () inner = do Event -> ConduitT i Event m () forall (m :: * -> *) o i. Monad m => o -> ConduitT i o m () yield (Event -> ConduitT i Event m ()) -> Event -> ConduitT i Event m () forall a b. (a -> b) -> a -> b $ Tag -> MappingStyle -> Anchor -> Event EventMappingStart Tag NoTag MappingStyle BlockMapping Anchor forall a. Maybe a Nothing Event -> ConduitT i Event m () forall (m :: * -> *) o i. Monad m => o -> ConduitT i o m () yield (Event -> ConduitT i Event m ()) -> Event -> ConduitT i Event m () forall a b. (a -> b) -> a -> b $ ByteString -> Tag -> Style -> Anchor -> Event EventScalar ByteString tag Tag NoTag Style Plain Anchor forall a. Maybe a Nothing ConduitT i Event m () inner Event -> ConduitT i Event m () forall (m :: * -> *) o i. Monad m => o -> ConduitT i o m () yield Event EventMappingEnd makeSequence :: Monad m => ConduitT i Event m () -> ConduitT i Event m () makeSequence :: forall (m :: * -> *) i. Monad m => ConduitT i Event m () -> ConduitT i Event m () makeSequence ConduitT i Event m () inner = do Event -> ConduitT i Event m () forall (m :: * -> *) o i. Monad m => o -> ConduitT i o m () yield (Event -> ConduitT i Event m ()) -> Event -> ConduitT i Event m () forall a b. (a -> b) -> a -> b $ Tag -> SequenceStyle -> Anchor -> Event EventSequenceStart Tag NoTag SequenceStyle BlockSequence Anchor forall a. Maybe a Nothing ConduitT i Event m () inner Event -> ConduitT i Event m () forall (m :: * -> *) o i. Monad m => o -> ConduitT i o m () yield Event EventSequenceEnd startsMapOrSequence :: Event -> Bool startsMapOrSequence :: Event -> Bool startsMapOrSequence = \case EventMappingStart{} -> Bool True EventSequenceStart{} -> Bool True Event _ -> Bool False isSameStart :: Event -> Event -> Bool Event x isSameStart :: Event -> Event -> Bool `isSameStart` Event y = case (Event x, Event y) of (EventMappingStart{}, EventMappingStart{}) -> Bool True (EventSequenceStart{}, EventSequenceStart{}) -> Bool True (Event, Event) _ -> Bool False isStartsEnd :: Event -> Event -> Bool Event x isStartsEnd :: Event -> Event -> Bool `isStartsEnd` Event y = case (Event x, Event y) of (EventMappingStart{}, EventMappingEnd{}) -> Bool True (EventSequenceStart{}, EventSequenceEnd{}) -> Bool True (Event, Event) _ -> Bool False takeMapOrSequenceC :: Monad m => Event -> ConduitT Event Event m () takeMapOrSequenceC :: forall (m :: * -> *). Monad m => Event -> ConduitT Event Event m () takeMapOrSequenceC Event e = (Event -> Bool) -> (Event -> Bool) -> ConduitT Event Event m () forall (m :: * -> *) a. Monad m => (a -> Bool) -> (a -> Bool) -> ConduitT a a m () takeBalancedC (Event -> Event -> Bool isSameStart Event e) (Event -> Event -> Bool isStartsEnd Event e)