{- 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.NotebookDocumentFilterScheme 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.Types.Common

{-|
A notebook document filter where `scheme` is required field.

@since 3.18.0
@proposed
-}
data NotebookDocumentFilterScheme = NotebookDocumentFilterScheme 
  { {-|
  The type of the enclosing notebook.
  -}
  NotebookDocumentFilterScheme -> Maybe Text
_notebookType :: (Maybe Data.Text.Text)
  , {-|
  A Uri `Uri.scheme`, like `file` or `untitled`.
  -}
  NotebookDocumentFilterScheme -> Text
_scheme :: Data.Text.Text
  , {-|
  A glob pattern.
  -}
  NotebookDocumentFilterScheme -> Maybe Text
_pattern :: (Maybe Data.Text.Text)
  }
  deriving stock (Int -> NotebookDocumentFilterScheme -> ShowS
[NotebookDocumentFilterScheme] -> ShowS
NotebookDocumentFilterScheme -> String
(Int -> NotebookDocumentFilterScheme -> ShowS)
-> (NotebookDocumentFilterScheme -> String)
-> ([NotebookDocumentFilterScheme] -> ShowS)
-> Show NotebookDocumentFilterScheme
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> NotebookDocumentFilterScheme -> ShowS
showsPrec :: Int -> NotebookDocumentFilterScheme -> ShowS
$cshow :: NotebookDocumentFilterScheme -> String
show :: NotebookDocumentFilterScheme -> String
$cshowList :: [NotebookDocumentFilterScheme] -> ShowS
showList :: [NotebookDocumentFilterScheme] -> ShowS
Show, NotebookDocumentFilterScheme
-> NotebookDocumentFilterScheme -> Bool
(NotebookDocumentFilterScheme
 -> NotebookDocumentFilterScheme -> Bool)
-> (NotebookDocumentFilterScheme
    -> NotebookDocumentFilterScheme -> Bool)
-> Eq NotebookDocumentFilterScheme
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: NotebookDocumentFilterScheme
-> NotebookDocumentFilterScheme -> Bool
== :: NotebookDocumentFilterScheme
-> NotebookDocumentFilterScheme -> Bool
$c/= :: NotebookDocumentFilterScheme
-> NotebookDocumentFilterScheme -> Bool
/= :: NotebookDocumentFilterScheme
-> NotebookDocumentFilterScheme -> Bool
Eq, Eq NotebookDocumentFilterScheme
Eq NotebookDocumentFilterScheme =>
(NotebookDocumentFilterScheme
 -> NotebookDocumentFilterScheme -> Ordering)
-> (NotebookDocumentFilterScheme
    -> NotebookDocumentFilterScheme -> Bool)
-> (NotebookDocumentFilterScheme
    -> NotebookDocumentFilterScheme -> Bool)
-> (NotebookDocumentFilterScheme
    -> NotebookDocumentFilterScheme -> Bool)
-> (NotebookDocumentFilterScheme
    -> NotebookDocumentFilterScheme -> Bool)
-> (NotebookDocumentFilterScheme
    -> NotebookDocumentFilterScheme -> NotebookDocumentFilterScheme)
-> (NotebookDocumentFilterScheme
    -> NotebookDocumentFilterScheme -> NotebookDocumentFilterScheme)
-> Ord NotebookDocumentFilterScheme
NotebookDocumentFilterScheme
-> NotebookDocumentFilterScheme -> Bool
NotebookDocumentFilterScheme
-> NotebookDocumentFilterScheme -> Ordering
NotebookDocumentFilterScheme
-> NotebookDocumentFilterScheme -> NotebookDocumentFilterScheme
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 :: NotebookDocumentFilterScheme
-> NotebookDocumentFilterScheme -> Ordering
compare :: NotebookDocumentFilterScheme
-> NotebookDocumentFilterScheme -> Ordering
$c< :: NotebookDocumentFilterScheme
-> NotebookDocumentFilterScheme -> Bool
< :: NotebookDocumentFilterScheme
-> NotebookDocumentFilterScheme -> Bool
$c<= :: NotebookDocumentFilterScheme
-> NotebookDocumentFilterScheme -> Bool
<= :: NotebookDocumentFilterScheme
-> NotebookDocumentFilterScheme -> Bool
$c> :: NotebookDocumentFilterScheme
-> NotebookDocumentFilterScheme -> Bool
> :: NotebookDocumentFilterScheme
-> NotebookDocumentFilterScheme -> Bool
$c>= :: NotebookDocumentFilterScheme
-> NotebookDocumentFilterScheme -> Bool
>= :: NotebookDocumentFilterScheme
-> NotebookDocumentFilterScheme -> Bool
$cmax :: NotebookDocumentFilterScheme
-> NotebookDocumentFilterScheme -> NotebookDocumentFilterScheme
max :: NotebookDocumentFilterScheme
-> NotebookDocumentFilterScheme -> NotebookDocumentFilterScheme
$cmin :: NotebookDocumentFilterScheme
-> NotebookDocumentFilterScheme -> NotebookDocumentFilterScheme
min :: NotebookDocumentFilterScheme
-> NotebookDocumentFilterScheme -> NotebookDocumentFilterScheme
Ord, (forall x.
 NotebookDocumentFilterScheme -> Rep NotebookDocumentFilterScheme x)
-> (forall x.
    Rep NotebookDocumentFilterScheme x -> NotebookDocumentFilterScheme)
-> Generic NotebookDocumentFilterScheme
forall x.
Rep NotebookDocumentFilterScheme x -> NotebookDocumentFilterScheme
forall x.
NotebookDocumentFilterScheme -> Rep NotebookDocumentFilterScheme x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x.
NotebookDocumentFilterScheme -> Rep NotebookDocumentFilterScheme x
from :: forall x.
NotebookDocumentFilterScheme -> Rep NotebookDocumentFilterScheme x
$cto :: forall x.
Rep NotebookDocumentFilterScheme x -> NotebookDocumentFilterScheme
to :: forall x.
Rep NotebookDocumentFilterScheme x -> NotebookDocumentFilterScheme
Generic)
  deriving anyclass (NotebookDocumentFilterScheme -> ()
(NotebookDocumentFilterScheme -> ())
-> NFData NotebookDocumentFilterScheme
forall a. (a -> ()) -> NFData a
$crnf :: NotebookDocumentFilterScheme -> ()
rnf :: NotebookDocumentFilterScheme -> ()
NFData, Eq NotebookDocumentFilterScheme
Eq NotebookDocumentFilterScheme =>
(Int -> NotebookDocumentFilterScheme -> Int)
-> (NotebookDocumentFilterScheme -> Int)
-> Hashable NotebookDocumentFilterScheme
Int -> NotebookDocumentFilterScheme -> Int
NotebookDocumentFilterScheme -> Int
forall a. Eq a => (Int -> a -> Int) -> (a -> Int) -> Hashable a
$chashWithSalt :: Int -> NotebookDocumentFilterScheme -> Int
hashWithSalt :: Int -> NotebookDocumentFilterScheme -> Int
$chash :: NotebookDocumentFilterScheme -> Int
hash :: NotebookDocumentFilterScheme -> Int
Hashable)
  deriving (forall ann. NotebookDocumentFilterScheme -> Doc ann)
-> (forall ann. [NotebookDocumentFilterScheme] -> Doc ann)
-> Pretty NotebookDocumentFilterScheme
forall ann. [NotebookDocumentFilterScheme] -> Doc ann
forall ann. NotebookDocumentFilterScheme -> Doc ann
forall a.
(forall ann. a -> Doc ann)
-> (forall ann. [a] -> Doc ann) -> Pretty a
$cpretty :: forall ann. NotebookDocumentFilterScheme -> Doc ann
pretty :: forall ann. NotebookDocumentFilterScheme -> Doc ann
$cprettyList :: forall ann. [NotebookDocumentFilterScheme] -> Doc ann
prettyList :: forall ann. [NotebookDocumentFilterScheme] -> Doc ann
Pretty via (ViaJSON NotebookDocumentFilterScheme)

instance Aeson.ToJSON NotebookDocumentFilterScheme where
  toJSON :: NotebookDocumentFilterScheme -> Value
toJSON (NotebookDocumentFilterScheme Maybe Text
arg0 Text
arg1 Maybe Text
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
"notebookType" String -> Maybe Text -> [Pair]
forall e kv v.
(KeyValue e kv, ToJSON v) =>
String -> Maybe v -> [kv]
Language.LSP.Protocol.Types.Common..=? Maybe Text
arg0
    ,[Key
"scheme" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
Aeson..= Text
arg1]
    ,String
"pattern" String -> Maybe Text -> [Pair]
forall e kv v.
(KeyValue e kv, ToJSON v) =>
String -> Maybe v -> [kv]
Language.LSP.Protocol.Types.Common..=? Maybe Text
arg2]

instance Aeson.FromJSON NotebookDocumentFilterScheme where
  parseJSON :: Value -> Parser NotebookDocumentFilterScheme
parseJSON = String
-> (Object -> Parser NotebookDocumentFilterScheme)
-> Value
-> Parser NotebookDocumentFilterScheme
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Aeson.withObject String
"NotebookDocumentFilterScheme" ((Object -> Parser NotebookDocumentFilterScheme)
 -> Value -> Parser NotebookDocumentFilterScheme)
-> (Object -> Parser NotebookDocumentFilterScheme)
-> Value
-> Parser NotebookDocumentFilterScheme
forall a b. (a -> b) -> a -> b
$ \Object
arg -> Maybe Text -> Text -> Maybe Text -> NotebookDocumentFilterScheme
NotebookDocumentFilterScheme (Maybe Text -> Text -> Maybe Text -> NotebookDocumentFilterScheme)
-> Parser (Maybe Text)
-> Parser (Text -> Maybe Text -> NotebookDocumentFilterScheme)
forall (f :: * -> *) a b. Functor 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
"notebookType" Parser (Text -> Maybe Text -> NotebookDocumentFilterScheme)
-> Parser Text
-> Parser (Maybe Text -> NotebookDocumentFilterScheme)
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 Text
forall a. FromJSON a => Object -> Key -> Parser a
Aeson..: Key
"scheme" Parser (Maybe Text -> NotebookDocumentFilterScheme)
-> Parser (Maybe Text) -> Parser NotebookDocumentFilterScheme
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
"pattern"