-- 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.VersionedNotebookDocumentIdentifier 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.Types.Common
import qualified Language.LSP.Protocol.Types.Uri

{-|
A versioned notebook document identifier.

@since 3.17.0
-}
data VersionedNotebookDocumentIdentifier = VersionedNotebookDocumentIdentifier 
  { {-|
  The version number of this notebook document.
  -}
  _version :: Language.LSP.Protocol.Types.Common.Int32
  , {-|
  The notebook document's uri.
  -}
  _uri :: Language.LSP.Protocol.Types.Uri.Uri
  }
  deriving stock (Show, Eq, Ord, Generic)
  deriving anyclass (NFData, Hashable)
  deriving Pretty via (ViaJSON VersionedNotebookDocumentIdentifier)

instance Aeson.ToJSON VersionedNotebookDocumentIdentifier where
  toJSON (VersionedNotebookDocumentIdentifier arg0 arg1) = Aeson.object $ concat $  [["version" Aeson..= arg0]
    ,["uri" Aeson..= arg1]]

instance Aeson.FromJSON VersionedNotebookDocumentIdentifier where
  parseJSON = Aeson.withObject "VersionedNotebookDocumentIdentifier" $ \arg -> VersionedNotebookDocumentIdentifier <$> arg Aeson..: "version" <*> arg Aeson..: "uri"
