{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE OverloadedStrings #-} module Proteome.Data.AddOptions( AddOptions(..), ) where import GHC.Generics (Generic) import Control.DeepSeq (NFData) import qualified Data.Map as Map (fromList) import Data.Text.Prettyprint.Doc ((<+>), viaShow) import Neovim (NvimObject(..), Dictionary, Object(ObjectMap)) import Ribosome.Internal.NvimObject (extractObject, extractObjectOr) import Proteome.Data.Project (ProjectName, ProjectType) data AddOptions = AddOptions { name :: ProjectName, tpe :: ProjectType, activate :: Bool } deriving (Eq, Show, Generic, NFData) instance NvimObject AddOptions where toObject AddOptions {..} = (toObject :: Dictionary -> Object) . Map.fromList $ [ ("name", toObject name), ("tpe", toObject tpe), ("activate", toObject activate) ] fromObject (ObjectMap o) = do name' <- extractObject "name" o tpe' <- extractObject "tpe" o return $ AddOptions name' tpe' (extractObjectOr "activate" False o) fromObject o = Left ("invalid type for AddOptions: " <+> viaShow o)