proteome-0.2.0.0: lib/Proteome/Data/ProjectSpec.hs
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE RecordWildCards #-}
module Proteome.Data.ProjectSpec(
ProjectSpec (..),
) where
import GHC.Generics (Generic)
import Control.DeepSeq (NFData)
import qualified Data.Map as Map
import Data.Maybe (catMaybes)
import Data.MessagePack
import Neovim.Classes (NvimObject(..), Dictionary)
import Proteome.Data.Project (ProjectName, ProjectType, ProjectLang, ProjectRoot)
data ProjectSpec =
ProjectSpec {
name :: ProjectName,
root :: ProjectRoot,
tpe :: Maybe ProjectType,
types :: [ProjectType],
lang :: Maybe ProjectLang,
langs :: [ProjectLang]
}
deriving (Generic, NFData)
instance NvimObject ProjectSpec where
toObject ProjectSpec {..} =
(toObject :: Dictionary -> Object) . Map.fromList $
[
("name", toObject name),
("root", toObject root),
("types", toObject types),
("langs", toObject langs)
] ++ catMaybes
[
tpe >>= \a -> return ("tpe", toObject a),
lang >>= \a -> return ("lang", toObject a)
]