{- 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.NotebookDocumentChangeEvent 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 as Row
import qualified Data.Row.Aeson as Aeson
import qualified Data.Row.Hashable as Hashable
import qualified Language.LSP.Protocol.Internal.Types.NotebookCell
import qualified Language.LSP.Protocol.Internal.Types.NotebookCellArrayChange
import qualified Language.LSP.Protocol.Internal.Types.TextDocumentContentChangeEvent
import qualified Language.LSP.Protocol.Internal.Types.TextDocumentIdentifier
import qualified Language.LSP.Protocol.Internal.Types.TextDocumentItem
import qualified Language.LSP.Protocol.Internal.Types.VersionedTextDocumentIdentifier
import qualified Language.LSP.Protocol.Types.Common

{-|
A change event for a notebook document.

@since 3.17.0
-}
data NotebookDocumentChangeEvent = NotebookDocumentChangeEvent 
  { {-|
  The changed meta data if any.

  Note: should always be an object literal (e.g. LSPObject)
  -}
  NotebookDocumentChangeEvent -> Maybe Object
_metadata :: (Maybe Data.Aeson.Object)
  , {-|
  Changes to cells
  -}
  NotebookDocumentChangeEvent
-> Maybe
     (Rec
        (("structure"
          .== Maybe
                (Rec
                   (("array" .== NotebookCellArrayChange)
                    .+ (("didOpen" .== Maybe [TextDocumentItem])
                        .+ (("didClose" .== Maybe [TextDocumentIdentifier]) .+ Empty)))))
         .+ (("data" .== Maybe [NotebookCell])
             .+ (("textContent"
                  .== Maybe
                        [Rec
                           (("document" .== VersionedTextDocumentIdentifier)
                            .+ (("changes" .== [TextDocumentContentChangeEvent]) .+ Empty))])
                 .+ Empty))))
_cells :: (Maybe (Row.Rec ("structure" Row..== (Maybe (Row.Rec ("array" Row..== Language.LSP.Protocol.Internal.Types.NotebookCellArrayChange.NotebookCellArrayChange Row..+ ("didOpen" Row..== (Maybe [Language.LSP.Protocol.Internal.Types.TextDocumentItem.TextDocumentItem]) Row..+ ("didClose" Row..== (Maybe [Language.LSP.Protocol.Internal.Types.TextDocumentIdentifier.TextDocumentIdentifier]) Row..+ Row.Empty))))) Row..+ ("data" Row..== (Maybe [Language.LSP.Protocol.Internal.Types.NotebookCell.NotebookCell]) Row..+ ("textContent" Row..== (Maybe [(Row.Rec ("document" Row..== Language.LSP.Protocol.Internal.Types.VersionedTextDocumentIdentifier.VersionedTextDocumentIdentifier Row..+ ("changes" Row..== [Language.LSP.Protocol.Internal.Types.TextDocumentContentChangeEvent.TextDocumentContentChangeEvent] Row..+ Row.Empty)))]) Row..+ Row.Empty)))))
  }
  deriving stock (Int -> NotebookDocumentChangeEvent -> ShowS
[NotebookDocumentChangeEvent] -> ShowS
NotebookDocumentChangeEvent -> String
(Int -> NotebookDocumentChangeEvent -> ShowS)
-> (NotebookDocumentChangeEvent -> String)
-> ([NotebookDocumentChangeEvent] -> ShowS)
-> Show NotebookDocumentChangeEvent
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> NotebookDocumentChangeEvent -> ShowS
showsPrec :: Int -> NotebookDocumentChangeEvent -> ShowS
$cshow :: NotebookDocumentChangeEvent -> String
show :: NotebookDocumentChangeEvent -> String
$cshowList :: [NotebookDocumentChangeEvent] -> ShowS
showList :: [NotebookDocumentChangeEvent] -> ShowS
Show, NotebookDocumentChangeEvent -> NotebookDocumentChangeEvent -> Bool
(NotebookDocumentChangeEvent
 -> NotebookDocumentChangeEvent -> Bool)
-> (NotebookDocumentChangeEvent
    -> NotebookDocumentChangeEvent -> Bool)
-> Eq NotebookDocumentChangeEvent
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: NotebookDocumentChangeEvent -> NotebookDocumentChangeEvent -> Bool
== :: NotebookDocumentChangeEvent -> NotebookDocumentChangeEvent -> Bool
$c/= :: NotebookDocumentChangeEvent -> NotebookDocumentChangeEvent -> Bool
/= :: NotebookDocumentChangeEvent -> NotebookDocumentChangeEvent -> Bool
Eq, Eq NotebookDocumentChangeEvent
Eq NotebookDocumentChangeEvent =>
(NotebookDocumentChangeEvent
 -> NotebookDocumentChangeEvent -> Ordering)
-> (NotebookDocumentChangeEvent
    -> NotebookDocumentChangeEvent -> Bool)
-> (NotebookDocumentChangeEvent
    -> NotebookDocumentChangeEvent -> Bool)
-> (NotebookDocumentChangeEvent
    -> NotebookDocumentChangeEvent -> Bool)
-> (NotebookDocumentChangeEvent
    -> NotebookDocumentChangeEvent -> Bool)
-> (NotebookDocumentChangeEvent
    -> NotebookDocumentChangeEvent -> NotebookDocumentChangeEvent)
-> (NotebookDocumentChangeEvent
    -> NotebookDocumentChangeEvent -> NotebookDocumentChangeEvent)
-> Ord NotebookDocumentChangeEvent
NotebookDocumentChangeEvent -> NotebookDocumentChangeEvent -> Bool
NotebookDocumentChangeEvent
-> NotebookDocumentChangeEvent -> Ordering
NotebookDocumentChangeEvent
-> NotebookDocumentChangeEvent -> NotebookDocumentChangeEvent
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 :: NotebookDocumentChangeEvent
-> NotebookDocumentChangeEvent -> Ordering
compare :: NotebookDocumentChangeEvent
-> NotebookDocumentChangeEvent -> Ordering
$c< :: NotebookDocumentChangeEvent -> NotebookDocumentChangeEvent -> Bool
< :: NotebookDocumentChangeEvent -> NotebookDocumentChangeEvent -> Bool
$c<= :: NotebookDocumentChangeEvent -> NotebookDocumentChangeEvent -> Bool
<= :: NotebookDocumentChangeEvent -> NotebookDocumentChangeEvent -> Bool
$c> :: NotebookDocumentChangeEvent -> NotebookDocumentChangeEvent -> Bool
> :: NotebookDocumentChangeEvent -> NotebookDocumentChangeEvent -> Bool
$c>= :: NotebookDocumentChangeEvent -> NotebookDocumentChangeEvent -> Bool
>= :: NotebookDocumentChangeEvent -> NotebookDocumentChangeEvent -> Bool
$cmax :: NotebookDocumentChangeEvent
-> NotebookDocumentChangeEvent -> NotebookDocumentChangeEvent
max :: NotebookDocumentChangeEvent
-> NotebookDocumentChangeEvent -> NotebookDocumentChangeEvent
$cmin :: NotebookDocumentChangeEvent
-> NotebookDocumentChangeEvent -> NotebookDocumentChangeEvent
min :: NotebookDocumentChangeEvent
-> NotebookDocumentChangeEvent -> NotebookDocumentChangeEvent
Ord, (forall x.
 NotebookDocumentChangeEvent -> Rep NotebookDocumentChangeEvent x)
-> (forall x.
    Rep NotebookDocumentChangeEvent x -> NotebookDocumentChangeEvent)
-> Generic NotebookDocumentChangeEvent
forall x.
Rep NotebookDocumentChangeEvent x -> NotebookDocumentChangeEvent
forall x.
NotebookDocumentChangeEvent -> Rep NotebookDocumentChangeEvent x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x.
NotebookDocumentChangeEvent -> Rep NotebookDocumentChangeEvent x
from :: forall x.
NotebookDocumentChangeEvent -> Rep NotebookDocumentChangeEvent x
$cto :: forall x.
Rep NotebookDocumentChangeEvent x -> NotebookDocumentChangeEvent
to :: forall x.
Rep NotebookDocumentChangeEvent x -> NotebookDocumentChangeEvent
Generic)
  deriving anyclass (NotebookDocumentChangeEvent -> ()
(NotebookDocumentChangeEvent -> ())
-> NFData NotebookDocumentChangeEvent
forall a. (a -> ()) -> NFData a
$crnf :: NotebookDocumentChangeEvent -> ()
rnf :: NotebookDocumentChangeEvent -> ()
NFData, Eq NotebookDocumentChangeEvent
Eq NotebookDocumentChangeEvent =>
(Int -> NotebookDocumentChangeEvent -> Int)
-> (NotebookDocumentChangeEvent -> Int)
-> Hashable NotebookDocumentChangeEvent
Int -> NotebookDocumentChangeEvent -> Int
NotebookDocumentChangeEvent -> Int
forall a. Eq a => (Int -> a -> Int) -> (a -> Int) -> Hashable a
$chashWithSalt :: Int -> NotebookDocumentChangeEvent -> Int
hashWithSalt :: Int -> NotebookDocumentChangeEvent -> Int
$chash :: NotebookDocumentChangeEvent -> Int
hash :: NotebookDocumentChangeEvent -> Int
Hashable)
  deriving (forall ann. NotebookDocumentChangeEvent -> Doc ann)
-> (forall ann. [NotebookDocumentChangeEvent] -> Doc ann)
-> Pretty NotebookDocumentChangeEvent
forall ann. [NotebookDocumentChangeEvent] -> Doc ann
forall ann. NotebookDocumentChangeEvent -> Doc ann
forall a.
(forall ann. a -> Doc ann)
-> (forall ann. [a] -> Doc ann) -> Pretty a
$cpretty :: forall ann. NotebookDocumentChangeEvent -> Doc ann
pretty :: forall ann. NotebookDocumentChangeEvent -> Doc ann
$cprettyList :: forall ann. [NotebookDocumentChangeEvent] -> Doc ann
prettyList :: forall ann. [NotebookDocumentChangeEvent] -> Doc ann
Pretty via (ViaJSON NotebookDocumentChangeEvent)

instance Aeson.ToJSON NotebookDocumentChangeEvent where
  toJSON :: NotebookDocumentChangeEvent -> Value
toJSON (NotebookDocumentChangeEvent Maybe Object
arg0 Maybe
  (Rec
     (("structure"
       .== Maybe
             (Rec
                (("array" .== NotebookCellArrayChange)
                 .+ (("didOpen" .== Maybe [TextDocumentItem])
                     .+ (("didClose" .== Maybe [TextDocumentIdentifier]) .+ Empty)))))
      .+ (("data" .== Maybe [NotebookCell])
          .+ (("textContent"
               .== Maybe
                     [Rec
                        (("document" .== VersionedTextDocumentIdentifier)
                         .+ (("changes" .== [TextDocumentContentChangeEvent]) .+ Empty))])
              .+ Empty))))
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
"metadata" String -> Maybe Object -> [Pair]
forall e kv v.
(KeyValue e kv, ToJSON v) =>
String -> Maybe v -> [kv]
Language.LSP.Protocol.Types.Common..=? Maybe Object
arg0
    ,String
"cells" String
-> Maybe
     (Rec
        ('R
           '["data" ':-> Maybe [NotebookCell],
             "structure"
             ':-> Maybe
                    (Rec
                       ('R
                          '["array" ':-> NotebookCellArrayChange,
                            "didClose" ':-> Maybe [TextDocumentIdentifier],
                            "didOpen" ':-> Maybe [TextDocumentItem]])),
             "textContent"
             ':-> Maybe
                    [Rec
                       ('R
                          '["changes" ':-> [TextDocumentContentChangeEvent],
                            "document" ':-> VersionedTextDocumentIdentifier])]]))
-> [Pair]
forall e kv v.
(KeyValue e kv, ToJSON v) =>
String -> Maybe v -> [kv]
Language.LSP.Protocol.Types.Common..=? Maybe
  (Rec
     (("structure"
       .== Maybe
             (Rec
                (("array" .== NotebookCellArrayChange)
                 .+ (("didOpen" .== Maybe [TextDocumentItem])
                     .+ (("didClose" .== Maybe [TextDocumentIdentifier]) .+ Empty)))))
      .+ (("data" .== Maybe [NotebookCell])
          .+ (("textContent"
               .== Maybe
                     [Rec
                        (("document" .== VersionedTextDocumentIdentifier)
                         .+ (("changes" .== [TextDocumentContentChangeEvent]) .+ Empty))])
              .+ Empty))))
Maybe
  (Rec
     ('R
        '["data" ':-> Maybe [NotebookCell],
          "structure"
          ':-> Maybe
                 (Rec
                    ('R
                       '["array" ':-> NotebookCellArrayChange,
                         "didClose" ':-> Maybe [TextDocumentIdentifier],
                         "didOpen" ':-> Maybe [TextDocumentItem]])),
          "textContent"
          ':-> Maybe
                 [Rec
                    ('R
                       '["changes" ':-> [TextDocumentContentChangeEvent],
                         "document" ':-> VersionedTextDocumentIdentifier])]]))
arg1]

instance Aeson.FromJSON NotebookDocumentChangeEvent where
  parseJSON :: Value -> Parser NotebookDocumentChangeEvent
parseJSON = String
-> (Object -> Parser NotebookDocumentChangeEvent)
-> Value
-> Parser NotebookDocumentChangeEvent
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Aeson.withObject String
"NotebookDocumentChangeEvent" ((Object -> Parser NotebookDocumentChangeEvent)
 -> Value -> Parser NotebookDocumentChangeEvent)
-> (Object -> Parser NotebookDocumentChangeEvent)
-> Value
-> Parser NotebookDocumentChangeEvent
forall a b. (a -> b) -> a -> b
$ \Object
arg -> Maybe Object
-> Maybe
     (Rec
        (("structure"
          .== Maybe
                (Rec
                   (("array" .== NotebookCellArrayChange)
                    .+ (("didOpen" .== Maybe [TextDocumentItem])
                        .+ (("didClose" .== Maybe [TextDocumentIdentifier]) .+ Empty)))))
         .+ (("data" .== Maybe [NotebookCell])
             .+ (("textContent"
                  .== Maybe
                        [Rec
                           (("document" .== VersionedTextDocumentIdentifier)
                            .+ (("changes" .== [TextDocumentContentChangeEvent]) .+ Empty))])
                 .+ Empty))))
-> NotebookDocumentChangeEvent
Maybe Object
-> Maybe
     (Rec
        ('R
           '["data" ':-> Maybe [NotebookCell],
             "structure"
             ':-> Maybe
                    (Rec
                       ('R
                          '["array" ':-> NotebookCellArrayChange,
                            "didClose" ':-> Maybe [TextDocumentIdentifier],
                            "didOpen" ':-> Maybe [TextDocumentItem]])),
             "textContent"
             ':-> Maybe
                    [Rec
                       ('R
                          '["changes" ':-> [TextDocumentContentChangeEvent],
                            "document" ':-> VersionedTextDocumentIdentifier])]]))
-> NotebookDocumentChangeEvent
NotebookDocumentChangeEvent (Maybe Object
 -> Maybe
      (Rec
         ('R
            '["data" ':-> Maybe [NotebookCell],
              "structure"
              ':-> Maybe
                     (Rec
                        ('R
                           '["array" ':-> NotebookCellArrayChange,
                             "didClose" ':-> Maybe [TextDocumentIdentifier],
                             "didOpen" ':-> Maybe [TextDocumentItem]])),
              "textContent"
              ':-> Maybe
                     [Rec
                        ('R
                           '["changes" ':-> [TextDocumentContentChangeEvent],
                             "document" ':-> VersionedTextDocumentIdentifier])]]))
 -> NotebookDocumentChangeEvent)
-> Parser (Maybe Object)
-> Parser
     (Maybe
        (Rec
           ('R
              '["data" ':-> Maybe [NotebookCell],
                "structure"
                ':-> Maybe
                       (Rec
                          ('R
                             '["array" ':-> NotebookCellArrayChange,
                               "didClose" ':-> Maybe [TextDocumentIdentifier],
                               "didOpen" ':-> Maybe [TextDocumentItem]])),
                "textContent"
                ':-> Maybe
                       [Rec
                          ('R
                             '["changes" ':-> [TextDocumentContentChangeEvent],
                               "document" ':-> VersionedTextDocumentIdentifier])]]))
      -> NotebookDocumentChangeEvent)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
arg Object -> Key -> Parser (Maybe Object)
forall v. FromJSON v => Object -> Key -> Parser (Maybe v)
Language.LSP.Protocol.Types.Common..:!? Key
"metadata" Parser
  (Maybe
     (Rec
        ('R
           '["data" ':-> Maybe [NotebookCell],
             "structure"
             ':-> Maybe
                    (Rec
                       ('R
                          '["array" ':-> NotebookCellArrayChange,
                            "didClose" ':-> Maybe [TextDocumentIdentifier],
                            "didOpen" ':-> Maybe [TextDocumentItem]])),
             "textContent"
             ':-> Maybe
                    [Rec
                       ('R
                          '["changes" ':-> [TextDocumentContentChangeEvent],
                            "document" ':-> VersionedTextDocumentIdentifier])]]))
   -> NotebookDocumentChangeEvent)
-> Parser
     (Maybe
        (Rec
           ('R
              '["data" ':-> Maybe [NotebookCell],
                "structure"
                ':-> Maybe
                       (Rec
                          ('R
                             '["array" ':-> NotebookCellArrayChange,
                               "didClose" ':-> Maybe [TextDocumentIdentifier],
                               "didOpen" ':-> Maybe [TextDocumentItem]])),
                "textContent"
                ':-> Maybe
                       [Rec
                          ('R
                             '["changes" ':-> [TextDocumentContentChangeEvent],
                               "document" ':-> VersionedTextDocumentIdentifier])]])))
-> Parser NotebookDocumentChangeEvent
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
        (Rec
           ('R
              '["data" ':-> Maybe [NotebookCell],
                "structure"
                ':-> Maybe
                       (Rec
                          ('R
                             '["array" ':-> NotebookCellArrayChange,
                               "didClose" ':-> Maybe [TextDocumentIdentifier],
                               "didOpen" ':-> Maybe [TextDocumentItem]])),
                "textContent"
                ':-> Maybe
                       [Rec
                          ('R
                             '["changes" ':-> [TextDocumentContentChangeEvent],
                               "document" ':-> VersionedTextDocumentIdentifier])]])))
forall v. FromJSON v => Object -> Key -> Parser (Maybe v)
Language.LSP.Protocol.Types.Common..:!? Key
"cells"