{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} module Chromatin.Data.RpluginConfig( RpluginConfig(..), ) where import GHC.Generics (Generic) import qualified Data.Map as Map (fromList) import Data.Text.Prettyprint.Doc ((<+>), viaShow) import Control.DeepSeq (NFData) import Neovim (NvimObject(..), Dictionary, Object(ObjectMap)) import Ribosome.Internal.NvimObject (extractObject) import Chromatin.Data.RpluginName (RpluginName) data RpluginConfig = RpluginConfig { rpluginConfigSpec :: String, rpluginConfigName :: Maybe RpluginName } deriving (Show, Generic, NFData) instance NvimObject RpluginConfig where toObject RpluginConfig {..} = (toObject :: Dictionary -> Object) . Map.fromList $ [ ("spec", toObject rpluginConfigSpec), ("name", toObject rpluginConfigName) ] fromObject (ObjectMap o) = do spec' <- extractObject "spec" o name' <- extractObject "name" o return $ RpluginConfig spec' name' fromObject o = Left ("invalid type for RpluginConfig: " <+> viaShow o)