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

{-|
Represents a folding range. To be valid, start and end line must be bigger than zero and smaller
than the number of lines in the document. Clients are free to ignore invalid ranges.
-}
data FoldingRange = FoldingRange 
  { {-|
  The zero-based start line of the range to fold. The folded area starts after the line's last character.
  To be valid, the end must be zero or larger and smaller than the number of lines in the document.
  -}
  FoldingRange -> UInt
_startLine :: Language.LSP.Protocol.Types.Common.UInt
  , {-|
  The zero-based character offset from where the folded range starts. If not defined, defaults to the length of the start line.
  -}
  FoldingRange -> Maybe UInt
_startCharacter :: (Maybe Language.LSP.Protocol.Types.Common.UInt)
  , {-|
  The zero-based end line of the range to fold. The folded area ends with the line's last character.
  To be valid, the end must be zero or larger and smaller than the number of lines in the document.
  -}
  FoldingRange -> UInt
_endLine :: Language.LSP.Protocol.Types.Common.UInt
  , {-|
  The zero-based character offset before the folded range ends. If not defined, defaults to the length of the end line.
  -}
  FoldingRange -> Maybe UInt
_endCharacter :: (Maybe Language.LSP.Protocol.Types.Common.UInt)
  , {-|
  Describes the kind of the folding range such as `comment' or 'region'. The kind
  is used to categorize folding ranges and used by commands like 'Fold all comments'.
  See `FoldingRangeKind` for an enumeration of standardized kinds.
  -}
  FoldingRange -> Maybe FoldingRangeKind
_kind :: (Maybe Language.LSP.Protocol.Internal.Types.FoldingRangeKind.FoldingRangeKind)
  , {-|
  The text that the client should show when the specified range is
  collapsed. If not defined or not supported by the client, a default
  will be chosen by the client.

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

instance Aeson.ToJSON FoldingRange where
  toJSON :: FoldingRange -> Value
toJSON (FoldingRange UInt
arg0 Maybe UInt
arg1 UInt
arg2 Maybe UInt
arg3 Maybe FoldingRangeKind
arg4 Maybe Text
arg5) = [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
"startLine" Key -> UInt -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
Aeson..= UInt
arg0]
    ,String
"startCharacter" 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
"endLine" Key -> UInt -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
Aeson..= UInt
arg2]
    ,String
"endCharacter" String -> Maybe UInt -> [Pair]
forall e kv v.
(KeyValue e kv, ToJSON v) =>
String -> Maybe v -> [kv]
Language.LSP.Protocol.Types.Common..=? Maybe UInt
arg3
    ,String
"kind" String -> Maybe FoldingRangeKind -> [Pair]
forall e kv v.
(KeyValue e kv, ToJSON v) =>
String -> Maybe v -> [kv]
Language.LSP.Protocol.Types.Common..=? Maybe FoldingRangeKind
arg4
    ,String
"collapsedText" String -> Maybe Text -> [Pair]
forall e kv v.
(KeyValue e kv, ToJSON v) =>
String -> Maybe v -> [kv]
Language.LSP.Protocol.Types.Common..=? Maybe Text
arg5]

instance Aeson.FromJSON FoldingRange where
  parseJSON :: Value -> Parser FoldingRange
parseJSON = String
-> (Object -> Parser FoldingRange) -> Value -> Parser FoldingRange
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Aeson.withObject String
"FoldingRange" ((Object -> Parser FoldingRange) -> Value -> Parser FoldingRange)
-> (Object -> Parser FoldingRange) -> Value -> Parser FoldingRange
forall a b. (a -> b) -> a -> b
$ \Object
arg -> UInt
-> Maybe UInt
-> UInt
-> Maybe UInt
-> Maybe FoldingRangeKind
-> Maybe Text
-> FoldingRange
FoldingRange (UInt
 -> Maybe UInt
 -> UInt
 -> Maybe UInt
 -> Maybe FoldingRangeKind
 -> Maybe Text
 -> FoldingRange)
-> Parser UInt
-> Parser
     (Maybe UInt
      -> UInt
      -> Maybe UInt
      -> Maybe FoldingRangeKind
      -> Maybe Text
      -> FoldingRange)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
arg Object -> Key -> Parser UInt
forall a. FromJSON a => Object -> Key -> Parser a
Aeson..: Key
"startLine" Parser
  (Maybe UInt
   -> UInt
   -> Maybe UInt
   -> Maybe FoldingRangeKind
   -> Maybe Text
   -> FoldingRange)
-> Parser (Maybe UInt)
-> Parser
     (UInt
      -> Maybe UInt
      -> Maybe FoldingRangeKind
      -> Maybe Text
      -> FoldingRange)
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
"startCharacter" Parser
  (UInt
   -> Maybe UInt
   -> Maybe FoldingRangeKind
   -> Maybe Text
   -> FoldingRange)
-> Parser UInt
-> Parser
     (Maybe UInt
      -> Maybe FoldingRangeKind -> Maybe Text -> FoldingRange)
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 UInt
forall a. FromJSON a => Object -> Key -> Parser a
Aeson..: Key
"endLine" Parser
  (Maybe UInt
   -> Maybe FoldingRangeKind -> Maybe Text -> FoldingRange)
-> Parser (Maybe UInt)
-> Parser (Maybe FoldingRangeKind -> Maybe Text -> FoldingRange)
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
"endCharacter" Parser (Maybe FoldingRangeKind -> Maybe Text -> FoldingRange)
-> Parser (Maybe FoldingRangeKind)
-> Parser (Maybe Text -> FoldingRange)
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 FoldingRangeKind)
forall v. FromJSON v => Object -> Key -> Parser (Maybe v)
Language.LSP.Protocol.Types.Common..:!? Key
"kind" Parser (Maybe Text -> FoldingRange)
-> Parser (Maybe Text) -> Parser FoldingRange
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
"collapsedText"