{- 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.ApplyWorkspaceEditParams 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.WorkspaceEdit
import qualified Language.LSP.Protocol.Types.Common

{-|
The parameters passed via a apply workspace edit request.
-}
data ApplyWorkspaceEditParams = ApplyWorkspaceEditParams 
  { {-|
  An optional label of the workspace edit. This label is
  presented in the user interface for example on an undo
  stack to undo the workspace edit.
  -}
  ApplyWorkspaceEditParams -> Maybe Text
_label :: (Maybe Data.Text.Text)
  , {-|
  The edits to apply.
  -}
  ApplyWorkspaceEditParams -> WorkspaceEdit
_edit :: Language.LSP.Protocol.Internal.Types.WorkspaceEdit.WorkspaceEdit
  }
  deriving stock (Int -> ApplyWorkspaceEditParams -> ShowS
[ApplyWorkspaceEditParams] -> ShowS
ApplyWorkspaceEditParams -> String
(Int -> ApplyWorkspaceEditParams -> ShowS)
-> (ApplyWorkspaceEditParams -> String)
-> ([ApplyWorkspaceEditParams] -> ShowS)
-> Show ApplyWorkspaceEditParams
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ApplyWorkspaceEditParams -> ShowS
showsPrec :: Int -> ApplyWorkspaceEditParams -> ShowS
$cshow :: ApplyWorkspaceEditParams -> String
show :: ApplyWorkspaceEditParams -> String
$cshowList :: [ApplyWorkspaceEditParams] -> ShowS
showList :: [ApplyWorkspaceEditParams] -> ShowS
Show, ApplyWorkspaceEditParams -> ApplyWorkspaceEditParams -> Bool
(ApplyWorkspaceEditParams -> ApplyWorkspaceEditParams -> Bool)
-> (ApplyWorkspaceEditParams -> ApplyWorkspaceEditParams -> Bool)
-> Eq ApplyWorkspaceEditParams
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ApplyWorkspaceEditParams -> ApplyWorkspaceEditParams -> Bool
== :: ApplyWorkspaceEditParams -> ApplyWorkspaceEditParams -> Bool
$c/= :: ApplyWorkspaceEditParams -> ApplyWorkspaceEditParams -> Bool
/= :: ApplyWorkspaceEditParams -> ApplyWorkspaceEditParams -> Bool
Eq, Eq ApplyWorkspaceEditParams
Eq ApplyWorkspaceEditParams =>
(ApplyWorkspaceEditParams -> ApplyWorkspaceEditParams -> Ordering)
-> (ApplyWorkspaceEditParams -> ApplyWorkspaceEditParams -> Bool)
-> (ApplyWorkspaceEditParams -> ApplyWorkspaceEditParams -> Bool)
-> (ApplyWorkspaceEditParams -> ApplyWorkspaceEditParams -> Bool)
-> (ApplyWorkspaceEditParams -> ApplyWorkspaceEditParams -> Bool)
-> (ApplyWorkspaceEditParams
    -> ApplyWorkspaceEditParams -> ApplyWorkspaceEditParams)
-> (ApplyWorkspaceEditParams
    -> ApplyWorkspaceEditParams -> ApplyWorkspaceEditParams)
-> Ord ApplyWorkspaceEditParams
ApplyWorkspaceEditParams -> ApplyWorkspaceEditParams -> Bool
ApplyWorkspaceEditParams -> ApplyWorkspaceEditParams -> Ordering
ApplyWorkspaceEditParams
-> ApplyWorkspaceEditParams -> ApplyWorkspaceEditParams
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 :: ApplyWorkspaceEditParams -> ApplyWorkspaceEditParams -> Ordering
compare :: ApplyWorkspaceEditParams -> ApplyWorkspaceEditParams -> Ordering
$c< :: ApplyWorkspaceEditParams -> ApplyWorkspaceEditParams -> Bool
< :: ApplyWorkspaceEditParams -> ApplyWorkspaceEditParams -> Bool
$c<= :: ApplyWorkspaceEditParams -> ApplyWorkspaceEditParams -> Bool
<= :: ApplyWorkspaceEditParams -> ApplyWorkspaceEditParams -> Bool
$c> :: ApplyWorkspaceEditParams -> ApplyWorkspaceEditParams -> Bool
> :: ApplyWorkspaceEditParams -> ApplyWorkspaceEditParams -> Bool
$c>= :: ApplyWorkspaceEditParams -> ApplyWorkspaceEditParams -> Bool
>= :: ApplyWorkspaceEditParams -> ApplyWorkspaceEditParams -> Bool
$cmax :: ApplyWorkspaceEditParams
-> ApplyWorkspaceEditParams -> ApplyWorkspaceEditParams
max :: ApplyWorkspaceEditParams
-> ApplyWorkspaceEditParams -> ApplyWorkspaceEditParams
$cmin :: ApplyWorkspaceEditParams
-> ApplyWorkspaceEditParams -> ApplyWorkspaceEditParams
min :: ApplyWorkspaceEditParams
-> ApplyWorkspaceEditParams -> ApplyWorkspaceEditParams
Ord, (forall x.
 ApplyWorkspaceEditParams -> Rep ApplyWorkspaceEditParams x)
-> (forall x.
    Rep ApplyWorkspaceEditParams x -> ApplyWorkspaceEditParams)
-> Generic ApplyWorkspaceEditParams
forall x.
Rep ApplyWorkspaceEditParams x -> ApplyWorkspaceEditParams
forall x.
ApplyWorkspaceEditParams -> Rep ApplyWorkspaceEditParams x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x.
ApplyWorkspaceEditParams -> Rep ApplyWorkspaceEditParams x
from :: forall x.
ApplyWorkspaceEditParams -> Rep ApplyWorkspaceEditParams x
$cto :: forall x.
Rep ApplyWorkspaceEditParams x -> ApplyWorkspaceEditParams
to :: forall x.
Rep ApplyWorkspaceEditParams x -> ApplyWorkspaceEditParams
Generic)
  deriving anyclass (ApplyWorkspaceEditParams -> ()
(ApplyWorkspaceEditParams -> ()) -> NFData ApplyWorkspaceEditParams
forall a. (a -> ()) -> NFData a
$crnf :: ApplyWorkspaceEditParams -> ()
rnf :: ApplyWorkspaceEditParams -> ()
NFData, Eq ApplyWorkspaceEditParams
Eq ApplyWorkspaceEditParams =>
(Int -> ApplyWorkspaceEditParams -> Int)
-> (ApplyWorkspaceEditParams -> Int)
-> Hashable ApplyWorkspaceEditParams
Int -> ApplyWorkspaceEditParams -> Int
ApplyWorkspaceEditParams -> Int
forall a. Eq a => (Int -> a -> Int) -> (a -> Int) -> Hashable a
$chashWithSalt :: Int -> ApplyWorkspaceEditParams -> Int
hashWithSalt :: Int -> ApplyWorkspaceEditParams -> Int
$chash :: ApplyWorkspaceEditParams -> Int
hash :: ApplyWorkspaceEditParams -> Int
Hashable)
  deriving (forall ann. ApplyWorkspaceEditParams -> Doc ann)
-> (forall ann. [ApplyWorkspaceEditParams] -> Doc ann)
-> Pretty ApplyWorkspaceEditParams
forall ann. [ApplyWorkspaceEditParams] -> Doc ann
forall ann. ApplyWorkspaceEditParams -> Doc ann
forall a.
(forall ann. a -> Doc ann)
-> (forall ann. [a] -> Doc ann) -> Pretty a
$cpretty :: forall ann. ApplyWorkspaceEditParams -> Doc ann
pretty :: forall ann. ApplyWorkspaceEditParams -> Doc ann
$cprettyList :: forall ann. [ApplyWorkspaceEditParams] -> Doc ann
prettyList :: forall ann. [ApplyWorkspaceEditParams] -> Doc ann
Pretty via (ViaJSON ApplyWorkspaceEditParams)

instance Aeson.ToJSON ApplyWorkspaceEditParams where
  toJSON :: ApplyWorkspaceEditParams -> Value
toJSON (ApplyWorkspaceEditParams Maybe Text
arg0 WorkspaceEdit
arg1) = [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
"label" 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
    ,[Key
"edit" Key -> WorkspaceEdit -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
Aeson..= WorkspaceEdit
arg1]]

instance Aeson.FromJSON ApplyWorkspaceEditParams where
  parseJSON :: Value -> Parser ApplyWorkspaceEditParams
parseJSON = String
-> (Object -> Parser ApplyWorkspaceEditParams)
-> Value
-> Parser ApplyWorkspaceEditParams
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Aeson.withObject String
"ApplyWorkspaceEditParams" ((Object -> Parser ApplyWorkspaceEditParams)
 -> Value -> Parser ApplyWorkspaceEditParams)
-> (Object -> Parser ApplyWorkspaceEditParams)
-> Value
-> Parser ApplyWorkspaceEditParams
forall a b. (a -> b) -> a -> b
$ \Object
arg -> Maybe Text -> WorkspaceEdit -> ApplyWorkspaceEditParams
ApplyWorkspaceEditParams (Maybe Text -> WorkspaceEdit -> ApplyWorkspaceEditParams)
-> Parser (Maybe Text)
-> Parser (WorkspaceEdit -> ApplyWorkspaceEditParams)
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
"label" Parser (WorkspaceEdit -> ApplyWorkspaceEditParams)
-> Parser WorkspaceEdit -> Parser ApplyWorkspaceEditParams
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 WorkspaceEdit
forall a. FromJSON a => Object -> Key -> Parser a
Aeson..: Key
"edit"