{- ORMOLU_DISABLE -}
{- HLINT ignore -}
-- THIS IS A GENERATED FILE, DO NOT EDIT

{-# OPTIONS_GHC -Wno-unused-imports #-}
{-# OPTIONS_GHC -Wno-unused-matches #-}
{-# OPTIONS_GHC -Wno-deprecations #-}
module Language.LSP.Protocol.Internal.Types.ClientCapabilities where

import Control.DeepSeq
import Data.Hashable
import GHC.Generics
import Language.LSP.Protocol.Utils.Misc
import Prettyprinter
import qualified Data.Aeson
import qualified Data.Aeson as Aeson
import qualified Data.Row.Aeson as Aeson
import qualified Data.Row.Hashable as Hashable
import qualified Language.LSP.Protocol.Internal.Types.GeneralClientCapabilities
import qualified Language.LSP.Protocol.Internal.Types.NotebookDocumentClientCapabilities
import qualified Language.LSP.Protocol.Internal.Types.TextDocumentClientCapabilities
import qualified Language.LSP.Protocol.Internal.Types.WindowClientCapabilities
import qualified Language.LSP.Protocol.Internal.Types.WorkspaceClientCapabilities
import qualified Language.LSP.Protocol.Types.Common

{-|
Defines the capabilities provided by the client.
-}
data ClientCapabilities = ClientCapabilities 
  { {-|
  Workspace specific client capabilities.
  -}
  ClientCapabilities -> Maybe WorkspaceClientCapabilities
_workspace :: (Maybe Language.LSP.Protocol.Internal.Types.WorkspaceClientCapabilities.WorkspaceClientCapabilities)
  , {-|
  Text document specific client capabilities.
  -}
  ClientCapabilities -> Maybe TextDocumentClientCapabilities
_textDocument :: (Maybe Language.LSP.Protocol.Internal.Types.TextDocumentClientCapabilities.TextDocumentClientCapabilities)
  , {-|
  Capabilities specific to the notebook document support.

  @since 3.17.0
  -}
  ClientCapabilities -> Maybe NotebookDocumentClientCapabilities
_notebookDocument :: (Maybe Language.LSP.Protocol.Internal.Types.NotebookDocumentClientCapabilities.NotebookDocumentClientCapabilities)
  , {-|
  Window specific client capabilities.
  -}
  ClientCapabilities -> Maybe WindowClientCapabilities
_window :: (Maybe Language.LSP.Protocol.Internal.Types.WindowClientCapabilities.WindowClientCapabilities)
  , {-|
  General client capabilities.

  @since 3.16.0
  -}
  ClientCapabilities -> Maybe GeneralClientCapabilities
_general :: (Maybe Language.LSP.Protocol.Internal.Types.GeneralClientCapabilities.GeneralClientCapabilities)
  , {-|
  Experimental client capabilities.
  -}
  ClientCapabilities -> Maybe Value
_experimental :: (Maybe Data.Aeson.Value)
  }
  deriving stock (Int -> ClientCapabilities -> ShowS
[ClientCapabilities] -> ShowS
ClientCapabilities -> String
(Int -> ClientCapabilities -> ShowS)
-> (ClientCapabilities -> String)
-> ([ClientCapabilities] -> ShowS)
-> Show ClientCapabilities
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ClientCapabilities -> ShowS
showsPrec :: Int -> ClientCapabilities -> ShowS
$cshow :: ClientCapabilities -> String
show :: ClientCapabilities -> String
$cshowList :: [ClientCapabilities] -> ShowS
showList :: [ClientCapabilities] -> ShowS
Show, ClientCapabilities -> ClientCapabilities -> Bool
(ClientCapabilities -> ClientCapabilities -> Bool)
-> (ClientCapabilities -> ClientCapabilities -> Bool)
-> Eq ClientCapabilities
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ClientCapabilities -> ClientCapabilities -> Bool
== :: ClientCapabilities -> ClientCapabilities -> Bool
$c/= :: ClientCapabilities -> ClientCapabilities -> Bool
/= :: ClientCapabilities -> ClientCapabilities -> Bool
Eq, Eq ClientCapabilities
Eq ClientCapabilities =>
(ClientCapabilities -> ClientCapabilities -> Ordering)
-> (ClientCapabilities -> ClientCapabilities -> Bool)
-> (ClientCapabilities -> ClientCapabilities -> Bool)
-> (ClientCapabilities -> ClientCapabilities -> Bool)
-> (ClientCapabilities -> ClientCapabilities -> Bool)
-> (ClientCapabilities -> ClientCapabilities -> ClientCapabilities)
-> (ClientCapabilities -> ClientCapabilities -> ClientCapabilities)
-> Ord ClientCapabilities
ClientCapabilities -> ClientCapabilities -> Bool
ClientCapabilities -> ClientCapabilities -> Ordering
ClientCapabilities -> ClientCapabilities -> ClientCapabilities
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: ClientCapabilities -> ClientCapabilities -> Ordering
compare :: ClientCapabilities -> ClientCapabilities -> Ordering
$c< :: ClientCapabilities -> ClientCapabilities -> Bool
< :: ClientCapabilities -> ClientCapabilities -> Bool
$c<= :: ClientCapabilities -> ClientCapabilities -> Bool
<= :: ClientCapabilities -> ClientCapabilities -> Bool
$c> :: ClientCapabilities -> ClientCapabilities -> Bool
> :: ClientCapabilities -> ClientCapabilities -> Bool
$c>= :: ClientCapabilities -> ClientCapabilities -> Bool
>= :: ClientCapabilities -> ClientCapabilities -> Bool
$cmax :: ClientCapabilities -> ClientCapabilities -> ClientCapabilities
max :: ClientCapabilities -> ClientCapabilities -> ClientCapabilities
$cmin :: ClientCapabilities -> ClientCapabilities -> ClientCapabilities
min :: ClientCapabilities -> ClientCapabilities -> ClientCapabilities
Ord, (forall x. ClientCapabilities -> Rep ClientCapabilities x)
-> (forall x. Rep ClientCapabilities x -> ClientCapabilities)
-> Generic ClientCapabilities
forall x. Rep ClientCapabilities x -> ClientCapabilities
forall x. ClientCapabilities -> Rep ClientCapabilities x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. ClientCapabilities -> Rep ClientCapabilities x
from :: forall x. ClientCapabilities -> Rep ClientCapabilities x
$cto :: forall x. Rep ClientCapabilities x -> ClientCapabilities
to :: forall x. Rep ClientCapabilities x -> ClientCapabilities
Generic)
  deriving anyclass (ClientCapabilities -> ()
(ClientCapabilities -> ()) -> NFData ClientCapabilities
forall a. (a -> ()) -> NFData a
$crnf :: ClientCapabilities -> ()
rnf :: ClientCapabilities -> ()
NFData, Eq ClientCapabilities
Eq ClientCapabilities =>
(Int -> ClientCapabilities -> Int)
-> (ClientCapabilities -> Int) -> Hashable ClientCapabilities
Int -> ClientCapabilities -> Int
ClientCapabilities -> Int
forall a. Eq a => (Int -> a -> Int) -> (a -> Int) -> Hashable a
$chashWithSalt :: Int -> ClientCapabilities -> Int
hashWithSalt :: Int -> ClientCapabilities -> Int
$chash :: ClientCapabilities -> Int
hash :: ClientCapabilities -> Int
Hashable)
  deriving (forall ann. ClientCapabilities -> Doc ann)
-> (forall ann. [ClientCapabilities] -> Doc ann)
-> Pretty ClientCapabilities
forall ann. [ClientCapabilities] -> Doc ann
forall ann. ClientCapabilities -> Doc ann
forall a.
(forall ann. a -> Doc ann)
-> (forall ann. [a] -> Doc ann) -> Pretty a
$cpretty :: forall ann. ClientCapabilities -> Doc ann
pretty :: forall ann. ClientCapabilities -> Doc ann
$cprettyList :: forall ann. [ClientCapabilities] -> Doc ann
prettyList :: forall ann. [ClientCapabilities] -> Doc ann
Pretty via (ViaJSON ClientCapabilities)

instance Aeson.ToJSON ClientCapabilities where
  toJSON :: ClientCapabilities -> Value
toJSON (ClientCapabilities Maybe WorkspaceClientCapabilities
arg0 Maybe TextDocumentClientCapabilities
arg1 Maybe NotebookDocumentClientCapabilities
arg2 Maybe WindowClientCapabilities
arg3 Maybe GeneralClientCapabilities
arg4 Maybe Value
arg5) = [Pair] -> Value
Aeson.object ([Pair] -> Value) -> [Pair] -> Value
forall a b. (a -> b) -> a -> b
$ [[Pair]] -> [Pair]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat ([[Pair]] -> [Pair]) -> [[Pair]] -> [Pair]
forall a b. (a -> b) -> a -> b
$  [String
"workspace" String -> Maybe WorkspaceClientCapabilities -> [Pair]
forall e kv v.
(KeyValue e kv, ToJSON v) =>
String -> Maybe v -> [kv]
Language.LSP.Protocol.Types.Common..=? Maybe WorkspaceClientCapabilities
arg0
    ,String
"textDocument" String -> Maybe TextDocumentClientCapabilities -> [Pair]
forall e kv v.
(KeyValue e kv, ToJSON v) =>
String -> Maybe v -> [kv]
Language.LSP.Protocol.Types.Common..=? Maybe TextDocumentClientCapabilities
arg1
    ,String
"notebookDocument" String -> Maybe NotebookDocumentClientCapabilities -> [Pair]
forall e kv v.
(KeyValue e kv, ToJSON v) =>
String -> Maybe v -> [kv]
Language.LSP.Protocol.Types.Common..=? Maybe NotebookDocumentClientCapabilities
arg2
    ,String
"window" String -> Maybe WindowClientCapabilities -> [Pair]
forall e kv v.
(KeyValue e kv, ToJSON v) =>
String -> Maybe v -> [kv]
Language.LSP.Protocol.Types.Common..=? Maybe WindowClientCapabilities
arg3
    ,String
"general" String -> Maybe GeneralClientCapabilities -> [Pair]
forall e kv v.
(KeyValue e kv, ToJSON v) =>
String -> Maybe v -> [kv]
Language.LSP.Protocol.Types.Common..=? Maybe GeneralClientCapabilities
arg4
    ,String
"experimental" String -> Maybe Value -> [Pair]
forall e kv v.
(KeyValue e kv, ToJSON v) =>
String -> Maybe v -> [kv]
Language.LSP.Protocol.Types.Common..=? Maybe Value
arg5]

instance Aeson.FromJSON ClientCapabilities where
  parseJSON :: Value -> Parser ClientCapabilities
parseJSON = String
-> (Object -> Parser ClientCapabilities)
-> Value
-> Parser ClientCapabilities
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Aeson.withObject String
"ClientCapabilities" ((Object -> Parser ClientCapabilities)
 -> Value -> Parser ClientCapabilities)
-> (Object -> Parser ClientCapabilities)
-> Value
-> Parser ClientCapabilities
forall a b. (a -> b) -> a -> b
$ \Object
arg -> Maybe WorkspaceClientCapabilities
-> Maybe TextDocumentClientCapabilities
-> Maybe NotebookDocumentClientCapabilities
-> Maybe WindowClientCapabilities
-> Maybe GeneralClientCapabilities
-> Maybe Value
-> ClientCapabilities
ClientCapabilities (Maybe WorkspaceClientCapabilities
 -> Maybe TextDocumentClientCapabilities
 -> Maybe NotebookDocumentClientCapabilities
 -> Maybe WindowClientCapabilities
 -> Maybe GeneralClientCapabilities
 -> Maybe Value
 -> ClientCapabilities)
-> Parser (Maybe WorkspaceClientCapabilities)
-> Parser
     (Maybe TextDocumentClientCapabilities
      -> Maybe NotebookDocumentClientCapabilities
      -> Maybe WindowClientCapabilities
      -> Maybe GeneralClientCapabilities
      -> Maybe Value
      -> ClientCapabilities)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
arg Object -> Key -> Parser (Maybe WorkspaceClientCapabilities)
forall v. FromJSON v => Object -> Key -> Parser (Maybe v)
Language.LSP.Protocol.Types.Common..:!? Key
"workspace" Parser
  (Maybe TextDocumentClientCapabilities
   -> Maybe NotebookDocumentClientCapabilities
   -> Maybe WindowClientCapabilities
   -> Maybe GeneralClientCapabilities
   -> Maybe Value
   -> ClientCapabilities)
-> Parser (Maybe TextDocumentClientCapabilities)
-> Parser
     (Maybe NotebookDocumentClientCapabilities
      -> Maybe WindowClientCapabilities
      -> Maybe GeneralClientCapabilities
      -> Maybe Value
      -> ClientCapabilities)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
arg Object -> Key -> Parser (Maybe TextDocumentClientCapabilities)
forall v. FromJSON v => Object -> Key -> Parser (Maybe v)
Language.LSP.Protocol.Types.Common..:!? Key
"textDocument" Parser
  (Maybe NotebookDocumentClientCapabilities
   -> Maybe WindowClientCapabilities
   -> Maybe GeneralClientCapabilities
   -> Maybe Value
   -> ClientCapabilities)
-> Parser (Maybe NotebookDocumentClientCapabilities)
-> Parser
     (Maybe WindowClientCapabilities
      -> Maybe GeneralClientCapabilities
      -> Maybe Value
      -> ClientCapabilities)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
arg Object -> Key -> Parser (Maybe NotebookDocumentClientCapabilities)
forall v. FromJSON v => Object -> Key -> Parser (Maybe v)
Language.LSP.Protocol.Types.Common..:!? Key
"notebookDocument" Parser
  (Maybe WindowClientCapabilities
   -> Maybe GeneralClientCapabilities
   -> Maybe Value
   -> ClientCapabilities)
-> Parser (Maybe WindowClientCapabilities)
-> Parser
     (Maybe GeneralClientCapabilities
      -> Maybe Value -> ClientCapabilities)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
arg Object -> Key -> Parser (Maybe WindowClientCapabilities)
forall v. FromJSON v => Object -> Key -> Parser (Maybe v)
Language.LSP.Protocol.Types.Common..:!? Key
"window" Parser
  (Maybe GeneralClientCapabilities
   -> Maybe Value -> ClientCapabilities)
-> Parser (Maybe GeneralClientCapabilities)
-> Parser (Maybe Value -> ClientCapabilities)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
arg Object -> Key -> Parser (Maybe GeneralClientCapabilities)
forall v. FromJSON v => Object -> Key -> Parser (Maybe v)
Language.LSP.Protocol.Types.Common..:!? Key
"general" Parser (Maybe Value -> ClientCapabilities)
-> Parser (Maybe Value) -> Parser ClientCapabilities
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
arg Object -> Key -> Parser (Maybe Value)
forall v. FromJSON v => Object -> Key -> Parser (Maybe v)
Language.LSP.Protocol.Types.Common..:!? Key
"experimental"