{- 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.InlineValueVariableLookup 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 Data.Text
import qualified Language.LSP.Protocol.Internal.Types.Range
import qualified Language.LSP.Protocol.Types.Common

{-|
Provide inline value through a variable lookup.
If only a range is specified, the variable name will be extracted from the underlying document.
An optional variable name can be used to override the extracted name.

@since 3.17.0
-}
data InlineValueVariableLookup = InlineValueVariableLookup 
  { {-|
  The document range for which the inline value applies.
  The range is used to extract the variable name from the underlying document.
  -}
  InlineValueVariableLookup -> Range
_range :: Language.LSP.Protocol.Internal.Types.Range.Range
  , {-|
  If specified the name of the variable to look up.
  -}
  InlineValueVariableLookup -> Maybe Text
_variableName :: (Maybe Data.Text.Text)
  , {-|
  How to perform the lookup.
  -}
  InlineValueVariableLookup -> Bool
_caseSensitiveLookup :: Bool
  }
  deriving stock (Int -> InlineValueVariableLookup -> ShowS
[InlineValueVariableLookup] -> ShowS
InlineValueVariableLookup -> String
(Int -> InlineValueVariableLookup -> ShowS)
-> (InlineValueVariableLookup -> String)
-> ([InlineValueVariableLookup] -> ShowS)
-> Show InlineValueVariableLookup
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> InlineValueVariableLookup -> ShowS
showsPrec :: Int -> InlineValueVariableLookup -> ShowS
$cshow :: InlineValueVariableLookup -> String
show :: InlineValueVariableLookup -> String
$cshowList :: [InlineValueVariableLookup] -> ShowS
showList :: [InlineValueVariableLookup] -> ShowS
Show, InlineValueVariableLookup -> InlineValueVariableLookup -> Bool
(InlineValueVariableLookup -> InlineValueVariableLookup -> Bool)
-> (InlineValueVariableLookup -> InlineValueVariableLookup -> Bool)
-> Eq InlineValueVariableLookup
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: InlineValueVariableLookup -> InlineValueVariableLookup -> Bool
== :: InlineValueVariableLookup -> InlineValueVariableLookup -> Bool
$c/= :: InlineValueVariableLookup -> InlineValueVariableLookup -> Bool
/= :: InlineValueVariableLookup -> InlineValueVariableLookup -> Bool
Eq, Eq InlineValueVariableLookup
Eq InlineValueVariableLookup =>
(InlineValueVariableLookup
 -> InlineValueVariableLookup -> Ordering)
-> (InlineValueVariableLookup -> InlineValueVariableLookup -> Bool)
-> (InlineValueVariableLookup -> InlineValueVariableLookup -> Bool)
-> (InlineValueVariableLookup -> InlineValueVariableLookup -> Bool)
-> (InlineValueVariableLookup -> InlineValueVariableLookup -> Bool)
-> (InlineValueVariableLookup
    -> InlineValueVariableLookup -> InlineValueVariableLookup)
-> (InlineValueVariableLookup
    -> InlineValueVariableLookup -> InlineValueVariableLookup)
-> Ord InlineValueVariableLookup
InlineValueVariableLookup -> InlineValueVariableLookup -> Bool
InlineValueVariableLookup -> InlineValueVariableLookup -> Ordering
InlineValueVariableLookup
-> InlineValueVariableLookup -> InlineValueVariableLookup
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 :: InlineValueVariableLookup -> InlineValueVariableLookup -> Ordering
compare :: InlineValueVariableLookup -> InlineValueVariableLookup -> Ordering
$c< :: InlineValueVariableLookup -> InlineValueVariableLookup -> Bool
< :: InlineValueVariableLookup -> InlineValueVariableLookup -> Bool
$c<= :: InlineValueVariableLookup -> InlineValueVariableLookup -> Bool
<= :: InlineValueVariableLookup -> InlineValueVariableLookup -> Bool
$c> :: InlineValueVariableLookup -> InlineValueVariableLookup -> Bool
> :: InlineValueVariableLookup -> InlineValueVariableLookup -> Bool
$c>= :: InlineValueVariableLookup -> InlineValueVariableLookup -> Bool
>= :: InlineValueVariableLookup -> InlineValueVariableLookup -> Bool
$cmax :: InlineValueVariableLookup
-> InlineValueVariableLookup -> InlineValueVariableLookup
max :: InlineValueVariableLookup
-> InlineValueVariableLookup -> InlineValueVariableLookup
$cmin :: InlineValueVariableLookup
-> InlineValueVariableLookup -> InlineValueVariableLookup
min :: InlineValueVariableLookup
-> InlineValueVariableLookup -> InlineValueVariableLookup
Ord, (forall x.
 InlineValueVariableLookup -> Rep InlineValueVariableLookup x)
-> (forall x.
    Rep InlineValueVariableLookup x -> InlineValueVariableLookup)
-> Generic InlineValueVariableLookup
forall x.
Rep InlineValueVariableLookup x -> InlineValueVariableLookup
forall x.
InlineValueVariableLookup -> Rep InlineValueVariableLookup x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x.
InlineValueVariableLookup -> Rep InlineValueVariableLookup x
from :: forall x.
InlineValueVariableLookup -> Rep InlineValueVariableLookup x
$cto :: forall x.
Rep InlineValueVariableLookup x -> InlineValueVariableLookup
to :: forall x.
Rep InlineValueVariableLookup x -> InlineValueVariableLookup
Generic)
  deriving anyclass (InlineValueVariableLookup -> ()
(InlineValueVariableLookup -> ())
-> NFData InlineValueVariableLookup
forall a. (a -> ()) -> NFData a
$crnf :: InlineValueVariableLookup -> ()
rnf :: InlineValueVariableLookup -> ()
NFData, Eq InlineValueVariableLookup
Eq InlineValueVariableLookup =>
(Int -> InlineValueVariableLookup -> Int)
-> (InlineValueVariableLookup -> Int)
-> Hashable InlineValueVariableLookup
Int -> InlineValueVariableLookup -> Int
InlineValueVariableLookup -> Int
forall a. Eq a => (Int -> a -> Int) -> (a -> Int) -> Hashable a
$chashWithSalt :: Int -> InlineValueVariableLookup -> Int
hashWithSalt :: Int -> InlineValueVariableLookup -> Int
$chash :: InlineValueVariableLookup -> Int
hash :: InlineValueVariableLookup -> Int
Hashable)
  deriving (forall ann. InlineValueVariableLookup -> Doc ann)
-> (forall ann. [InlineValueVariableLookup] -> Doc ann)
-> Pretty InlineValueVariableLookup
forall ann. [InlineValueVariableLookup] -> Doc ann
forall ann. InlineValueVariableLookup -> Doc ann
forall a.
(forall ann. a -> Doc ann)
-> (forall ann. [a] -> Doc ann) -> Pretty a
$cpretty :: forall ann. InlineValueVariableLookup -> Doc ann
pretty :: forall ann. InlineValueVariableLookup -> Doc ann
$cprettyList :: forall ann. [InlineValueVariableLookup] -> Doc ann
prettyList :: forall ann. [InlineValueVariableLookup] -> Doc ann
Pretty via (ViaJSON InlineValueVariableLookup)

instance Aeson.ToJSON InlineValueVariableLookup where
  toJSON :: InlineValueVariableLookup -> Value
toJSON (InlineValueVariableLookup Range
arg0 Maybe Text
arg1 Bool
arg2) = [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
$  [[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
arg0]
    ,String
"variableName" String -> Maybe Text -> [Pair]
forall e kv v.
(KeyValue e kv, ToJSON v) =>
String -> Maybe v -> [kv]
Language.LSP.Protocol.Types.Common..=? Maybe Text
arg1
    ,[Key
"caseSensitiveLookup" Key -> Bool -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
Aeson..= Bool
arg2]]

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