{- 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.ClientSymbolKindOptions where

import Control.DeepSeq
import Data.Hashable
import GHC.Generics
import Language.LSP.Protocol.Utils.Misc
import Prettyprinter
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.SymbolKind
import qualified Language.LSP.Protocol.Types.Common

{-|
@since 3.18.0
@proposed
-}
data ClientSymbolKindOptions = ClientSymbolKindOptions 
  { {-|
  The symbol kind values the client supports. When this
  property exists the client also guarantees that it will
  handle values outside its set gracefully and falls back
  to a default value when unknown.

  If this property is not present the client only supports
  the symbol kinds from `File` to `Array` as defined in
  the initial version of the protocol.
  -}
  ClientSymbolKindOptions -> Maybe [SymbolKind]
_valueSet :: (Maybe [Language.LSP.Protocol.Internal.Types.SymbolKind.SymbolKind])
  }
  deriving stock (Int -> ClientSymbolKindOptions -> ShowS
[ClientSymbolKindOptions] -> ShowS
ClientSymbolKindOptions -> String
(Int -> ClientSymbolKindOptions -> ShowS)
-> (ClientSymbolKindOptions -> String)
-> ([ClientSymbolKindOptions] -> ShowS)
-> Show ClientSymbolKindOptions
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ClientSymbolKindOptions -> ShowS
showsPrec :: Int -> ClientSymbolKindOptions -> ShowS
$cshow :: ClientSymbolKindOptions -> String
show :: ClientSymbolKindOptions -> String
$cshowList :: [ClientSymbolKindOptions] -> ShowS
showList :: [ClientSymbolKindOptions] -> ShowS
Show, ClientSymbolKindOptions -> ClientSymbolKindOptions -> Bool
(ClientSymbolKindOptions -> ClientSymbolKindOptions -> Bool)
-> (ClientSymbolKindOptions -> ClientSymbolKindOptions -> Bool)
-> Eq ClientSymbolKindOptions
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ClientSymbolKindOptions -> ClientSymbolKindOptions -> Bool
== :: ClientSymbolKindOptions -> ClientSymbolKindOptions -> Bool
$c/= :: ClientSymbolKindOptions -> ClientSymbolKindOptions -> Bool
/= :: ClientSymbolKindOptions -> ClientSymbolKindOptions -> Bool
Eq, Eq ClientSymbolKindOptions
Eq ClientSymbolKindOptions =>
(ClientSymbolKindOptions -> ClientSymbolKindOptions -> Ordering)
-> (ClientSymbolKindOptions -> ClientSymbolKindOptions -> Bool)
-> (ClientSymbolKindOptions -> ClientSymbolKindOptions -> Bool)
-> (ClientSymbolKindOptions -> ClientSymbolKindOptions -> Bool)
-> (ClientSymbolKindOptions -> ClientSymbolKindOptions -> Bool)
-> (ClientSymbolKindOptions
    -> ClientSymbolKindOptions -> ClientSymbolKindOptions)
-> (ClientSymbolKindOptions
    -> ClientSymbolKindOptions -> ClientSymbolKindOptions)
-> Ord ClientSymbolKindOptions
ClientSymbolKindOptions -> ClientSymbolKindOptions -> Bool
ClientSymbolKindOptions -> ClientSymbolKindOptions -> Ordering
ClientSymbolKindOptions
-> ClientSymbolKindOptions -> ClientSymbolKindOptions
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 :: ClientSymbolKindOptions -> ClientSymbolKindOptions -> Ordering
compare :: ClientSymbolKindOptions -> ClientSymbolKindOptions -> Ordering
$c< :: ClientSymbolKindOptions -> ClientSymbolKindOptions -> Bool
< :: ClientSymbolKindOptions -> ClientSymbolKindOptions -> Bool
$c<= :: ClientSymbolKindOptions -> ClientSymbolKindOptions -> Bool
<= :: ClientSymbolKindOptions -> ClientSymbolKindOptions -> Bool
$c> :: ClientSymbolKindOptions -> ClientSymbolKindOptions -> Bool
> :: ClientSymbolKindOptions -> ClientSymbolKindOptions -> Bool
$c>= :: ClientSymbolKindOptions -> ClientSymbolKindOptions -> Bool
>= :: ClientSymbolKindOptions -> ClientSymbolKindOptions -> Bool
$cmax :: ClientSymbolKindOptions
-> ClientSymbolKindOptions -> ClientSymbolKindOptions
max :: ClientSymbolKindOptions
-> ClientSymbolKindOptions -> ClientSymbolKindOptions
$cmin :: ClientSymbolKindOptions
-> ClientSymbolKindOptions -> ClientSymbolKindOptions
min :: ClientSymbolKindOptions
-> ClientSymbolKindOptions -> ClientSymbolKindOptions
Ord, (forall x.
 ClientSymbolKindOptions -> Rep ClientSymbolKindOptions x)
-> (forall x.
    Rep ClientSymbolKindOptions x -> ClientSymbolKindOptions)
-> Generic ClientSymbolKindOptions
forall x. Rep ClientSymbolKindOptions x -> ClientSymbolKindOptions
forall x. ClientSymbolKindOptions -> Rep ClientSymbolKindOptions x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. ClientSymbolKindOptions -> Rep ClientSymbolKindOptions x
from :: forall x. ClientSymbolKindOptions -> Rep ClientSymbolKindOptions x
$cto :: forall x. Rep ClientSymbolKindOptions x -> ClientSymbolKindOptions
to :: forall x. Rep ClientSymbolKindOptions x -> ClientSymbolKindOptions
Generic)
  deriving anyclass (ClientSymbolKindOptions -> ()
(ClientSymbolKindOptions -> ()) -> NFData ClientSymbolKindOptions
forall a. (a -> ()) -> NFData a
$crnf :: ClientSymbolKindOptions -> ()
rnf :: ClientSymbolKindOptions -> ()
NFData, Eq ClientSymbolKindOptions
Eq ClientSymbolKindOptions =>
(Int -> ClientSymbolKindOptions -> Int)
-> (ClientSymbolKindOptions -> Int)
-> Hashable ClientSymbolKindOptions
Int -> ClientSymbolKindOptions -> Int
ClientSymbolKindOptions -> Int
forall a. Eq a => (Int -> a -> Int) -> (a -> Int) -> Hashable a
$chashWithSalt :: Int -> ClientSymbolKindOptions -> Int
hashWithSalt :: Int -> ClientSymbolKindOptions -> Int
$chash :: ClientSymbolKindOptions -> Int
hash :: ClientSymbolKindOptions -> Int
Hashable)
  deriving (forall ann. ClientSymbolKindOptions -> Doc ann)
-> (forall ann. [ClientSymbolKindOptions] -> Doc ann)
-> Pretty ClientSymbolKindOptions
forall ann. [ClientSymbolKindOptions] -> Doc ann
forall ann. ClientSymbolKindOptions -> Doc ann
forall a.
(forall ann. a -> Doc ann)
-> (forall ann. [a] -> Doc ann) -> Pretty a
$cpretty :: forall ann. ClientSymbolKindOptions -> Doc ann
pretty :: forall ann. ClientSymbolKindOptions -> Doc ann
$cprettyList :: forall ann. [ClientSymbolKindOptions] -> Doc ann
prettyList :: forall ann. [ClientSymbolKindOptions] -> Doc ann
Pretty via (ViaJSON ClientSymbolKindOptions)

instance Aeson.ToJSON ClientSymbolKindOptions where
  toJSON :: ClientSymbolKindOptions -> Value
toJSON (ClientSymbolKindOptions Maybe [SymbolKind]
arg0) = [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
"valueSet" String -> Maybe [SymbolKind] -> [Pair]
forall e kv v.
(KeyValue e kv, ToJSON v) =>
String -> Maybe v -> [kv]
Language.LSP.Protocol.Types.Common..=? Maybe [SymbolKind]
arg0]

instance Aeson.FromJSON ClientSymbolKindOptions where
  parseJSON :: Value -> Parser ClientSymbolKindOptions
parseJSON = String
-> (Object -> Parser ClientSymbolKindOptions)
-> Value
-> Parser ClientSymbolKindOptions
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Aeson.withObject String
"ClientSymbolKindOptions" ((Object -> Parser ClientSymbolKindOptions)
 -> Value -> Parser ClientSymbolKindOptions)
-> (Object -> Parser ClientSymbolKindOptions)
-> Value
-> Parser ClientSymbolKindOptions
forall a b. (a -> b) -> a -> b
$ \Object
arg -> Maybe [SymbolKind] -> ClientSymbolKindOptions
ClientSymbolKindOptions (Maybe [SymbolKind] -> ClientSymbolKindOptions)
-> Parser (Maybe [SymbolKind]) -> Parser ClientSymbolKindOptions
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
arg Object -> Key -> Parser (Maybe [SymbolKind])
forall v. FromJSON v => Object -> Key -> Parser (Maybe v)
Language.LSP.Protocol.Types.Common..:!? Key
"valueSet"