{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE RecordWildCards #-}
module Discord.Internal.Types.Embed where
import Data.Aeson
import Data.Time.Clock
import Data.Default (Default, def)
import qualified Data.Text as T
import qualified Data.ByteString as B
import Data.Functor ((<&>))
import Network.HTTP.Client.MultipartFormData (PartM, partFileRequestBody)
import Network.HTTP.Client (RequestBody(RequestBodyBS))
import Discord.Internal.Types.Color (DiscordColor)
createEmbed :: CreateEmbed -> Embed
createEmbed :: CreateEmbed -> Embed
createEmbed CreateEmbed{[EmbedField]
Maybe UTCTime
Maybe DiscordColor
Maybe CreateEmbedImage
Text
createEmbedTimestamp :: CreateEmbed -> Maybe UTCTime
createEmbedColor :: CreateEmbed -> Maybe DiscordColor
createEmbedFooterIcon :: CreateEmbed -> Maybe CreateEmbedImage
createEmbedFooterText :: CreateEmbed -> Text
createEmbedImage :: CreateEmbed -> Maybe CreateEmbedImage
createEmbedFields :: CreateEmbed -> [EmbedField]
createEmbedDescription :: CreateEmbed -> Text
createEmbedThumbnail :: CreateEmbed -> Maybe CreateEmbedImage
createEmbedUrl :: CreateEmbed -> Text
createEmbedTitle :: CreateEmbed -> Text
createEmbedAuthorIcon :: CreateEmbed -> Maybe CreateEmbedImage
createEmbedAuthorUrl :: CreateEmbed -> Text
createEmbedAuthorName :: CreateEmbed -> Text
createEmbedTimestamp :: Maybe UTCTime
createEmbedColor :: Maybe DiscordColor
createEmbedFooterIcon :: Maybe CreateEmbedImage
createEmbedFooterText :: Text
createEmbedImage :: Maybe CreateEmbedImage
createEmbedFields :: [EmbedField]
createEmbedDescription :: Text
createEmbedThumbnail :: Maybe CreateEmbedImage
createEmbedUrl :: Text
createEmbedTitle :: Text
createEmbedAuthorIcon :: Maybe CreateEmbedImage
createEmbedAuthorUrl :: Text
createEmbedAuthorName :: Text
..} =
let
emptyMaybe :: T.Text -> Maybe T.Text
emptyMaybe :: Text -> Maybe Text
emptyMaybe Text
t = if Text -> Bool
T.null Text
t then forall a. Maybe a
Nothing else forall a. a -> Maybe a
Just Text
t
embedImageToUrl :: T.Text -> CreateEmbedImage -> T.Text
embedImageToUrl :: Text -> CreateEmbedImage -> Text
embedImageToUrl Text
place CreateEmbedImage
cei = case CreateEmbedImage
cei of
CreateEmbedImageUrl Text
t -> Text
t
CreateEmbedImageUpload ByteString
_ -> (Char -> Bool) -> Text -> Text
T.filter (forall a. Eq a => a -> a -> Bool
/=Char
' ') forall a b. (a -> b) -> a -> b
$ Text
"attachment://" forall a. Semigroup a => a -> a -> a
<> Text
createEmbedTitle forall a. Semigroup a => a -> a -> a
<> Text
place forall a. Semigroup a => a -> a -> a
<> Text
".png"
embedAuthor :: EmbedAuthor
embedAuthor = Text -> Maybe Text -> Maybe Text -> Maybe Text -> EmbedAuthor
EmbedAuthor Text
createEmbedAuthorName
(Text -> Maybe Text
emptyMaybe Text
createEmbedAuthorUrl)
(Text -> CreateEmbedImage -> Text
embedImageToUrl Text
"author" forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe CreateEmbedImage
createEmbedAuthorIcon)
forall a. Maybe a
Nothing
embedImage :: Maybe EmbedImage
embedImage = (Text -> CreateEmbedImage -> Text
embedImageToUrl Text
"image" forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe CreateEmbedImage
createEmbedImage) forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&>
\Text
image -> Text -> Maybe Text -> Maybe Integer -> Maybe Integer -> EmbedImage
EmbedImage Text
image forall a. Maybe a
Nothing forall a. Maybe a
Nothing forall a. Maybe a
Nothing
embedThumbnail :: Maybe EmbedThumbnail
embedThumbnail = (Text -> CreateEmbedImage -> Text
embedImageToUrl Text
"thumbnail" forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe CreateEmbedImage
createEmbedThumbnail) forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&>
\Text
thumbnail -> Text
-> Maybe Text -> Maybe Integer -> Maybe Integer -> EmbedThumbnail
EmbedThumbnail Text
thumbnail forall a. Maybe a
Nothing forall a. Maybe a
Nothing forall a. Maybe a
Nothing
embedFooter :: EmbedFooter
embedFooter = Text -> Maybe Text -> Maybe Text -> EmbedFooter
EmbedFooter Text
createEmbedFooterText
(Text -> CreateEmbedImage -> Text
embedImageToUrl Text
"footer" forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe CreateEmbedImage
createEmbedFooterIcon)
forall a. Maybe a
Nothing
in Embed { embedAuthor :: Maybe EmbedAuthor
embedAuthor = forall a. a -> Maybe a
Just EmbedAuthor
embedAuthor
, embedTitle :: Maybe Text
embedTitle = Text -> Maybe Text
emptyMaybe Text
createEmbedTitle
, embedUrl :: Maybe Text
embedUrl = Text -> Maybe Text
emptyMaybe Text
createEmbedUrl
, embedThumbnail :: Maybe EmbedThumbnail
embedThumbnail = Maybe EmbedThumbnail
embedThumbnail
, embedDescription :: Maybe Text
embedDescription = Text -> Maybe Text
emptyMaybe Text
createEmbedDescription
, embedFields :: [EmbedField]
embedFields = [EmbedField]
createEmbedFields
, embedImage :: Maybe EmbedImage
embedImage = Maybe EmbedImage
embedImage
, embedFooter :: Maybe EmbedFooter
embedFooter = forall a. a -> Maybe a
Just EmbedFooter
embedFooter
, embedColor :: Maybe DiscordColor
embedColor = Maybe DiscordColor
createEmbedColor
, embedTimestamp :: Maybe UTCTime
embedTimestamp = Maybe UTCTime
createEmbedTimestamp
, embedVideo :: Maybe EmbedVideo
embedVideo = forall a. Maybe a
Nothing
, embedProvider :: Maybe EmbedProvider
embedProvider = forall a. Maybe a
Nothing
}
data CreateEmbed = CreateEmbed
{ CreateEmbed -> Text
createEmbedAuthorName :: T.Text
, CreateEmbed -> Text
createEmbedAuthorUrl :: T.Text
, CreateEmbed -> Maybe CreateEmbedImage
createEmbedAuthorIcon :: Maybe CreateEmbedImage
, CreateEmbed -> Text
createEmbedTitle :: T.Text
, CreateEmbed -> Text
createEmbedUrl :: T.Text
, CreateEmbed -> Maybe CreateEmbedImage
createEmbedThumbnail :: Maybe CreateEmbedImage
, CreateEmbed -> Text
createEmbedDescription :: T.Text
, CreateEmbed -> [EmbedField]
createEmbedFields :: [EmbedField]
, CreateEmbed -> Maybe CreateEmbedImage
createEmbedImage :: Maybe CreateEmbedImage
, :: T.Text
, :: Maybe CreateEmbedImage
, CreateEmbed -> Maybe DiscordColor
createEmbedColor :: Maybe DiscordColor
, CreateEmbed -> Maybe UTCTime
createEmbedTimestamp :: Maybe UTCTime
} deriving (Int -> CreateEmbed -> ShowS
[CreateEmbed] -> ShowS
CreateEmbed -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateEmbed] -> ShowS
$cshowList :: [CreateEmbed] -> ShowS
show :: CreateEmbed -> String
$cshow :: CreateEmbed -> String
showsPrec :: Int -> CreateEmbed -> ShowS
$cshowsPrec :: Int -> CreateEmbed -> ShowS
Show, ReadPrec [CreateEmbed]
ReadPrec CreateEmbed
Int -> ReadS CreateEmbed
ReadS [CreateEmbed]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateEmbed]
$creadListPrec :: ReadPrec [CreateEmbed]
readPrec :: ReadPrec CreateEmbed
$creadPrec :: ReadPrec CreateEmbed
readList :: ReadS [CreateEmbed]
$creadList :: ReadS [CreateEmbed]
readsPrec :: Int -> ReadS CreateEmbed
$creadsPrec :: Int -> ReadS CreateEmbed
Read, CreateEmbed -> CreateEmbed -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateEmbed -> CreateEmbed -> Bool
$c/= :: CreateEmbed -> CreateEmbed -> Bool
== :: CreateEmbed -> CreateEmbed -> Bool
$c== :: CreateEmbed -> CreateEmbed -> Bool
Eq, Eq CreateEmbed
CreateEmbed -> CreateEmbed -> Bool
CreateEmbed -> CreateEmbed -> Ordering
CreateEmbed -> CreateEmbed -> CreateEmbed
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
min :: CreateEmbed -> CreateEmbed -> CreateEmbed
$cmin :: CreateEmbed -> CreateEmbed -> CreateEmbed
max :: CreateEmbed -> CreateEmbed -> CreateEmbed
$cmax :: CreateEmbed -> CreateEmbed -> CreateEmbed
>= :: CreateEmbed -> CreateEmbed -> Bool
$c>= :: CreateEmbed -> CreateEmbed -> Bool
> :: CreateEmbed -> CreateEmbed -> Bool
$c> :: CreateEmbed -> CreateEmbed -> Bool
<= :: CreateEmbed -> CreateEmbed -> Bool
$c<= :: CreateEmbed -> CreateEmbed -> Bool
< :: CreateEmbed -> CreateEmbed -> Bool
$c< :: CreateEmbed -> CreateEmbed -> Bool
compare :: CreateEmbed -> CreateEmbed -> Ordering
$ccompare :: CreateEmbed -> CreateEmbed -> Ordering
Ord)
data CreateEmbedImage = CreateEmbedImageUrl T.Text
| CreateEmbedImageUpload B.ByteString
deriving (Int -> CreateEmbedImage -> ShowS
[CreateEmbedImage] -> ShowS
CreateEmbedImage -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateEmbedImage] -> ShowS
$cshowList :: [CreateEmbedImage] -> ShowS
show :: CreateEmbedImage -> String
$cshow :: CreateEmbedImage -> String
showsPrec :: Int -> CreateEmbedImage -> ShowS
$cshowsPrec :: Int -> CreateEmbedImage -> ShowS
Show, ReadPrec [CreateEmbedImage]
ReadPrec CreateEmbedImage
Int -> ReadS CreateEmbedImage
ReadS [CreateEmbedImage]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateEmbedImage]
$creadListPrec :: ReadPrec [CreateEmbedImage]
readPrec :: ReadPrec CreateEmbedImage
$creadPrec :: ReadPrec CreateEmbedImage
readList :: ReadS [CreateEmbedImage]
$creadList :: ReadS [CreateEmbedImage]
readsPrec :: Int -> ReadS CreateEmbedImage
$creadsPrec :: Int -> ReadS CreateEmbedImage
Read, CreateEmbedImage -> CreateEmbedImage -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateEmbedImage -> CreateEmbedImage -> Bool
$c/= :: CreateEmbedImage -> CreateEmbedImage -> Bool
== :: CreateEmbedImage -> CreateEmbedImage -> Bool
$c== :: CreateEmbedImage -> CreateEmbedImage -> Bool
Eq, Eq CreateEmbedImage
CreateEmbedImage -> CreateEmbedImage -> Bool
CreateEmbedImage -> CreateEmbedImage -> Ordering
CreateEmbedImage -> CreateEmbedImage -> CreateEmbedImage
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
min :: CreateEmbedImage -> CreateEmbedImage -> CreateEmbedImage
$cmin :: CreateEmbedImage -> CreateEmbedImage -> CreateEmbedImage
max :: CreateEmbedImage -> CreateEmbedImage -> CreateEmbedImage
$cmax :: CreateEmbedImage -> CreateEmbedImage -> CreateEmbedImage
>= :: CreateEmbedImage -> CreateEmbedImage -> Bool
$c>= :: CreateEmbedImage -> CreateEmbedImage -> Bool
> :: CreateEmbedImage -> CreateEmbedImage -> Bool
$c> :: CreateEmbedImage -> CreateEmbedImage -> Bool
<= :: CreateEmbedImage -> CreateEmbedImage -> Bool
$c<= :: CreateEmbedImage -> CreateEmbedImage -> Bool
< :: CreateEmbedImage -> CreateEmbedImage -> Bool
$c< :: CreateEmbedImage -> CreateEmbedImage -> Bool
compare :: CreateEmbedImage -> CreateEmbedImage -> Ordering
$ccompare :: CreateEmbedImage -> CreateEmbedImage -> Ordering
Ord)
instance Default CreateEmbed where
def :: CreateEmbed
def = Text
-> Text
-> Maybe CreateEmbedImage
-> Text
-> Text
-> Maybe CreateEmbedImage
-> Text
-> [EmbedField]
-> Maybe CreateEmbedImage
-> Text
-> Maybe CreateEmbedImage
-> Maybe DiscordColor
-> Maybe UTCTime
-> CreateEmbed
CreateEmbed Text
"" Text
"" forall a. Maybe a
Nothing Text
"" Text
"" forall a. Maybe a
Nothing Text
"" [] forall a. Maybe a
Nothing Text
"" forall a. Maybe a
Nothing forall a. Maybe a
Nothing forall a. Maybe a
Nothing
data Embed = Embed
{ Embed -> Maybe EmbedAuthor
embedAuthor :: Maybe EmbedAuthor
, Embed -> Maybe Text
embedTitle :: Maybe T.Text
, Embed -> Maybe Text
embedUrl :: Maybe T.Text
, Embed -> Maybe EmbedThumbnail
embedThumbnail :: Maybe EmbedThumbnail
, Embed -> Maybe Text
embedDescription :: Maybe T.Text
, Embed -> [EmbedField]
embedFields :: [EmbedField]
, Embed -> Maybe EmbedImage
embedImage :: Maybe EmbedImage
, :: Maybe EmbedFooter
, Embed -> Maybe DiscordColor
embedColor :: Maybe DiscordColor
, Embed -> Maybe UTCTime
embedTimestamp :: Maybe UTCTime
, Embed -> Maybe EmbedVideo
embedVideo :: Maybe EmbedVideo
, Embed -> Maybe EmbedProvider
embedProvider :: Maybe EmbedProvider
} deriving (Int -> Embed -> ShowS
[Embed] -> ShowS
Embed -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Embed] -> ShowS
$cshowList :: [Embed] -> ShowS
show :: Embed -> String
$cshow :: Embed -> String
showsPrec :: Int -> Embed -> ShowS
$cshowsPrec :: Int -> Embed -> ShowS
Show, ReadPrec [Embed]
ReadPrec Embed
Int -> ReadS Embed
ReadS [Embed]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Embed]
$creadListPrec :: ReadPrec [Embed]
readPrec :: ReadPrec Embed
$creadPrec :: ReadPrec Embed
readList :: ReadS [Embed]
$creadList :: ReadS [Embed]
readsPrec :: Int -> ReadS Embed
$creadsPrec :: Int -> ReadS Embed
Read, Embed -> Embed -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Embed -> Embed -> Bool
$c/= :: Embed -> Embed -> Bool
== :: Embed -> Embed -> Bool
$c== :: Embed -> Embed -> Bool
Eq, Eq Embed
Embed -> Embed -> Bool
Embed -> Embed -> Ordering
Embed -> Embed -> Embed
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
min :: Embed -> Embed -> Embed
$cmin :: Embed -> Embed -> Embed
max :: Embed -> Embed -> Embed
$cmax :: Embed -> Embed -> Embed
>= :: Embed -> Embed -> Bool
$c>= :: Embed -> Embed -> Bool
> :: Embed -> Embed -> Bool
$c> :: Embed -> Embed -> Bool
<= :: Embed -> Embed -> Bool
$c<= :: Embed -> Embed -> Bool
< :: Embed -> Embed -> Bool
$c< :: Embed -> Embed -> Bool
compare :: Embed -> Embed -> Ordering
$ccompare :: Embed -> Embed -> Ordering
Ord)
instance ToJSON Embed where
toJSON :: Embed -> Value
toJSON Embed{[EmbedField]
Maybe UTCTime
Maybe Text
Maybe DiscordColor
Maybe EmbedFooter
Maybe EmbedAuthor
Maybe EmbedProvider
Maybe EmbedImage
Maybe EmbedVideo
Maybe EmbedThumbnail
embedProvider :: Maybe EmbedProvider
embedVideo :: Maybe EmbedVideo
embedTimestamp :: Maybe UTCTime
embedColor :: Maybe DiscordColor
embedFooter :: Maybe EmbedFooter
embedImage :: Maybe EmbedImage
embedFields :: [EmbedField]
embedDescription :: Maybe Text
embedThumbnail :: Maybe EmbedThumbnail
embedUrl :: Maybe Text
embedTitle :: Maybe Text
embedAuthor :: Maybe EmbedAuthor
embedProvider :: Embed -> Maybe EmbedProvider
embedVideo :: Embed -> Maybe EmbedVideo
embedTimestamp :: Embed -> Maybe UTCTime
embedColor :: Embed -> Maybe DiscordColor
embedFooter :: Embed -> Maybe EmbedFooter
embedImage :: Embed -> Maybe EmbedImage
embedFields :: Embed -> [EmbedField]
embedDescription :: Embed -> Maybe Text
embedThumbnail :: Embed -> Maybe EmbedThumbnail
embedUrl :: Embed -> Maybe Text
embedTitle :: Embed -> Maybe Text
embedAuthor :: Embed -> Maybe EmbedAuthor
..} = [Pair] -> Value
object
[ Key
"author" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe EmbedAuthor
embedAuthor
, Key
"title" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Text
embedTitle
, Key
"url" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Text
embedUrl
, Key
"description" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Text
embedDescription
, Key
"thumbnail" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe EmbedThumbnail
embedThumbnail
, Key
"fields" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= [EmbedField]
embedFields
, Key
"image" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe EmbedImage
embedImage
, Key
"footer" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe EmbedFooter
embedFooter
, Key
"color" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe DiscordColor
embedColor
, Key
"timestamp" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe UTCTime
embedTimestamp
, Key
"video" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe EmbedVideo
embedVideo
, Key
"provider" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe EmbedProvider
embedProvider
]
instance FromJSON Embed where
parseJSON :: Value -> Parser Embed
parseJSON = forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"embed" forall a b. (a -> b) -> a -> b
$ \Object
o ->
Maybe EmbedAuthor
-> Maybe Text
-> Maybe Text
-> Maybe EmbedThumbnail
-> Maybe Text
-> [EmbedField]
-> Maybe EmbedImage
-> Maybe EmbedFooter
-> Maybe DiscordColor
-> Maybe UTCTime
-> Maybe EmbedVideo
-> Maybe EmbedProvider
-> Embed
Embed forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"author"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"title"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"url"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"thumbnail"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"description"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"fields" forall a. Parser (Maybe a) -> a -> Parser a
.!= []
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"image"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"footer"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"color"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"timestamp"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"video"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"provider"
data EmbedThumbnail = EmbedThumbnail
{ EmbedThumbnail -> Text
embedThumbnailUrl :: T.Text
, EmbedThumbnail -> Maybe Text
embedThumbnailProxyUrl :: Maybe T.Text
, EmbedThumbnail -> Maybe Integer
embedThumbnailHeight :: Maybe Integer
, EmbedThumbnail -> Maybe Integer
embedThumbnailWidth :: Maybe Integer
} deriving (Int -> EmbedThumbnail -> ShowS
[EmbedThumbnail] -> ShowS
EmbedThumbnail -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [EmbedThumbnail] -> ShowS
$cshowList :: [EmbedThumbnail] -> ShowS
show :: EmbedThumbnail -> String
$cshow :: EmbedThumbnail -> String
showsPrec :: Int -> EmbedThumbnail -> ShowS
$cshowsPrec :: Int -> EmbedThumbnail -> ShowS
Show, ReadPrec [EmbedThumbnail]
ReadPrec EmbedThumbnail
Int -> ReadS EmbedThumbnail
ReadS [EmbedThumbnail]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [EmbedThumbnail]
$creadListPrec :: ReadPrec [EmbedThumbnail]
readPrec :: ReadPrec EmbedThumbnail
$creadPrec :: ReadPrec EmbedThumbnail
readList :: ReadS [EmbedThumbnail]
$creadList :: ReadS [EmbedThumbnail]
readsPrec :: Int -> ReadS EmbedThumbnail
$creadsPrec :: Int -> ReadS EmbedThumbnail
Read, EmbedThumbnail -> EmbedThumbnail -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: EmbedThumbnail -> EmbedThumbnail -> Bool
$c/= :: EmbedThumbnail -> EmbedThumbnail -> Bool
== :: EmbedThumbnail -> EmbedThumbnail -> Bool
$c== :: EmbedThumbnail -> EmbedThumbnail -> Bool
Eq, Eq EmbedThumbnail
EmbedThumbnail -> EmbedThumbnail -> Bool
EmbedThumbnail -> EmbedThumbnail -> Ordering
EmbedThumbnail -> EmbedThumbnail -> EmbedThumbnail
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
min :: EmbedThumbnail -> EmbedThumbnail -> EmbedThumbnail
$cmin :: EmbedThumbnail -> EmbedThumbnail -> EmbedThumbnail
max :: EmbedThumbnail -> EmbedThumbnail -> EmbedThumbnail
$cmax :: EmbedThumbnail -> EmbedThumbnail -> EmbedThumbnail
>= :: EmbedThumbnail -> EmbedThumbnail -> Bool
$c>= :: EmbedThumbnail -> EmbedThumbnail -> Bool
> :: EmbedThumbnail -> EmbedThumbnail -> Bool
$c> :: EmbedThumbnail -> EmbedThumbnail -> Bool
<= :: EmbedThumbnail -> EmbedThumbnail -> Bool
$c<= :: EmbedThumbnail -> EmbedThumbnail -> Bool
< :: EmbedThumbnail -> EmbedThumbnail -> Bool
$c< :: EmbedThumbnail -> EmbedThumbnail -> Bool
compare :: EmbedThumbnail -> EmbedThumbnail -> Ordering
$ccompare :: EmbedThumbnail -> EmbedThumbnail -> Ordering
Ord)
instance ToJSON EmbedThumbnail where
toJSON :: EmbedThumbnail -> Value
toJSON (EmbedThumbnail Text
a Maybe Text
b Maybe Integer
c Maybe Integer
d) = [Pair] -> Value
object
[ Key
"url" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
a
, Key
"proxy_url" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Text
b
, Key
"height" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Integer
c
, Key
"width" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Integer
d
]
instance FromJSON EmbedThumbnail where
parseJSON :: Value -> Parser EmbedThumbnail
parseJSON = forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"thumbnail" forall a b. (a -> b) -> a -> b
$ \Object
o ->
Text
-> Maybe Text -> Maybe Integer -> Maybe Integer -> EmbedThumbnail
EmbedThumbnail forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"url"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"proxy_url"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"height"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"width"
data EmbedVideo = EmbedVideo
{ EmbedVideo -> Maybe Text
embedVideoUrl :: Maybe T.Text
, EmbedVideo -> Maybe Text
embedProxyUrl :: Maybe T.Text
, EmbedVideo -> Maybe Integer
embedVideoHeight :: Maybe Integer
, EmbedVideo -> Maybe Integer
embedVideoWidth :: Maybe Integer
} deriving (Int -> EmbedVideo -> ShowS
[EmbedVideo] -> ShowS
EmbedVideo -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [EmbedVideo] -> ShowS
$cshowList :: [EmbedVideo] -> ShowS
show :: EmbedVideo -> String
$cshow :: EmbedVideo -> String
showsPrec :: Int -> EmbedVideo -> ShowS
$cshowsPrec :: Int -> EmbedVideo -> ShowS
Show, ReadPrec [EmbedVideo]
ReadPrec EmbedVideo
Int -> ReadS EmbedVideo
ReadS [EmbedVideo]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [EmbedVideo]
$creadListPrec :: ReadPrec [EmbedVideo]
readPrec :: ReadPrec EmbedVideo
$creadPrec :: ReadPrec EmbedVideo
readList :: ReadS [EmbedVideo]
$creadList :: ReadS [EmbedVideo]
readsPrec :: Int -> ReadS EmbedVideo
$creadsPrec :: Int -> ReadS EmbedVideo
Read, EmbedVideo -> EmbedVideo -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: EmbedVideo -> EmbedVideo -> Bool
$c/= :: EmbedVideo -> EmbedVideo -> Bool
== :: EmbedVideo -> EmbedVideo -> Bool
$c== :: EmbedVideo -> EmbedVideo -> Bool
Eq, Eq EmbedVideo
EmbedVideo -> EmbedVideo -> Bool
EmbedVideo -> EmbedVideo -> Ordering
EmbedVideo -> EmbedVideo -> EmbedVideo
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
min :: EmbedVideo -> EmbedVideo -> EmbedVideo
$cmin :: EmbedVideo -> EmbedVideo -> EmbedVideo
max :: EmbedVideo -> EmbedVideo -> EmbedVideo
$cmax :: EmbedVideo -> EmbedVideo -> EmbedVideo
>= :: EmbedVideo -> EmbedVideo -> Bool
$c>= :: EmbedVideo -> EmbedVideo -> Bool
> :: EmbedVideo -> EmbedVideo -> Bool
$c> :: EmbedVideo -> EmbedVideo -> Bool
<= :: EmbedVideo -> EmbedVideo -> Bool
$c<= :: EmbedVideo -> EmbedVideo -> Bool
< :: EmbedVideo -> EmbedVideo -> Bool
$c< :: EmbedVideo -> EmbedVideo -> Bool
compare :: EmbedVideo -> EmbedVideo -> Ordering
$ccompare :: EmbedVideo -> EmbedVideo -> Ordering
Ord)
instance ToJSON EmbedVideo where
toJSON :: EmbedVideo -> Value
toJSON (EmbedVideo Maybe Text
a Maybe Text
a' Maybe Integer
b Maybe Integer
c) = [Pair] -> Value
object
[ Key
"url" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Text
a
, Key
"height" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Integer
b
, Key
"width" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Integer
c
, Key
"proxy_url" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Text
a'
]
instance FromJSON EmbedVideo where
parseJSON :: Value -> Parser EmbedVideo
parseJSON = forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"video" forall a b. (a -> b) -> a -> b
$ \Object
o ->
Maybe Text
-> Maybe Text -> Maybe Integer -> Maybe Integer -> EmbedVideo
EmbedVideo forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"url"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"proxy_url"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"height"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"width"
data EmbedImage = EmbedImage
{ EmbedImage -> Text
embedImageUrl :: T.Text
, EmbedImage -> Maybe Text
embedImageProxyUrl :: Maybe T.Text
, EmbedImage -> Maybe Integer
embedImageHeight :: Maybe Integer
, EmbedImage -> Maybe Integer
embedImageWidth :: Maybe Integer
} deriving (Int -> EmbedImage -> ShowS
[EmbedImage] -> ShowS
EmbedImage -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [EmbedImage] -> ShowS
$cshowList :: [EmbedImage] -> ShowS
show :: EmbedImage -> String
$cshow :: EmbedImage -> String
showsPrec :: Int -> EmbedImage -> ShowS
$cshowsPrec :: Int -> EmbedImage -> ShowS
Show, ReadPrec [EmbedImage]
ReadPrec EmbedImage
Int -> ReadS EmbedImage
ReadS [EmbedImage]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [EmbedImage]
$creadListPrec :: ReadPrec [EmbedImage]
readPrec :: ReadPrec EmbedImage
$creadPrec :: ReadPrec EmbedImage
readList :: ReadS [EmbedImage]
$creadList :: ReadS [EmbedImage]
readsPrec :: Int -> ReadS EmbedImage
$creadsPrec :: Int -> ReadS EmbedImage
Read, EmbedImage -> EmbedImage -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: EmbedImage -> EmbedImage -> Bool
$c/= :: EmbedImage -> EmbedImage -> Bool
== :: EmbedImage -> EmbedImage -> Bool
$c== :: EmbedImage -> EmbedImage -> Bool
Eq, Eq EmbedImage
EmbedImage -> EmbedImage -> Bool
EmbedImage -> EmbedImage -> Ordering
EmbedImage -> EmbedImage -> EmbedImage
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
min :: EmbedImage -> EmbedImage -> EmbedImage
$cmin :: EmbedImage -> EmbedImage -> EmbedImage
max :: EmbedImage -> EmbedImage -> EmbedImage
$cmax :: EmbedImage -> EmbedImage -> EmbedImage
>= :: EmbedImage -> EmbedImage -> Bool
$c>= :: EmbedImage -> EmbedImage -> Bool
> :: EmbedImage -> EmbedImage -> Bool
$c> :: EmbedImage -> EmbedImage -> Bool
<= :: EmbedImage -> EmbedImage -> Bool
$c<= :: EmbedImage -> EmbedImage -> Bool
< :: EmbedImage -> EmbedImage -> Bool
$c< :: EmbedImage -> EmbedImage -> Bool
compare :: EmbedImage -> EmbedImage -> Ordering
$ccompare :: EmbedImage -> EmbedImage -> Ordering
Ord)
instance ToJSON EmbedImage where
toJSON :: EmbedImage -> Value
toJSON (EmbedImage Text
a Maybe Text
b Maybe Integer
c Maybe Integer
d) = [Pair] -> Value
object
[ Key
"url" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
a
, Key
"proxy_url" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Text
b
, Key
"height" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Integer
c
, Key
"width" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Integer
d
]
instance FromJSON EmbedImage where
parseJSON :: Value -> Parser EmbedImage
parseJSON = forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"image" forall a b. (a -> b) -> a -> b
$ \Object
o ->
Text -> Maybe Text -> Maybe Integer -> Maybe Integer -> EmbedImage
EmbedImage forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"url"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"proxy_url"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"height"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"width"
data EmbedProvider = EmbedProvider
{ EmbedProvider -> Maybe Text
embedProviderName :: Maybe T.Text
, EmbedProvider -> Maybe Text
embedProviderUrl :: Maybe T.Text
} deriving (Int -> EmbedProvider -> ShowS
[EmbedProvider] -> ShowS
EmbedProvider -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [EmbedProvider] -> ShowS
$cshowList :: [EmbedProvider] -> ShowS
show :: EmbedProvider -> String
$cshow :: EmbedProvider -> String
showsPrec :: Int -> EmbedProvider -> ShowS
$cshowsPrec :: Int -> EmbedProvider -> ShowS
Show, ReadPrec [EmbedProvider]
ReadPrec EmbedProvider
Int -> ReadS EmbedProvider
ReadS [EmbedProvider]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [EmbedProvider]
$creadListPrec :: ReadPrec [EmbedProvider]
readPrec :: ReadPrec EmbedProvider
$creadPrec :: ReadPrec EmbedProvider
readList :: ReadS [EmbedProvider]
$creadList :: ReadS [EmbedProvider]
readsPrec :: Int -> ReadS EmbedProvider
$creadsPrec :: Int -> ReadS EmbedProvider
Read, EmbedProvider -> EmbedProvider -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: EmbedProvider -> EmbedProvider -> Bool
$c/= :: EmbedProvider -> EmbedProvider -> Bool
== :: EmbedProvider -> EmbedProvider -> Bool
$c== :: EmbedProvider -> EmbedProvider -> Bool
Eq, Eq EmbedProvider
EmbedProvider -> EmbedProvider -> Bool
EmbedProvider -> EmbedProvider -> Ordering
EmbedProvider -> EmbedProvider -> EmbedProvider
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
min :: EmbedProvider -> EmbedProvider -> EmbedProvider
$cmin :: EmbedProvider -> EmbedProvider -> EmbedProvider
max :: EmbedProvider -> EmbedProvider -> EmbedProvider
$cmax :: EmbedProvider -> EmbedProvider -> EmbedProvider
>= :: EmbedProvider -> EmbedProvider -> Bool
$c>= :: EmbedProvider -> EmbedProvider -> Bool
> :: EmbedProvider -> EmbedProvider -> Bool
$c> :: EmbedProvider -> EmbedProvider -> Bool
<= :: EmbedProvider -> EmbedProvider -> Bool
$c<= :: EmbedProvider -> EmbedProvider -> Bool
< :: EmbedProvider -> EmbedProvider -> Bool
$c< :: EmbedProvider -> EmbedProvider -> Bool
compare :: EmbedProvider -> EmbedProvider -> Ordering
$ccompare :: EmbedProvider -> EmbedProvider -> Ordering
Ord)
instance ToJSON EmbedProvider where
toJSON :: EmbedProvider -> Value
toJSON (EmbedProvider Maybe Text
a Maybe Text
b) = [Pair] -> Value
object
[ Key
"name" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Text
a
, Key
"url" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Text
b
]
instance FromJSON EmbedProvider where
parseJSON :: Value -> Parser EmbedProvider
parseJSON = forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"provider" forall a b. (a -> b) -> a -> b
$ \Object
o ->
Maybe Text -> Maybe Text -> EmbedProvider
EmbedProvider forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"name"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"url"
data EmbedAuthor = EmbedAuthor
{ EmbedAuthor -> Text
embedAuthorName :: T.Text
, EmbedAuthor -> Maybe Text
embedAuthorUrl :: Maybe T.Text
, EmbedAuthor -> Maybe Text
embedAuthorIconUrl :: Maybe T.Text
, EmbedAuthor -> Maybe Text
embedAuthorProxyIconUrl :: Maybe T.Text
} deriving (Int -> EmbedAuthor -> ShowS
[EmbedAuthor] -> ShowS
EmbedAuthor -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [EmbedAuthor] -> ShowS
$cshowList :: [EmbedAuthor] -> ShowS
show :: EmbedAuthor -> String
$cshow :: EmbedAuthor -> String
showsPrec :: Int -> EmbedAuthor -> ShowS
$cshowsPrec :: Int -> EmbedAuthor -> ShowS
Show, ReadPrec [EmbedAuthor]
ReadPrec EmbedAuthor
Int -> ReadS EmbedAuthor
ReadS [EmbedAuthor]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [EmbedAuthor]
$creadListPrec :: ReadPrec [EmbedAuthor]
readPrec :: ReadPrec EmbedAuthor
$creadPrec :: ReadPrec EmbedAuthor
readList :: ReadS [EmbedAuthor]
$creadList :: ReadS [EmbedAuthor]
readsPrec :: Int -> ReadS EmbedAuthor
$creadsPrec :: Int -> ReadS EmbedAuthor
Read, EmbedAuthor -> EmbedAuthor -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: EmbedAuthor -> EmbedAuthor -> Bool
$c/= :: EmbedAuthor -> EmbedAuthor -> Bool
== :: EmbedAuthor -> EmbedAuthor -> Bool
$c== :: EmbedAuthor -> EmbedAuthor -> Bool
Eq, Eq EmbedAuthor
EmbedAuthor -> EmbedAuthor -> Bool
EmbedAuthor -> EmbedAuthor -> Ordering
EmbedAuthor -> EmbedAuthor -> EmbedAuthor
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
min :: EmbedAuthor -> EmbedAuthor -> EmbedAuthor
$cmin :: EmbedAuthor -> EmbedAuthor -> EmbedAuthor
max :: EmbedAuthor -> EmbedAuthor -> EmbedAuthor
$cmax :: EmbedAuthor -> EmbedAuthor -> EmbedAuthor
>= :: EmbedAuthor -> EmbedAuthor -> Bool
$c>= :: EmbedAuthor -> EmbedAuthor -> Bool
> :: EmbedAuthor -> EmbedAuthor -> Bool
$c> :: EmbedAuthor -> EmbedAuthor -> Bool
<= :: EmbedAuthor -> EmbedAuthor -> Bool
$c<= :: EmbedAuthor -> EmbedAuthor -> Bool
< :: EmbedAuthor -> EmbedAuthor -> Bool
$c< :: EmbedAuthor -> EmbedAuthor -> Bool
compare :: EmbedAuthor -> EmbedAuthor -> Ordering
$ccompare :: EmbedAuthor -> EmbedAuthor -> Ordering
Ord)
instance ToJSON EmbedAuthor where
toJSON :: EmbedAuthor -> Value
toJSON (EmbedAuthor Text
a Maybe Text
b Maybe Text
c Maybe Text
d) = [Pair] -> Value
object
[ Key
"name" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
a
, Key
"url" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Text
b
, Key
"icon_url" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Text
c
, Key
"proxy_icon_url" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Text
d
]
instance FromJSON EmbedAuthor where
parseJSON :: Value -> Parser EmbedAuthor
parseJSON = forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"author" forall a b. (a -> b) -> a -> b
$ \Object
o ->
Text -> Maybe Text -> Maybe Text -> Maybe Text -> EmbedAuthor
EmbedAuthor forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"name"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"url"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"icon_url"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"proxy_icon_url"
data =
{ :: T.Text
, :: Maybe T.Text
, :: Maybe T.Text
} deriving (Int -> EmbedFooter -> ShowS
[EmbedFooter] -> ShowS
EmbedFooter -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [EmbedFooter] -> ShowS
$cshowList :: [EmbedFooter] -> ShowS
show :: EmbedFooter -> String
$cshow :: EmbedFooter -> String
showsPrec :: Int -> EmbedFooter -> ShowS
$cshowsPrec :: Int -> EmbedFooter -> ShowS
Show, ReadPrec [EmbedFooter]
ReadPrec EmbedFooter
Int -> ReadS EmbedFooter
ReadS [EmbedFooter]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [EmbedFooter]
$creadListPrec :: ReadPrec [EmbedFooter]
readPrec :: ReadPrec EmbedFooter
$creadPrec :: ReadPrec EmbedFooter
readList :: ReadS [EmbedFooter]
$creadList :: ReadS [EmbedFooter]
readsPrec :: Int -> ReadS EmbedFooter
$creadsPrec :: Int -> ReadS EmbedFooter
Read, EmbedFooter -> EmbedFooter -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: EmbedFooter -> EmbedFooter -> Bool
$c/= :: EmbedFooter -> EmbedFooter -> Bool
== :: EmbedFooter -> EmbedFooter -> Bool
$c== :: EmbedFooter -> EmbedFooter -> Bool
Eq, Eq EmbedFooter
EmbedFooter -> EmbedFooter -> Bool
EmbedFooter -> EmbedFooter -> Ordering
EmbedFooter -> EmbedFooter -> EmbedFooter
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
min :: EmbedFooter -> EmbedFooter -> EmbedFooter
$cmin :: EmbedFooter -> EmbedFooter -> EmbedFooter
max :: EmbedFooter -> EmbedFooter -> EmbedFooter
$cmax :: EmbedFooter -> EmbedFooter -> EmbedFooter
>= :: EmbedFooter -> EmbedFooter -> Bool
$c>= :: EmbedFooter -> EmbedFooter -> Bool
> :: EmbedFooter -> EmbedFooter -> Bool
$c> :: EmbedFooter -> EmbedFooter -> Bool
<= :: EmbedFooter -> EmbedFooter -> Bool
$c<= :: EmbedFooter -> EmbedFooter -> Bool
< :: EmbedFooter -> EmbedFooter -> Bool
$c< :: EmbedFooter -> EmbedFooter -> Bool
compare :: EmbedFooter -> EmbedFooter -> Ordering
$ccompare :: EmbedFooter -> EmbedFooter -> Ordering
Ord)
instance ToJSON EmbedFooter where
toJSON :: EmbedFooter -> Value
toJSON (EmbedFooter Text
a Maybe Text
b Maybe Text
c) = [Pair] -> Value
object
[ Key
"text" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
a
, Key
"icon_url" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Text
b
, Key
"proxy_icon_url" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Text
c
]
instance FromJSON EmbedFooter where
parseJSON :: Value -> Parser EmbedFooter
parseJSON = forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"footer" forall a b. (a -> b) -> a -> b
$ \Object
o ->
Text -> Maybe Text -> Maybe Text -> EmbedFooter
EmbedFooter forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"text"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"icon_url"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"proxy_icon_url"
data EmbedField = EmbedField
{ EmbedField -> Text
embedFieldName :: T.Text
, EmbedField -> Text
embedFieldValue :: T.Text
, EmbedField -> Maybe Bool
embedFieldInline :: Maybe Bool
} deriving (Int -> EmbedField -> ShowS
[EmbedField] -> ShowS
EmbedField -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [EmbedField] -> ShowS
$cshowList :: [EmbedField] -> ShowS
show :: EmbedField -> String
$cshow :: EmbedField -> String
showsPrec :: Int -> EmbedField -> ShowS
$cshowsPrec :: Int -> EmbedField -> ShowS
Show, ReadPrec [EmbedField]
ReadPrec EmbedField
Int -> ReadS EmbedField
ReadS [EmbedField]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [EmbedField]
$creadListPrec :: ReadPrec [EmbedField]
readPrec :: ReadPrec EmbedField
$creadPrec :: ReadPrec EmbedField
readList :: ReadS [EmbedField]
$creadList :: ReadS [EmbedField]
readsPrec :: Int -> ReadS EmbedField
$creadsPrec :: Int -> ReadS EmbedField
Read, EmbedField -> EmbedField -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: EmbedField -> EmbedField -> Bool
$c/= :: EmbedField -> EmbedField -> Bool
== :: EmbedField -> EmbedField -> Bool
$c== :: EmbedField -> EmbedField -> Bool
Eq, Eq EmbedField
EmbedField -> EmbedField -> Bool
EmbedField -> EmbedField -> Ordering
EmbedField -> EmbedField -> EmbedField
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
min :: EmbedField -> EmbedField -> EmbedField
$cmin :: EmbedField -> EmbedField -> EmbedField
max :: EmbedField -> EmbedField -> EmbedField
$cmax :: EmbedField -> EmbedField -> EmbedField
>= :: EmbedField -> EmbedField -> Bool
$c>= :: EmbedField -> EmbedField -> Bool
> :: EmbedField -> EmbedField -> Bool
$c> :: EmbedField -> EmbedField -> Bool
<= :: EmbedField -> EmbedField -> Bool
$c<= :: EmbedField -> EmbedField -> Bool
< :: EmbedField -> EmbedField -> Bool
$c< :: EmbedField -> EmbedField -> Bool
compare :: EmbedField -> EmbedField -> Ordering
$ccompare :: EmbedField -> EmbedField -> Ordering
Ord)
instance ToJSON EmbedField where
toJSON :: EmbedField -> Value
toJSON (EmbedField Text
a Text
b Maybe Bool
c) = [Pair] -> Value
object
[ Key
"name" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
a
, Key
"value" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
b
, Key
"inline" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Bool
c
]
instance FromJSON EmbedField where
parseJSON :: Value -> Parser EmbedField
parseJSON = forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"field" forall a b. (a -> b) -> a -> b
$ \Object
o ->
Text -> Text -> Maybe Bool -> EmbedField
EmbedField forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"name"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"value"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"inline"
maybeEmbed :: Maybe CreateEmbed -> [PartM IO]
maybeEmbed :: Maybe CreateEmbed -> [PartM IO]
maybeEmbed =
let mkPart :: (Text, ByteString) -> PartM m
mkPart (Text
name,ByteString
content) = forall (m :: * -> *).
Applicative m =>
Text -> String -> RequestBody -> PartM m
partFileRequestBody Text
name (Text -> String
T.unpack Text
name) (ByteString -> RequestBody
RequestBodyBS ByteString
content)
uploads :: CreateEmbed -> [(Text, ByteString)]
uploads CreateEmbed{[EmbedField]
Maybe UTCTime
Maybe DiscordColor
Maybe CreateEmbedImage
Text
createEmbedTimestamp :: Maybe UTCTime
createEmbedColor :: Maybe DiscordColor
createEmbedFooterIcon :: Maybe CreateEmbedImage
createEmbedFooterText :: Text
createEmbedImage :: Maybe CreateEmbedImage
createEmbedFields :: [EmbedField]
createEmbedDescription :: Text
createEmbedThumbnail :: Maybe CreateEmbedImage
createEmbedUrl :: Text
createEmbedTitle :: Text
createEmbedAuthorIcon :: Maybe CreateEmbedImage
createEmbedAuthorUrl :: Text
createEmbedAuthorName :: Text
createEmbedTimestamp :: CreateEmbed -> Maybe UTCTime
createEmbedColor :: CreateEmbed -> Maybe DiscordColor
createEmbedFooterIcon :: CreateEmbed -> Maybe CreateEmbedImage
createEmbedFooterText :: CreateEmbed -> Text
createEmbedImage :: CreateEmbed -> Maybe CreateEmbedImage
createEmbedFields :: CreateEmbed -> [EmbedField]
createEmbedDescription :: CreateEmbed -> Text
createEmbedThumbnail :: CreateEmbed -> Maybe CreateEmbedImage
createEmbedUrl :: CreateEmbed -> Text
createEmbedTitle :: CreateEmbed -> Text
createEmbedAuthorIcon :: CreateEmbed -> Maybe CreateEmbedImage
createEmbedAuthorUrl :: CreateEmbed -> Text
createEmbedAuthorName :: CreateEmbed -> Text
..} = [((Char -> Bool) -> Text -> Text
T.filter (forall a. Eq a => a -> a -> Bool
/=Char
' ') forall a b. (a -> b) -> a -> b
$ Text
createEmbedTitleforall a. Semigroup a => a -> a -> a
<>Text
n,ByteString
c) | (Text
n, Just (CreateEmbedImageUpload ByteString
c)) <-
[ (Text
"author.png", Maybe CreateEmbedImage
createEmbedAuthorIcon)
, (Text
"thumbnail.png", Maybe CreateEmbedImage
createEmbedThumbnail)
, (Text
"image.png", Maybe CreateEmbedImage
createEmbedImage)
, (Text
"footer.png", Maybe CreateEmbedImage
createEmbedFooterIcon) ]]
in forall b a. b -> (a -> b) -> Maybe a -> b
maybe [] (forall a b. (a -> b) -> [a] -> [b]
map forall {m :: * -> *}.
Applicative m =>
(Text, ByteString) -> PartM m
mkPart forall b c a. (b -> c) -> (a -> b) -> a -> c
. CreateEmbed -> [(Text, ByteString)]
uploads)