-- 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.TextDocumentSyncKind where

import Control.DeepSeq
import Data.Hashable
import GHC.Generics
import qualified Data.Aeson as Aeson
import qualified Data.Row.Aeson as Aeson
import qualified Data.Row.Hashable as Hashable
import qualified Data.Set
import qualified Data.String
import qualified Language.LSP.Protocol.Types.Common
import qualified Language.LSP.Protocol.Types.LspEnum

{-|
Defines how the host (editor) should sync
document changes to the language server.
-}
data TextDocumentSyncKind = 
    {-|
  Documents should not be synced at all.
  -}
  TextDocumentSyncKind_None
  | {-|
  Documents are synced by always sending the full content
  of the document.
  -}
  TextDocumentSyncKind_Full
  | {-|
  Documents are synced by sending the full content on open.
  After that only incremental updates to the document are
  send.
  -}
  TextDocumentSyncKind_Incremental
  deriving stock (Show, Eq, Ord, Generic)
  deriving anyclass (NFData, Hashable)
  deriving ( Aeson.ToJSON
  , Aeson.FromJSON ) via (Language.LSP.Protocol.Types.LspEnum.AsLspEnum TextDocumentSyncKind Language.LSP.Protocol.Types.Common.UInt)

instance Language.LSP.Protocol.Types.LspEnum.LspEnum TextDocumentSyncKind where
  knownValues = Data.Set.fromList [TextDocumentSyncKind_None
    ,TextDocumentSyncKind_Full
    ,TextDocumentSyncKind_Incremental]
  type EnumBaseType TextDocumentSyncKind = Language.LSP.Protocol.Types.Common.UInt
  toEnumBaseType TextDocumentSyncKind_None = 0
  toEnumBaseType TextDocumentSyncKind_Full = 1
  toEnumBaseType TextDocumentSyncKind_Incremental = 2
  fromEnumBaseType 0 = pure TextDocumentSyncKind_None
  fromEnumBaseType 1 = pure TextDocumentSyncKind_Full
  fromEnumBaseType 2 = pure TextDocumentSyncKind_Incremental
  fromEnumBaseType _ = Nothing