{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TemplateHaskell #-}
module Language.LSP.Types.Window where
import qualified Data.Aeson as A
import Data.Aeson.TH
import Data.Text (Text)
import Language.LSP.Types.Utils
data MessageType = MtError
| MtWarning
| MtInfo
| MtLog
deriving (Eq,Ord,Show,Read,Enum)
instance A.ToJSON MessageType where
toJSON MtError = A.Number 1
toJSON MtWarning = A.Number 2
toJSON MtInfo = A.Number 3
toJSON MtLog = A.Number 4
instance A.FromJSON MessageType where
parseJSON (A.Number 1) = pure MtError
parseJSON (A.Number 2) = pure MtWarning
parseJSON (A.Number 3) = pure MtInfo
parseJSON (A.Number 4) = pure MtLog
parseJSON _ = mempty
data ShowMessageParams =
ShowMessageParams {
_xtype :: MessageType
, _message :: Text
} deriving (Show, Read, Eq)
deriveJSON lspOptions ''ShowMessageParams
data MessageActionItem =
MessageActionItem
{ _title :: Text
} deriving (Show,Read,Eq)
deriveJSON lspOptions ''MessageActionItem
data ShowMessageRequestParams =
ShowMessageRequestParams
{ _xtype :: MessageType
, _message :: Text
, _actions :: Maybe [MessageActionItem]
} deriving (Show,Read,Eq)
deriveJSON lspOptions ''ShowMessageRequestParams
data LogMessageParams =
LogMessageParams {
_xtype :: MessageType
, _message :: Text
} deriving (Show, Read, Eq)
deriveJSON lspOptions ''LogMessageParams