{- 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.SemanticTokensRangeParams 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.ProgressToken
import qualified Language.LSP.Protocol.Internal.Types.Range
import qualified Language.LSP.Protocol.Internal.Types.TextDocumentIdentifier
import qualified Language.LSP.Protocol.Types.Common

{-|
@since 3.16.0
-}
data SemanticTokensRangeParams = SemanticTokensRangeParams 
  { {-|
  An optional token that a server can use to report work done progress.
  -}
  SemanticTokensRangeParams -> Maybe ProgressToken
_workDoneToken :: (Maybe Language.LSP.Protocol.Internal.Types.ProgressToken.ProgressToken)
  , {-|
  An optional token that a server can use to report partial results (e.g. streaming) to
  the client.
  -}
  SemanticTokensRangeParams -> Maybe ProgressToken
_partialResultToken :: (Maybe Language.LSP.Protocol.Internal.Types.ProgressToken.ProgressToken)
  , {-|
  The text document.
  -}
  SemanticTokensRangeParams -> TextDocumentIdentifier
_textDocument :: Language.LSP.Protocol.Internal.Types.TextDocumentIdentifier.TextDocumentIdentifier
  , {-|
  The range the semantic tokens are requested for.
  -}
  SemanticTokensRangeParams -> Range
_range :: Language.LSP.Protocol.Internal.Types.Range.Range
  }
  deriving stock (Int -> SemanticTokensRangeParams -> ShowS
[SemanticTokensRangeParams] -> ShowS
SemanticTokensRangeParams -> String
(Int -> SemanticTokensRangeParams -> ShowS)
-> (SemanticTokensRangeParams -> String)
-> ([SemanticTokensRangeParams] -> ShowS)
-> Show SemanticTokensRangeParams
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> SemanticTokensRangeParams -> ShowS
showsPrec :: Int -> SemanticTokensRangeParams -> ShowS
$cshow :: SemanticTokensRangeParams -> String
show :: SemanticTokensRangeParams -> String
$cshowList :: [SemanticTokensRangeParams] -> ShowS
showList :: [SemanticTokensRangeParams] -> ShowS
Show, SemanticTokensRangeParams -> SemanticTokensRangeParams -> Bool
(SemanticTokensRangeParams -> SemanticTokensRangeParams -> Bool)
-> (SemanticTokensRangeParams -> SemanticTokensRangeParams -> Bool)
-> Eq SemanticTokensRangeParams
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SemanticTokensRangeParams -> SemanticTokensRangeParams -> Bool
== :: SemanticTokensRangeParams -> SemanticTokensRangeParams -> Bool
$c/= :: SemanticTokensRangeParams -> SemanticTokensRangeParams -> Bool
/= :: SemanticTokensRangeParams -> SemanticTokensRangeParams -> Bool
Eq, Eq SemanticTokensRangeParams
Eq SemanticTokensRangeParams =>
(SemanticTokensRangeParams
 -> SemanticTokensRangeParams -> Ordering)
-> (SemanticTokensRangeParams -> SemanticTokensRangeParams -> Bool)
-> (SemanticTokensRangeParams -> SemanticTokensRangeParams -> Bool)
-> (SemanticTokensRangeParams -> SemanticTokensRangeParams -> Bool)
-> (SemanticTokensRangeParams -> SemanticTokensRangeParams -> Bool)
-> (SemanticTokensRangeParams
    -> SemanticTokensRangeParams -> SemanticTokensRangeParams)
-> (SemanticTokensRangeParams
    -> SemanticTokensRangeParams -> SemanticTokensRangeParams)
-> Ord SemanticTokensRangeParams
SemanticTokensRangeParams -> SemanticTokensRangeParams -> Bool
SemanticTokensRangeParams -> SemanticTokensRangeParams -> Ordering
SemanticTokensRangeParams
-> SemanticTokensRangeParams -> SemanticTokensRangeParams
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 :: SemanticTokensRangeParams -> SemanticTokensRangeParams -> Ordering
compare :: SemanticTokensRangeParams -> SemanticTokensRangeParams -> Ordering
$c< :: SemanticTokensRangeParams -> SemanticTokensRangeParams -> Bool
< :: SemanticTokensRangeParams -> SemanticTokensRangeParams -> Bool
$c<= :: SemanticTokensRangeParams -> SemanticTokensRangeParams -> Bool
<= :: SemanticTokensRangeParams -> SemanticTokensRangeParams -> Bool
$c> :: SemanticTokensRangeParams -> SemanticTokensRangeParams -> Bool
> :: SemanticTokensRangeParams -> SemanticTokensRangeParams -> Bool
$c>= :: SemanticTokensRangeParams -> SemanticTokensRangeParams -> Bool
>= :: SemanticTokensRangeParams -> SemanticTokensRangeParams -> Bool
$cmax :: SemanticTokensRangeParams
-> SemanticTokensRangeParams -> SemanticTokensRangeParams
max :: SemanticTokensRangeParams
-> SemanticTokensRangeParams -> SemanticTokensRangeParams
$cmin :: SemanticTokensRangeParams
-> SemanticTokensRangeParams -> SemanticTokensRangeParams
min :: SemanticTokensRangeParams
-> SemanticTokensRangeParams -> SemanticTokensRangeParams
Ord, (forall x.
 SemanticTokensRangeParams -> Rep SemanticTokensRangeParams x)
-> (forall x.
    Rep SemanticTokensRangeParams x -> SemanticTokensRangeParams)
-> Generic SemanticTokensRangeParams
forall x.
Rep SemanticTokensRangeParams x -> SemanticTokensRangeParams
forall x.
SemanticTokensRangeParams -> Rep SemanticTokensRangeParams x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x.
SemanticTokensRangeParams -> Rep SemanticTokensRangeParams x
from :: forall x.
SemanticTokensRangeParams -> Rep SemanticTokensRangeParams x
$cto :: forall x.
Rep SemanticTokensRangeParams x -> SemanticTokensRangeParams
to :: forall x.
Rep SemanticTokensRangeParams x -> SemanticTokensRangeParams
Generic)
  deriving anyclass (SemanticTokensRangeParams -> ()
(SemanticTokensRangeParams -> ())
-> NFData SemanticTokensRangeParams
forall a. (a -> ()) -> NFData a
$crnf :: SemanticTokensRangeParams -> ()
rnf :: SemanticTokensRangeParams -> ()
NFData, Eq SemanticTokensRangeParams
Eq SemanticTokensRangeParams =>
(Int -> SemanticTokensRangeParams -> Int)
-> (SemanticTokensRangeParams -> Int)
-> Hashable SemanticTokensRangeParams
Int -> SemanticTokensRangeParams -> Int
SemanticTokensRangeParams -> Int
forall a. Eq a => (Int -> a -> Int) -> (a -> Int) -> Hashable a
$chashWithSalt :: Int -> SemanticTokensRangeParams -> Int
hashWithSalt :: Int -> SemanticTokensRangeParams -> Int
$chash :: SemanticTokensRangeParams -> Int
hash :: SemanticTokensRangeParams -> Int
Hashable)
  deriving (forall ann. SemanticTokensRangeParams -> Doc ann)
-> (forall ann. [SemanticTokensRangeParams] -> Doc ann)
-> Pretty SemanticTokensRangeParams
forall ann. [SemanticTokensRangeParams] -> Doc ann
forall ann. SemanticTokensRangeParams -> Doc ann
forall a.
(forall ann. a -> Doc ann)
-> (forall ann. [a] -> Doc ann) -> Pretty a
$cpretty :: forall ann. SemanticTokensRangeParams -> Doc ann
pretty :: forall ann. SemanticTokensRangeParams -> Doc ann
$cprettyList :: forall ann. [SemanticTokensRangeParams] -> Doc ann
prettyList :: forall ann. [SemanticTokensRangeParams] -> Doc ann
Pretty via (ViaJSON SemanticTokensRangeParams)

instance Aeson.ToJSON SemanticTokensRangeParams where
  toJSON :: SemanticTokensRangeParams -> Value
toJSON (SemanticTokensRangeParams Maybe ProgressToken
arg0 Maybe ProgressToken
arg1 TextDocumentIdentifier
arg2 Range
arg3) = [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
"workDoneToken" String -> Maybe ProgressToken -> [Pair]
forall e kv v.
(KeyValue e kv, ToJSON v) =>
String -> Maybe v -> [kv]
Language.LSP.Protocol.Types.Common..=? Maybe ProgressToken
arg0
    ,String
"partialResultToken" String -> Maybe ProgressToken -> [Pair]
forall e kv v.
(KeyValue e kv, ToJSON v) =>
String -> Maybe v -> [kv]
Language.LSP.Protocol.Types.Common..=? Maybe ProgressToken
arg1
    ,[Key
"textDocument" Key -> TextDocumentIdentifier -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
Aeson..= TextDocumentIdentifier
arg2]
    ,[Key
"range" Key -> Range -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
Aeson..= Range
arg3]]

instance Aeson.FromJSON SemanticTokensRangeParams where
  parseJSON :: Value -> Parser SemanticTokensRangeParams
parseJSON = String
-> (Object -> Parser SemanticTokensRangeParams)
-> Value
-> Parser SemanticTokensRangeParams
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Aeson.withObject String
"SemanticTokensRangeParams" ((Object -> Parser SemanticTokensRangeParams)
 -> Value -> Parser SemanticTokensRangeParams)
-> (Object -> Parser SemanticTokensRangeParams)
-> Value
-> Parser SemanticTokensRangeParams
forall a b. (a -> b) -> a -> b
$ \Object
arg -> Maybe ProgressToken
-> Maybe ProgressToken
-> TextDocumentIdentifier
-> Range
-> SemanticTokensRangeParams
SemanticTokensRangeParams (Maybe ProgressToken
 -> Maybe ProgressToken
 -> TextDocumentIdentifier
 -> Range
 -> SemanticTokensRangeParams)
-> Parser (Maybe ProgressToken)
-> Parser
     (Maybe ProgressToken
      -> TextDocumentIdentifier -> Range -> SemanticTokensRangeParams)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
arg Object -> Key -> Parser (Maybe ProgressToken)
forall v. FromJSON v => Object -> Key -> Parser (Maybe v)
Language.LSP.Protocol.Types.Common..:!? Key
"workDoneToken" Parser
  (Maybe ProgressToken
   -> TextDocumentIdentifier -> Range -> SemanticTokensRangeParams)
-> Parser (Maybe ProgressToken)
-> Parser
     (TextDocumentIdentifier -> Range -> SemanticTokensRangeParams)
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 ProgressToken)
forall v. FromJSON v => Object -> Key -> Parser (Maybe v)
Language.LSP.Protocol.Types.Common..:!? Key
"partialResultToken" Parser
  (TextDocumentIdentifier -> Range -> SemanticTokensRangeParams)
-> Parser TextDocumentIdentifier
-> Parser (Range -> SemanticTokensRangeParams)
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 TextDocumentIdentifier
forall a. FromJSON a => Object -> Key -> Parser a
Aeson..: Key
"textDocument" Parser (Range -> SemanticTokensRangeParams)
-> Parser Range -> Parser SemanticTokensRangeParams
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 Range
forall a. FromJSON a => Object -> Key -> Parser a
Aeson..: Key
"range"