module Ribosome.Api.Response( nvimFatal, nvimResponseString, nvimResponseStringArray, nvimValidateFatal, ) where import Neovim nvimFatal :: Either NeovimException a -> Neovim env a nvimFatal :: Either NeovimException a -> Neovim env a nvimFatal (Right a a) = a -> Neovim env a forall (m :: * -> *) a. Monad m => a -> m a return a a nvimFatal (Left NeovimException e) = (IO a -> Neovim env a forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO (IO a -> Neovim env a) -> (NeovimException -> IO a) -> NeovimException -> Neovim env a forall b c a. (b -> c) -> (a -> b) -> a -> c . String -> IO a forall (m :: * -> *) a. MonadFail m => String -> m a fail (String -> IO a) -> (NeovimException -> String) -> NeovimException -> IO a forall b c a. (b -> c) -> (a -> b) -> a -> c . NeovimException -> String forall b a. (Show a, IsString b) => a -> b show) NeovimException e nvimResponseString :: Object -> Neovim env Text nvimResponseString :: Object -> Neovim env Text nvimResponseString (ObjectString ByteString a) = Text -> Neovim env Text forall (m :: * -> *) a. Monad m => a -> m a return (Text -> Neovim env Text) -> Text -> Neovim env Text forall a b. (a -> b) -> a -> b $ ByteString -> Text forall a b. ConvertUtf8 a b => b -> a decodeUtf8 ByteString a nvimResponseString Object a = IO Text -> Neovim env Text forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO (IO Text -> Neovim env Text) -> (String -> IO Text) -> String -> Neovim env Text forall b c a. (b -> c) -> (a -> b) -> a -> c . String -> IO Text forall (m :: * -> *) a. MonadFail m => String -> m a fail (String -> Neovim env Text) -> String -> Neovim env Text forall a b. (a -> b) -> a -> b $ String "invalid nvim type for Text: " String -> String -> String forall a. Semigroup a => a -> a -> a <> Object -> String forall b a. (Show a, IsString b) => a -> b show Object a nvimResponseStringArray :: Object -> Neovim env [Text] nvimResponseStringArray :: Object -> Neovim env [Text] nvimResponseStringArray (ObjectArray [Object] a) = (Object -> Neovim env Text) -> [Object] -> Neovim env [Text] forall (t :: * -> *) (f :: * -> *) a b. (Traversable t, Applicative f) => (a -> f b) -> t a -> f (t b) traverse Object -> Neovim env Text forall env. Object -> Neovim env Text nvimResponseString [Object] a nvimResponseStringArray Object a = IO [Text] -> Neovim env [Text] forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO (IO [Text] -> Neovim env [Text]) -> (String -> IO [Text]) -> String -> Neovim env [Text] forall b c a. (b -> c) -> (a -> b) -> a -> c . String -> IO [Text] forall (m :: * -> *) a. MonadFail m => String -> m a fail (String -> Neovim env [Text]) -> String -> Neovim env [Text] forall a b. (a -> b) -> a -> b $ String "invalid nvim type for Array: " String -> String -> String forall a. Semigroup a => a -> a -> a <> Object -> String forall b a. (Show a, IsString b) => a -> b show Object a nvimValidateFatal :: (Object -> Neovim env a) -> Either NeovimException Object -> Neovim env a nvimValidateFatal :: (Object -> Neovim env a) -> Either NeovimException Object -> Neovim env a nvimValidateFatal Object -> Neovim env a validate Either NeovimException Object response = do Object result <- Either NeovimException Object -> Neovim env Object forall a env. Either NeovimException a -> Neovim env a nvimFatal Either NeovimException Object response Object -> Neovim env a validate Object result