{- 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.TextDocumentContentChangePartial 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

{-|
@since 3.18.0
@proposed
-}
data TextDocumentContentChangePartial = TextDocumentContentChangePartial 
  { {-|
  The range of the document that changed.
  -}
  TextDocumentContentChangePartial -> Range
_range :: Language.LSP.Protocol.Internal.Types.Range.Range
  , {-|
  The optional length of the range that got replaced.

  @deprecated use range instead.
  -}
  TextDocumentContentChangePartial -> Maybe UInt
_rangeLength :: (Maybe Language.LSP.Protocol.Types.Common.UInt)
  , {-|
  The new text for the provided range.
  -}
  TextDocumentContentChangePartial -> Text
_text :: Data.Text.Text
  }
  deriving stock (Int -> TextDocumentContentChangePartial -> ShowS
[TextDocumentContentChangePartial] -> ShowS
TextDocumentContentChangePartial -> String
(Int -> TextDocumentContentChangePartial -> ShowS)
-> (TextDocumentContentChangePartial -> String)
-> ([TextDocumentContentChangePartial] -> ShowS)
-> Show TextDocumentContentChangePartial
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TextDocumentContentChangePartial -> ShowS
showsPrec :: Int -> TextDocumentContentChangePartial -> ShowS
$cshow :: TextDocumentContentChangePartial -> String
show :: TextDocumentContentChangePartial -> String
$cshowList :: [TextDocumentContentChangePartial] -> ShowS
showList :: [TextDocumentContentChangePartial] -> ShowS
Show, TextDocumentContentChangePartial
-> TextDocumentContentChangePartial -> Bool
(TextDocumentContentChangePartial
 -> TextDocumentContentChangePartial -> Bool)
-> (TextDocumentContentChangePartial
    -> TextDocumentContentChangePartial -> Bool)
-> Eq TextDocumentContentChangePartial
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: TextDocumentContentChangePartial
-> TextDocumentContentChangePartial -> Bool
== :: TextDocumentContentChangePartial
-> TextDocumentContentChangePartial -> Bool
$c/= :: TextDocumentContentChangePartial
-> TextDocumentContentChangePartial -> Bool
/= :: TextDocumentContentChangePartial
-> TextDocumentContentChangePartial -> Bool
Eq, Eq TextDocumentContentChangePartial
Eq TextDocumentContentChangePartial =>
(TextDocumentContentChangePartial
 -> TextDocumentContentChangePartial -> Ordering)
-> (TextDocumentContentChangePartial
    -> TextDocumentContentChangePartial -> Bool)
-> (TextDocumentContentChangePartial
    -> TextDocumentContentChangePartial -> Bool)
-> (TextDocumentContentChangePartial
    -> TextDocumentContentChangePartial -> Bool)
-> (TextDocumentContentChangePartial
    -> TextDocumentContentChangePartial -> Bool)
-> (TextDocumentContentChangePartial
    -> TextDocumentContentChangePartial
    -> TextDocumentContentChangePartial)
-> (TextDocumentContentChangePartial
    -> TextDocumentContentChangePartial
    -> TextDocumentContentChangePartial)
-> Ord TextDocumentContentChangePartial
TextDocumentContentChangePartial
-> TextDocumentContentChangePartial -> Bool
TextDocumentContentChangePartial
-> TextDocumentContentChangePartial -> Ordering
TextDocumentContentChangePartial
-> TextDocumentContentChangePartial
-> TextDocumentContentChangePartial
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 :: TextDocumentContentChangePartial
-> TextDocumentContentChangePartial -> Ordering
compare :: TextDocumentContentChangePartial
-> TextDocumentContentChangePartial -> Ordering
$c< :: TextDocumentContentChangePartial
-> TextDocumentContentChangePartial -> Bool
< :: TextDocumentContentChangePartial
-> TextDocumentContentChangePartial -> Bool
$c<= :: TextDocumentContentChangePartial
-> TextDocumentContentChangePartial -> Bool
<= :: TextDocumentContentChangePartial
-> TextDocumentContentChangePartial -> Bool
$c> :: TextDocumentContentChangePartial
-> TextDocumentContentChangePartial -> Bool
> :: TextDocumentContentChangePartial
-> TextDocumentContentChangePartial -> Bool
$c>= :: TextDocumentContentChangePartial
-> TextDocumentContentChangePartial -> Bool
>= :: TextDocumentContentChangePartial
-> TextDocumentContentChangePartial -> Bool
$cmax :: TextDocumentContentChangePartial
-> TextDocumentContentChangePartial
-> TextDocumentContentChangePartial
max :: TextDocumentContentChangePartial
-> TextDocumentContentChangePartial
-> TextDocumentContentChangePartial
$cmin :: TextDocumentContentChangePartial
-> TextDocumentContentChangePartial
-> TextDocumentContentChangePartial
min :: TextDocumentContentChangePartial
-> TextDocumentContentChangePartial
-> TextDocumentContentChangePartial
Ord, (forall x.
 TextDocumentContentChangePartial
 -> Rep TextDocumentContentChangePartial x)
-> (forall x.
    Rep TextDocumentContentChangePartial x
    -> TextDocumentContentChangePartial)
-> Generic TextDocumentContentChangePartial
forall x.
Rep TextDocumentContentChangePartial x
-> TextDocumentContentChangePartial
forall x.
TextDocumentContentChangePartial
-> Rep TextDocumentContentChangePartial x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x.
TextDocumentContentChangePartial
-> Rep TextDocumentContentChangePartial x
from :: forall x.
TextDocumentContentChangePartial
-> Rep TextDocumentContentChangePartial x
$cto :: forall x.
Rep TextDocumentContentChangePartial x
-> TextDocumentContentChangePartial
to :: forall x.
Rep TextDocumentContentChangePartial x
-> TextDocumentContentChangePartial
Generic)
  deriving anyclass (TextDocumentContentChangePartial -> ()
(TextDocumentContentChangePartial -> ())
-> NFData TextDocumentContentChangePartial
forall a. (a -> ()) -> NFData a
$crnf :: TextDocumentContentChangePartial -> ()
rnf :: TextDocumentContentChangePartial -> ()
NFData, Eq TextDocumentContentChangePartial
Eq TextDocumentContentChangePartial =>
(Int -> TextDocumentContentChangePartial -> Int)
-> (TextDocumentContentChangePartial -> Int)
-> Hashable TextDocumentContentChangePartial
Int -> TextDocumentContentChangePartial -> Int
TextDocumentContentChangePartial -> Int
forall a. Eq a => (Int -> a -> Int) -> (a -> Int) -> Hashable a
$chashWithSalt :: Int -> TextDocumentContentChangePartial -> Int
hashWithSalt :: Int -> TextDocumentContentChangePartial -> Int
$chash :: TextDocumentContentChangePartial -> Int
hash :: TextDocumentContentChangePartial -> Int
Hashable)
  deriving (forall ann. TextDocumentContentChangePartial -> Doc ann)
-> (forall ann. [TextDocumentContentChangePartial] -> Doc ann)
-> Pretty TextDocumentContentChangePartial
forall ann. [TextDocumentContentChangePartial] -> Doc ann
forall ann. TextDocumentContentChangePartial -> Doc ann
forall a.
(forall ann. a -> Doc ann)
-> (forall ann. [a] -> Doc ann) -> Pretty a
$cpretty :: forall ann. TextDocumentContentChangePartial -> Doc ann
pretty :: forall ann. TextDocumentContentChangePartial -> Doc ann
$cprettyList :: forall ann. [TextDocumentContentChangePartial] -> Doc ann
prettyList :: forall ann. [TextDocumentContentChangePartial] -> Doc ann
Pretty via (ViaJSON TextDocumentContentChangePartial)

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

instance Aeson.FromJSON TextDocumentContentChangePartial where
  parseJSON :: Value -> Parser TextDocumentContentChangePartial
parseJSON = String
-> (Object -> Parser TextDocumentContentChangePartial)
-> Value
-> Parser TextDocumentContentChangePartial
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Aeson.withObject String
"TextDocumentContentChangePartial" ((Object -> Parser TextDocumentContentChangePartial)
 -> Value -> Parser TextDocumentContentChangePartial)
-> (Object -> Parser TextDocumentContentChangePartial)
-> Value
-> Parser TextDocumentContentChangePartial
forall a b. (a -> b) -> a -> b
$ \Object
arg -> Range -> Maybe UInt -> Text -> TextDocumentContentChangePartial
TextDocumentContentChangePartial (Range -> Maybe UInt -> Text -> TextDocumentContentChangePartial)
-> Parser Range
-> Parser (Maybe UInt -> Text -> TextDocumentContentChangePartial)
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 UInt -> Text -> TextDocumentContentChangePartial)
-> Parser (Maybe UInt)
-> Parser (Text -> TextDocumentContentChangePartial)
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 UInt)
forall v. FromJSON v => Object -> Key -> Parser (Maybe v)
Language.LSP.Protocol.Types.Common..:!? Key
"rangeLength" Parser (Text -> TextDocumentContentChangePartial)
-> Parser Text -> Parser TextDocumentContentChangePartial
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 Text
forall a. FromJSON a => Object -> Key -> Parser a
Aeson..: Key
"text"