module Ribosome.Api.Response( nvimFatal, nvimResponseString, nvimResponseStringArray, nvimValidateFatal ) where import Data.ByteString.UTF8 import Neovim nvimFatal :: Either NeovimException a -> Neovim env a nvimFatal (Right a) = return a nvimFatal (Left e) = (liftIO . fail . show) e nvimResponseString :: Object -> Neovim env String nvimResponseString (ObjectString a) = return $ toString a nvimResponseString a = liftIO . fail $ "invalid nvim type for String: " ++ (show a) nvimResponseStringArray :: Object -> Neovim env [String] nvimResponseStringArray (ObjectArray a) = traverse nvimResponseString a nvimResponseStringArray a = liftIO . fail $ "invalid nvim type for Array: " ++ (show a) nvimValidateFatal :: (Object -> Neovim env a) -> (Either NeovimException Object) -> Neovim env a nvimValidateFatal validate response = do result <- nvimFatal response validate result