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

{-|
The parameter of a `typeHierarchy/subtypes` request.

@since 3.17.0
-}
data TypeHierarchySubtypesParams = TypeHierarchySubtypesParams 
  { {-|
  An optional token that a server can use to report work done progress.
  -}
  TypeHierarchySubtypesParams -> 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.
  -}
  TypeHierarchySubtypesParams -> Maybe ProgressToken
_partialResultToken :: (Maybe Language.LSP.Protocol.Internal.Types.ProgressToken.ProgressToken)
  , {-|

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

instance Aeson.ToJSON TypeHierarchySubtypesParams where
  toJSON :: TypeHierarchySubtypesParams -> Value
toJSON (TypeHierarchySubtypesParams Maybe ProgressToken
arg0 Maybe ProgressToken
arg1 TypeHierarchyItem
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
$  [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
"item" Key -> TypeHierarchyItem -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
Aeson..= TypeHierarchyItem
arg2]]

instance Aeson.FromJSON TypeHierarchySubtypesParams where
  parseJSON :: Value -> Parser TypeHierarchySubtypesParams
parseJSON = String
-> (Object -> Parser TypeHierarchySubtypesParams)
-> Value
-> Parser TypeHierarchySubtypesParams
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Aeson.withObject String
"TypeHierarchySubtypesParams" ((Object -> Parser TypeHierarchySubtypesParams)
 -> Value -> Parser TypeHierarchySubtypesParams)
-> (Object -> Parser TypeHierarchySubtypesParams)
-> Value
-> Parser TypeHierarchySubtypesParams
forall a b. (a -> b) -> a -> b
$ \Object
arg -> Maybe ProgressToken
-> Maybe ProgressToken
-> TypeHierarchyItem
-> TypeHierarchySubtypesParams
TypeHierarchySubtypesParams (Maybe ProgressToken
 -> Maybe ProgressToken
 -> TypeHierarchyItem
 -> TypeHierarchySubtypesParams)
-> Parser (Maybe ProgressToken)
-> Parser
     (Maybe ProgressToken
      -> TypeHierarchyItem -> TypeHierarchySubtypesParams)
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
   -> TypeHierarchyItem -> TypeHierarchySubtypesParams)
-> Parser (Maybe ProgressToken)
-> Parser (TypeHierarchyItem -> TypeHierarchySubtypesParams)
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 (TypeHierarchyItem -> TypeHierarchySubtypesParams)
-> Parser TypeHierarchyItem -> Parser TypeHierarchySubtypesParams
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 TypeHierarchyItem
forall a. FromJSON a => Object -> Key -> Parser a
Aeson..: Key
"item"