proteome-0.3.1.0: lib/Ribosome/Internal/NvimObject.hs
module Ribosome.Internal.NvimObject(
deriveString,
extractObject,
) where
import qualified Data.ByteString.UTF8 as UTF8 (fromString)
import Data.Map.Strict (Map, (!?))
import Data.Text.Prettyprint.Doc ((<+>), pretty)
import Neovim (Object(ObjectString), Doc, AnsiStyle, fromObject, NvimObject)
deriveString :: (String -> a) -> Object -> Either (Doc AnsiStyle) a
deriveString cons o = fmap cons (fromObject o :: Either (Doc AnsiStyle) String)
objectKeyMissing :: String -> Maybe Object -> Either (Doc AnsiStyle) Object
objectKeyMissing _ (Just o) = Right o
objectKeyMissing key Nothing = Left (pretty "missing key in nvim data: " <+> pretty key)
extractObject :: NvimObject o => String -> Map Object Object -> Either (Doc AnsiStyle) o
extractObject key data' = do
value <- objectKeyMissing key $ data' !? (ObjectString . UTF8.fromString) key
fromObject value