{- 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.ServerInfo 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

{-|
Information about the server

@since 3.15.0
@since 3.18.0 ServerInfo type name added.
@proposed
-}
data ServerInfo = ServerInfo 
  { {-|
  The name of the server as defined by the server.
  -}
  ServerInfo -> Text
_name :: Data.Text.Text
  , {-|
  The server's version as defined by the server.
  -}
  ServerInfo -> Maybe Text
_version :: (Maybe Data.Text.Text)
  }
  deriving stock (Int -> ServerInfo -> ShowS
[ServerInfo] -> ShowS
ServerInfo -> String
(Int -> ServerInfo -> ShowS)
-> (ServerInfo -> String)
-> ([ServerInfo] -> ShowS)
-> Show ServerInfo
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ServerInfo -> ShowS
showsPrec :: Int -> ServerInfo -> ShowS
$cshow :: ServerInfo -> String
show :: ServerInfo -> String
$cshowList :: [ServerInfo] -> ShowS
showList :: [ServerInfo] -> ShowS
Show, ServerInfo -> ServerInfo -> Bool
(ServerInfo -> ServerInfo -> Bool)
-> (ServerInfo -> ServerInfo -> Bool) -> Eq ServerInfo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ServerInfo -> ServerInfo -> Bool
== :: ServerInfo -> ServerInfo -> Bool
$c/= :: ServerInfo -> ServerInfo -> Bool
/= :: ServerInfo -> ServerInfo -> Bool
Eq, Eq ServerInfo
Eq ServerInfo =>
(ServerInfo -> ServerInfo -> Ordering)
-> (ServerInfo -> ServerInfo -> Bool)
-> (ServerInfo -> ServerInfo -> Bool)
-> (ServerInfo -> ServerInfo -> Bool)
-> (ServerInfo -> ServerInfo -> Bool)
-> (ServerInfo -> ServerInfo -> ServerInfo)
-> (ServerInfo -> ServerInfo -> ServerInfo)
-> Ord ServerInfo
ServerInfo -> ServerInfo -> Bool
ServerInfo -> ServerInfo -> Ordering
ServerInfo -> ServerInfo -> ServerInfo
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 :: ServerInfo -> ServerInfo -> Ordering
compare :: ServerInfo -> ServerInfo -> Ordering
$c< :: ServerInfo -> ServerInfo -> Bool
< :: ServerInfo -> ServerInfo -> Bool
$c<= :: ServerInfo -> ServerInfo -> Bool
<= :: ServerInfo -> ServerInfo -> Bool
$c> :: ServerInfo -> ServerInfo -> Bool
> :: ServerInfo -> ServerInfo -> Bool
$c>= :: ServerInfo -> ServerInfo -> Bool
>= :: ServerInfo -> ServerInfo -> Bool
$cmax :: ServerInfo -> ServerInfo -> ServerInfo
max :: ServerInfo -> ServerInfo -> ServerInfo
$cmin :: ServerInfo -> ServerInfo -> ServerInfo
min :: ServerInfo -> ServerInfo -> ServerInfo
Ord, (forall x. ServerInfo -> Rep ServerInfo x)
-> (forall x. Rep ServerInfo x -> ServerInfo) -> Generic ServerInfo
forall x. Rep ServerInfo x -> ServerInfo
forall x. ServerInfo -> Rep ServerInfo x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. ServerInfo -> Rep ServerInfo x
from :: forall x. ServerInfo -> Rep ServerInfo x
$cto :: forall x. Rep ServerInfo x -> ServerInfo
to :: forall x. Rep ServerInfo x -> ServerInfo
Generic)
  deriving anyclass (ServerInfo -> ()
(ServerInfo -> ()) -> NFData ServerInfo
forall a. (a -> ()) -> NFData a
$crnf :: ServerInfo -> ()
rnf :: ServerInfo -> ()
NFData, Eq ServerInfo
Eq ServerInfo =>
(Int -> ServerInfo -> Int)
-> (ServerInfo -> Int) -> Hashable ServerInfo
Int -> ServerInfo -> Int
ServerInfo -> Int
forall a. Eq a => (Int -> a -> Int) -> (a -> Int) -> Hashable a
$chashWithSalt :: Int -> ServerInfo -> Int
hashWithSalt :: Int -> ServerInfo -> Int
$chash :: ServerInfo -> Int
hash :: ServerInfo -> Int
Hashable)
  deriving (forall ann. ServerInfo -> Doc ann)
-> (forall ann. [ServerInfo] -> Doc ann) -> Pretty ServerInfo
forall ann. [ServerInfo] -> Doc ann
forall ann. ServerInfo -> Doc ann
forall a.
(forall ann. a -> Doc ann)
-> (forall ann. [a] -> Doc ann) -> Pretty a
$cpretty :: forall ann. ServerInfo -> Doc ann
pretty :: forall ann. ServerInfo -> Doc ann
$cprettyList :: forall ann. [ServerInfo] -> Doc ann
prettyList :: forall ann. [ServerInfo] -> Doc ann
Pretty via (ViaJSON ServerInfo)

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

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