module YamlUnscrambler.Util.Yaml where import qualified Conduit import qualified Data.Text.Encoding as Text import qualified Data.Yaml as Yaml import qualified Data.Yaml.Parser as YamlParser import qualified Text.Libyaml as Libyaml import YamlUnscrambler.Prelude parseByteStringToRawDoc :: ByteString -> Either Text YamlParser.RawDoc parseByteStringToRawDoc :: ByteString -> Either Text RawDoc parseByteStringToRawDoc ByteString input = (SomeException -> Text) -> Either SomeException RawDoc -> Either Text RawDoc forall (p :: * -> * -> *) a b c. Bifunctor p => (a -> b) -> p a c -> p b c first SomeException -> Text forall a. Show a => a -> Text showAsText (Either SomeException RawDoc -> Either Text RawDoc) -> Either SomeException RawDoc -> Either Text RawDoc forall a b. (a -> b) -> a -> b $ IO (Either SomeException RawDoc) -> Either SomeException RawDoc forall a. IO a -> a unsafePerformIO (IO (Either SomeException RawDoc) -> Either SomeException RawDoc) -> IO (Either SomeException RawDoc) -> Either SomeException RawDoc forall a b. (a -> b) -> a -> b $ forall a. Exception SomeException => IO a -> IO (Either SomeException a) forall e a. Exception e => IO a -> IO (Either e a) try @SomeException (IO RawDoc -> IO (Either SomeException RawDoc)) -> IO RawDoc -> IO (Either SomeException RawDoc) forall a b. (a -> b) -> a -> b $ ConduitT () Void (ResourceT IO) RawDoc -> IO RawDoc forall (m :: * -> *) r. MonadUnliftIO m => ConduitT () Void (ResourceT m) r -> m r Conduit.runConduitRes (ConduitT () Void (ResourceT IO) RawDoc -> IO RawDoc) -> ConduitT () Void (ResourceT IO) RawDoc -> IO RawDoc forall a b. (a -> b) -> a -> b $ Conduit () (ResourceT IO) Event -> ConduitM Event Void (ResourceT IO) RawDoc -> ConduitT () Void (ResourceT IO) RawDoc forall (m :: * -> *) a b c r. Monad m => Conduit a m b -> ConduitM b c m r -> ConduitM a c m r Conduit.fuse (ByteString -> Conduit () (ResourceT IO) Event forall (m :: * -> *) i. MonadResource m => ByteString -> ConduitM i Event m () Libyaml.decode ByteString input) (ConduitM Event Void (ResourceT IO) RawDoc forall (m :: * -> *) o. MonadThrow m => ConduitM Event o m RawDoc YamlParser.sinkRawDoc)