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

{-|
In many cases the items of an actual completion result share the same
value for properties like `commitCharacters` or the range of a text
edit. A completion list can therefore define item defaults which will
be used if a completion item itself doesn't specify the value.

If a completion list specifies a default value and a completion item
also specifies a corresponding value the one from the item is used.

Servers are only allowed to return default values if the client
signals support for this via the `completionList.itemDefaults`
capability.

@since 3.17.0
-}
data CompletionItemDefaults = CompletionItemDefaults 
  { {-|
  A default commit character set.

  @since 3.17.0
  -}
  CompletionItemDefaults -> Maybe [Text]
_commitCharacters :: (Maybe [Data.Text.Text])
  , {-|
  A default edit range.

  @since 3.17.0
  -}
  CompletionItemDefaults
-> Maybe (Range |? EditRangeWithInsertReplace)
_editRange :: (Maybe (Language.LSP.Protocol.Internal.Types.Range.Range Language.LSP.Protocol.Types.Common.|? Language.LSP.Protocol.Internal.Types.EditRangeWithInsertReplace.EditRangeWithInsertReplace))
  , {-|
  A default insert text format.

  @since 3.17.0
  -}
  CompletionItemDefaults -> Maybe InsertTextFormat
_insertTextFormat :: (Maybe Language.LSP.Protocol.Internal.Types.InsertTextFormat.InsertTextFormat)
  , {-|
  A default insert text mode.

  @since 3.17.0
  -}
  CompletionItemDefaults -> Maybe InsertTextMode
_insertTextMode :: (Maybe Language.LSP.Protocol.Internal.Types.InsertTextMode.InsertTextMode)
  , {-|
  A default data value.

  @since 3.17.0
  -}
  CompletionItemDefaults -> Maybe Value
_data_ :: (Maybe Data.Aeson.Value)
  }
  deriving stock (Int -> CompletionItemDefaults -> ShowS
[CompletionItemDefaults] -> ShowS
CompletionItemDefaults -> String
(Int -> CompletionItemDefaults -> ShowS)
-> (CompletionItemDefaults -> String)
-> ([CompletionItemDefaults] -> ShowS)
-> Show CompletionItemDefaults
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> CompletionItemDefaults -> ShowS
showsPrec :: Int -> CompletionItemDefaults -> ShowS
$cshow :: CompletionItemDefaults -> String
show :: CompletionItemDefaults -> String
$cshowList :: [CompletionItemDefaults] -> ShowS
showList :: [CompletionItemDefaults] -> ShowS
Show, CompletionItemDefaults -> CompletionItemDefaults -> Bool
(CompletionItemDefaults -> CompletionItemDefaults -> Bool)
-> (CompletionItemDefaults -> CompletionItemDefaults -> Bool)
-> Eq CompletionItemDefaults
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: CompletionItemDefaults -> CompletionItemDefaults -> Bool
== :: CompletionItemDefaults -> CompletionItemDefaults -> Bool
$c/= :: CompletionItemDefaults -> CompletionItemDefaults -> Bool
/= :: CompletionItemDefaults -> CompletionItemDefaults -> Bool
Eq, Eq CompletionItemDefaults
Eq CompletionItemDefaults =>
(CompletionItemDefaults -> CompletionItemDefaults -> Ordering)
-> (CompletionItemDefaults -> CompletionItemDefaults -> Bool)
-> (CompletionItemDefaults -> CompletionItemDefaults -> Bool)
-> (CompletionItemDefaults -> CompletionItemDefaults -> Bool)
-> (CompletionItemDefaults -> CompletionItemDefaults -> Bool)
-> (CompletionItemDefaults
    -> CompletionItemDefaults -> CompletionItemDefaults)
-> (CompletionItemDefaults
    -> CompletionItemDefaults -> CompletionItemDefaults)
-> Ord CompletionItemDefaults
CompletionItemDefaults -> CompletionItemDefaults -> Bool
CompletionItemDefaults -> CompletionItemDefaults -> Ordering
CompletionItemDefaults
-> CompletionItemDefaults -> CompletionItemDefaults
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 :: CompletionItemDefaults -> CompletionItemDefaults -> Ordering
compare :: CompletionItemDefaults -> CompletionItemDefaults -> Ordering
$c< :: CompletionItemDefaults -> CompletionItemDefaults -> Bool
< :: CompletionItemDefaults -> CompletionItemDefaults -> Bool
$c<= :: CompletionItemDefaults -> CompletionItemDefaults -> Bool
<= :: CompletionItemDefaults -> CompletionItemDefaults -> Bool
$c> :: CompletionItemDefaults -> CompletionItemDefaults -> Bool
> :: CompletionItemDefaults -> CompletionItemDefaults -> Bool
$c>= :: CompletionItemDefaults -> CompletionItemDefaults -> Bool
>= :: CompletionItemDefaults -> CompletionItemDefaults -> Bool
$cmax :: CompletionItemDefaults
-> CompletionItemDefaults -> CompletionItemDefaults
max :: CompletionItemDefaults
-> CompletionItemDefaults -> CompletionItemDefaults
$cmin :: CompletionItemDefaults
-> CompletionItemDefaults -> CompletionItemDefaults
min :: CompletionItemDefaults
-> CompletionItemDefaults -> CompletionItemDefaults
Ord, (forall x. CompletionItemDefaults -> Rep CompletionItemDefaults x)
-> (forall x.
    Rep CompletionItemDefaults x -> CompletionItemDefaults)
-> Generic CompletionItemDefaults
forall x. Rep CompletionItemDefaults x -> CompletionItemDefaults
forall x. CompletionItemDefaults -> Rep CompletionItemDefaults x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. CompletionItemDefaults -> Rep CompletionItemDefaults x
from :: forall x. CompletionItemDefaults -> Rep CompletionItemDefaults x
$cto :: forall x. Rep CompletionItemDefaults x -> CompletionItemDefaults
to :: forall x. Rep CompletionItemDefaults x -> CompletionItemDefaults
Generic)
  deriving anyclass (CompletionItemDefaults -> ()
(CompletionItemDefaults -> ()) -> NFData CompletionItemDefaults
forall a. (a -> ()) -> NFData a
$crnf :: CompletionItemDefaults -> ()
rnf :: CompletionItemDefaults -> ()
NFData, Eq CompletionItemDefaults
Eq CompletionItemDefaults =>
(Int -> CompletionItemDefaults -> Int)
-> (CompletionItemDefaults -> Int)
-> Hashable CompletionItemDefaults
Int -> CompletionItemDefaults -> Int
CompletionItemDefaults -> Int
forall a. Eq a => (Int -> a -> Int) -> (a -> Int) -> Hashable a
$chashWithSalt :: Int -> CompletionItemDefaults -> Int
hashWithSalt :: Int -> CompletionItemDefaults -> Int
$chash :: CompletionItemDefaults -> Int
hash :: CompletionItemDefaults -> Int
Hashable)
  deriving (forall ann. CompletionItemDefaults -> Doc ann)
-> (forall ann. [CompletionItemDefaults] -> Doc ann)
-> Pretty CompletionItemDefaults
forall ann. [CompletionItemDefaults] -> Doc ann
forall ann. CompletionItemDefaults -> Doc ann
forall a.
(forall ann. a -> Doc ann)
-> (forall ann. [a] -> Doc ann) -> Pretty a
$cpretty :: forall ann. CompletionItemDefaults -> Doc ann
pretty :: forall ann. CompletionItemDefaults -> Doc ann
$cprettyList :: forall ann. [CompletionItemDefaults] -> Doc ann
prettyList :: forall ann. [CompletionItemDefaults] -> Doc ann
Pretty via (ViaJSON CompletionItemDefaults)

instance Aeson.ToJSON CompletionItemDefaults where
  toJSON :: CompletionItemDefaults -> Value
toJSON (CompletionItemDefaults Maybe [Text]
arg0 Maybe (Range |? EditRangeWithInsertReplace)
arg1 Maybe InsertTextFormat
arg2 Maybe InsertTextMode
arg3 Maybe Value
arg4) = [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
"commitCharacters" String -> Maybe [Text] -> [Pair]
forall e kv v.
(KeyValue e kv, ToJSON v) =>
String -> Maybe v -> [kv]
Language.LSP.Protocol.Types.Common..=? Maybe [Text]
arg0
    ,String
"editRange" String -> Maybe (Range |? EditRangeWithInsertReplace) -> [Pair]
forall e kv v.
(KeyValue e kv, ToJSON v) =>
String -> Maybe v -> [kv]
Language.LSP.Protocol.Types.Common..=? Maybe (Range |? EditRangeWithInsertReplace)
arg1
    ,String
"insertTextFormat" String -> Maybe InsertTextFormat -> [Pair]
forall e kv v.
(KeyValue e kv, ToJSON v) =>
String -> Maybe v -> [kv]
Language.LSP.Protocol.Types.Common..=? Maybe InsertTextFormat
arg2
    ,String
"insertTextMode" String -> Maybe InsertTextMode -> [Pair]
forall e kv v.
(KeyValue e kv, ToJSON v) =>
String -> Maybe v -> [kv]
Language.LSP.Protocol.Types.Common..=? Maybe InsertTextMode
arg3
    ,String
"data" String -> Maybe Value -> [Pair]
forall e kv v.
(KeyValue e kv, ToJSON v) =>
String -> Maybe v -> [kv]
Language.LSP.Protocol.Types.Common..=? Maybe Value
arg4]

instance Aeson.FromJSON CompletionItemDefaults where
  parseJSON :: Value -> Parser CompletionItemDefaults
parseJSON = String
-> (Object -> Parser CompletionItemDefaults)
-> Value
-> Parser CompletionItemDefaults
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Aeson.withObject String
"CompletionItemDefaults" ((Object -> Parser CompletionItemDefaults)
 -> Value -> Parser CompletionItemDefaults)
-> (Object -> Parser CompletionItemDefaults)
-> Value
-> Parser CompletionItemDefaults
forall a b. (a -> b) -> a -> b
$ \Object
arg -> Maybe [Text]
-> Maybe (Range |? EditRangeWithInsertReplace)
-> Maybe InsertTextFormat
-> Maybe InsertTextMode
-> Maybe Value
-> CompletionItemDefaults
CompletionItemDefaults (Maybe [Text]
 -> Maybe (Range |? EditRangeWithInsertReplace)
 -> Maybe InsertTextFormat
 -> Maybe InsertTextMode
 -> Maybe Value
 -> CompletionItemDefaults)
-> Parser (Maybe [Text])
-> Parser
     (Maybe (Range |? EditRangeWithInsertReplace)
      -> Maybe InsertTextFormat
      -> Maybe InsertTextMode
      -> Maybe Value
      -> CompletionItemDefaults)
forall (f :: * -> *) a b. Functor 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
"commitCharacters" Parser
  (Maybe (Range |? EditRangeWithInsertReplace)
   -> Maybe InsertTextFormat
   -> Maybe InsertTextMode
   -> Maybe Value
   -> CompletionItemDefaults)
-> Parser (Maybe (Range |? EditRangeWithInsertReplace))
-> Parser
     (Maybe InsertTextFormat
      -> Maybe InsertTextMode -> Maybe Value -> CompletionItemDefaults)
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 (Range |? EditRangeWithInsertReplace))
forall v. FromJSON v => Object -> Key -> Parser (Maybe v)
Language.LSP.Protocol.Types.Common..:!? Key
"editRange" Parser
  (Maybe InsertTextFormat
   -> Maybe InsertTextMode -> Maybe Value -> CompletionItemDefaults)
-> Parser (Maybe InsertTextFormat)
-> Parser
     (Maybe InsertTextMode -> Maybe Value -> CompletionItemDefaults)
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 InsertTextFormat)
forall v. FromJSON v => Object -> Key -> Parser (Maybe v)
Language.LSP.Protocol.Types.Common..:!? Key
"insertTextFormat" Parser
  (Maybe InsertTextMode -> Maybe Value -> CompletionItemDefaults)
-> Parser (Maybe InsertTextMode)
-> Parser (Maybe Value -> CompletionItemDefaults)
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 InsertTextMode)
forall v. FromJSON v => Object -> Key -> Parser (Maybe v)
Language.LSP.Protocol.Types.Common..:!? Key
"insertTextMode" Parser (Maybe Value -> CompletionItemDefaults)
-> Parser (Maybe Value) -> Parser CompletionItemDefaults
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
"data"