{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}

-- | For more information see http://spec.openapis.org/oas/v3.0.3#external-documentation-object
module OpenAPI.Generate.Types.ExternalDocumentation where

import Data.Text (Text)
import Data.Yaml
import GHC.Generics

data ExternalDocumentationObject = ExternalDocumentationObject
  { ExternalDocumentationObject -> Text
externalDocumentationObjectUrl :: Text,
    ExternalDocumentationObject -> Maybe Text
externalDocumentationObjectDescription :: Maybe Text
  }
  deriving (Int -> ExternalDocumentationObject -> ShowS
[ExternalDocumentationObject] -> ShowS
ExternalDocumentationObject -> String
(Int -> ExternalDocumentationObject -> ShowS)
-> (ExternalDocumentationObject -> String)
-> ([ExternalDocumentationObject] -> ShowS)
-> Show ExternalDocumentationObject
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ExternalDocumentationObject -> ShowS
showsPrec :: Int -> ExternalDocumentationObject -> ShowS
$cshow :: ExternalDocumentationObject -> String
show :: ExternalDocumentationObject -> String
$cshowList :: [ExternalDocumentationObject] -> ShowS
showList :: [ExternalDocumentationObject] -> ShowS
Show, Eq ExternalDocumentationObject
Eq ExternalDocumentationObject =>
(ExternalDocumentationObject
 -> ExternalDocumentationObject -> Ordering)
-> (ExternalDocumentationObject
    -> ExternalDocumentationObject -> Bool)
-> (ExternalDocumentationObject
    -> ExternalDocumentationObject -> Bool)
-> (ExternalDocumentationObject
    -> ExternalDocumentationObject -> Bool)
-> (ExternalDocumentationObject
    -> ExternalDocumentationObject -> Bool)
-> (ExternalDocumentationObject
    -> ExternalDocumentationObject -> ExternalDocumentationObject)
-> (ExternalDocumentationObject
    -> ExternalDocumentationObject -> ExternalDocumentationObject)
-> Ord ExternalDocumentationObject
ExternalDocumentationObject -> ExternalDocumentationObject -> Bool
ExternalDocumentationObject
-> ExternalDocumentationObject -> Ordering
ExternalDocumentationObject
-> ExternalDocumentationObject -> ExternalDocumentationObject
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 :: ExternalDocumentationObject
-> ExternalDocumentationObject -> Ordering
compare :: ExternalDocumentationObject
-> ExternalDocumentationObject -> Ordering
$c< :: ExternalDocumentationObject -> ExternalDocumentationObject -> Bool
< :: ExternalDocumentationObject -> ExternalDocumentationObject -> Bool
$c<= :: ExternalDocumentationObject -> ExternalDocumentationObject -> Bool
<= :: ExternalDocumentationObject -> ExternalDocumentationObject -> Bool
$c> :: ExternalDocumentationObject -> ExternalDocumentationObject -> Bool
> :: ExternalDocumentationObject -> ExternalDocumentationObject -> Bool
$c>= :: ExternalDocumentationObject -> ExternalDocumentationObject -> Bool
>= :: ExternalDocumentationObject -> ExternalDocumentationObject -> Bool
$cmax :: ExternalDocumentationObject
-> ExternalDocumentationObject -> ExternalDocumentationObject
max :: ExternalDocumentationObject
-> ExternalDocumentationObject -> ExternalDocumentationObject
$cmin :: ExternalDocumentationObject
-> ExternalDocumentationObject -> ExternalDocumentationObject
min :: ExternalDocumentationObject
-> ExternalDocumentationObject -> ExternalDocumentationObject
Ord, ExternalDocumentationObject -> ExternalDocumentationObject -> Bool
(ExternalDocumentationObject
 -> ExternalDocumentationObject -> Bool)
-> (ExternalDocumentationObject
    -> ExternalDocumentationObject -> Bool)
-> Eq ExternalDocumentationObject
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ExternalDocumentationObject -> ExternalDocumentationObject -> Bool
== :: ExternalDocumentationObject -> ExternalDocumentationObject -> Bool
$c/= :: ExternalDocumentationObject -> ExternalDocumentationObject -> Bool
/= :: ExternalDocumentationObject -> ExternalDocumentationObject -> Bool
Eq, (forall x.
 ExternalDocumentationObject -> Rep ExternalDocumentationObject x)
-> (forall x.
    Rep ExternalDocumentationObject x -> ExternalDocumentationObject)
-> Generic ExternalDocumentationObject
forall x.
Rep ExternalDocumentationObject x -> ExternalDocumentationObject
forall x.
ExternalDocumentationObject -> Rep ExternalDocumentationObject x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x.
ExternalDocumentationObject -> Rep ExternalDocumentationObject x
from :: forall x.
ExternalDocumentationObject -> Rep ExternalDocumentationObject x
$cto :: forall x.
Rep ExternalDocumentationObject x -> ExternalDocumentationObject
to :: forall x.
Rep ExternalDocumentationObject x -> ExternalDocumentationObject
Generic)

instance FromJSON ExternalDocumentationObject where
  parseJSON :: Value -> Parser ExternalDocumentationObject
parseJSON = String
-> (Object -> Parser ExternalDocumentationObject)
-> Value
-> Parser ExternalDocumentationObject
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"ExternalDocumentationObject" ((Object -> Parser ExternalDocumentationObject)
 -> Value -> Parser ExternalDocumentationObject)
-> (Object -> Parser ExternalDocumentationObject)
-> Value
-> Parser ExternalDocumentationObject
forall a b. (a -> b) -> a -> b
$ \Object
o ->
    Text -> Maybe Text -> ExternalDocumentationObject
ExternalDocumentationObject
      (Text -> Maybe Text -> ExternalDocumentationObject)
-> Parser Text
-> Parser (Maybe Text -> ExternalDocumentationObject)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"url"
      Parser (Maybe Text -> ExternalDocumentationObject)
-> Parser (Maybe Text) -> Parser ExternalDocumentationObject
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"description"