{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}

module Discord.Internal.Types.Emoji where

import Data.Aeson
import Data.Data
import Data.Functor ((<&>))
import Data.Text as T
import Discord.Internal.Types.Prelude
import Discord.Internal.Types.User

-- | Represents an emoticon (emoji)
data Emoji = Emoji
  { -- | The emoji id
    Emoji -> Maybe EmojiId
emojiId :: Maybe EmojiId,
    -- | The emoji name
    Emoji -> Text
emojiName :: T.Text,
    -- | Roles the emoji is active for
    Emoji -> Maybe [EmojiId]
emojiRoles :: Maybe [RoleId],
    -- | User that created this emoji
    Emoji -> Maybe User
emojiUser :: Maybe User,
    -- | Whether this emoji is managed
    Emoji -> Maybe Bool
emojiManaged :: Maybe Bool,
    -- | Whether this emoji is animated
    Emoji -> Maybe Bool
emojiAnimated :: Maybe Bool
  }
  deriving (Int -> Emoji -> ShowS
[Emoji] -> ShowS
Emoji -> String
(Int -> Emoji -> ShowS)
-> (Emoji -> String) -> ([Emoji] -> ShowS) -> Show Emoji
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Emoji] -> ShowS
$cshowList :: [Emoji] -> ShowS
show :: Emoji -> String
$cshow :: Emoji -> String
showsPrec :: Int -> Emoji -> ShowS
$cshowsPrec :: Int -> Emoji -> ShowS
Show, ReadPrec [Emoji]
ReadPrec Emoji
Int -> ReadS Emoji
ReadS [Emoji]
(Int -> ReadS Emoji)
-> ReadS [Emoji]
-> ReadPrec Emoji
-> ReadPrec [Emoji]
-> Read Emoji
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Emoji]
$creadListPrec :: ReadPrec [Emoji]
readPrec :: ReadPrec Emoji
$creadPrec :: ReadPrec Emoji
readList :: ReadS [Emoji]
$creadList :: ReadS [Emoji]
readsPrec :: Int -> ReadS Emoji
$creadsPrec :: Int -> ReadS Emoji
Read, Emoji -> Emoji -> Bool
(Emoji -> Emoji -> Bool) -> (Emoji -> Emoji -> Bool) -> Eq Emoji
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Emoji -> Emoji -> Bool
$c/= :: Emoji -> Emoji -> Bool
== :: Emoji -> Emoji -> Bool
$c== :: Emoji -> Emoji -> Bool
Eq, Eq Emoji
Eq Emoji
-> (Emoji -> Emoji -> Ordering)
-> (Emoji -> Emoji -> Bool)
-> (Emoji -> Emoji -> Bool)
-> (Emoji -> Emoji -> Bool)
-> (Emoji -> Emoji -> Bool)
-> (Emoji -> Emoji -> Emoji)
-> (Emoji -> Emoji -> Emoji)
-> Ord Emoji
Emoji -> Emoji -> Bool
Emoji -> Emoji -> Ordering
Emoji -> Emoji -> Emoji
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 :: Emoji -> Emoji -> Emoji
$cmin :: Emoji -> Emoji -> Emoji
max :: Emoji -> Emoji -> Emoji
$cmax :: Emoji -> Emoji -> Emoji
>= :: Emoji -> Emoji -> Bool
$c>= :: Emoji -> Emoji -> Bool
> :: Emoji -> Emoji -> Bool
$c> :: Emoji -> Emoji -> Bool
<= :: Emoji -> Emoji -> Bool
$c<= :: Emoji -> Emoji -> Bool
< :: Emoji -> Emoji -> Bool
$c< :: Emoji -> Emoji -> Bool
compare :: Emoji -> Emoji -> Ordering
$ccompare :: Emoji -> Emoji -> Ordering
$cp1Ord :: Eq Emoji
Ord)

-- | Make an emoji with only a name
mkEmoji :: T.Text -> Emoji
mkEmoji :: Text -> Emoji
mkEmoji Text
t = Maybe EmojiId
-> Text
-> Maybe [EmojiId]
-> Maybe User
-> Maybe Bool
-> Maybe Bool
-> Emoji
Emoji Maybe EmojiId
forall a. Maybe a
Nothing Text
t Maybe [EmojiId]
forall a. Maybe a
Nothing Maybe User
forall a. Maybe a
Nothing Maybe Bool
forall a. Maybe a
Nothing Maybe Bool
forall a. Maybe a
Nothing

instance FromJSON Emoji where
  parseJSON :: Value -> Parser Emoji
parseJSON = String -> (Object -> Parser Emoji) -> Value -> Parser Emoji
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"Emoji" ((Object -> Parser Emoji) -> Value -> Parser Emoji)
-> (Object -> Parser Emoji) -> Value -> Parser Emoji
forall a b. (a -> b) -> a -> b
$ \Object
o ->
    Maybe EmojiId
-> Text
-> Maybe [EmojiId]
-> Maybe User
-> Maybe Bool
-> Maybe Bool
-> Emoji
Emoji (Maybe EmojiId
 -> Text
 -> Maybe [EmojiId]
 -> Maybe User
 -> Maybe Bool
 -> Maybe Bool
 -> Emoji)
-> Parser (Maybe EmojiId)
-> Parser
     (Text
      -> Maybe [EmojiId]
      -> Maybe User
      -> Maybe Bool
      -> Maybe Bool
      -> Emoji)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser (Maybe EmojiId)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"id"
      Parser
  (Text
   -> Maybe [EmojiId]
   -> Maybe User
   -> Maybe Bool
   -> Maybe Bool
   -> Emoji)
-> Parser Text
-> Parser
     (Maybe [EmojiId]
      -> Maybe User -> Maybe Bool -> Maybe Bool -> Emoji)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"name"
      Parser
  (Maybe [EmojiId]
   -> Maybe User -> Maybe Bool -> Maybe Bool -> Emoji)
-> Parser (Maybe [EmojiId])
-> Parser (Maybe User -> Maybe Bool -> Maybe Bool -> Emoji)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [EmojiId])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"roles"
      Parser (Maybe User -> Maybe Bool -> Maybe Bool -> Emoji)
-> Parser (Maybe User)
-> Parser (Maybe Bool -> Maybe Bool -> Emoji)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe User)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"user"
      Parser (Maybe Bool -> Maybe Bool -> Emoji)
-> Parser (Maybe Bool) -> Parser (Maybe Bool -> Emoji)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"managed"
      Parser (Maybe Bool -> Emoji) -> Parser (Maybe Bool) -> Parser Emoji
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"animated"

instance ToJSON Emoji where
  toJSON :: Emoji -> Value
toJSON Emoji {Maybe Bool
Maybe [EmojiId]
Maybe EmojiId
Maybe User
Text
emojiAnimated :: Maybe Bool
emojiManaged :: Maybe Bool
emojiUser :: Maybe User
emojiRoles :: Maybe [EmojiId]
emojiName :: Text
emojiId :: Maybe EmojiId
emojiAnimated :: Emoji -> Maybe Bool
emojiManaged :: Emoji -> Maybe Bool
emojiUser :: Emoji -> Maybe User
emojiRoles :: Emoji -> Maybe [EmojiId]
emojiName :: Emoji -> Text
emojiId :: Emoji -> Maybe EmojiId
..} =
    [Pair] -> Value
object
      [ (Key
name, Value
value)
        | (Key
name, Just Value
value) <-
            [ (Key
"id", EmojiId -> Value
forall a. ToJSON a => a -> Value
toJSON (EmojiId -> Value) -> Maybe EmojiId -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe EmojiId
emojiId),
              (Key
"name", Text -> Maybe Value
forall a. ToJSON a => a -> Maybe Value
toMaybeJSON Text
emojiName),
              (Key
"roles", [EmojiId] -> Value
forall a. ToJSON a => a -> Value
toJSON ([EmojiId] -> Value) -> Maybe [EmojiId] -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [EmojiId]
emojiRoles),
              (Key
"user", User -> Value
forall a. ToJSON a => a -> Value
toJSON (User -> Value) -> Maybe User -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe User
emojiUser),
              (Key
"managed", Bool -> Value
forall a. ToJSON a => a -> Value
toJSON (Bool -> Value) -> Maybe Bool -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Bool
emojiManaged),
              (Key
"animated", Bool -> Value
forall a. ToJSON a => a -> Value
toJSON (Bool -> Value) -> Maybe Bool -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Bool
emojiAnimated)
            ]
      ]

-- | Represents a pack of standard stickers.
data StickerPack = StickerPack
  { -- | The id of the sticker pack
    StickerPack -> EmojiId
stickerPackId :: Snowflake,
    -- | The stickers in the pack
    StickerPack -> [Sticker]
stickerPackStickers :: [Sticker],
    -- | The name of the sticker pack
    StickerPack -> Text
stickerPackName :: T.Text,
    -- | ID of the pack's SKU
    StickerPack -> EmojiId
stickerPackSKUId :: Snowflake,
    -- | If of the sticker which is shown as the pack's icon
    StickerPack -> Maybe EmojiId
stickerPackCoverStickerId :: Maybe StickerId,
    -- | The description of the sticker pack
    StickerPack -> Text
stickerPackDescription :: T.Text,
    -- | Id of the sticker pack's banner image
    StickerPack -> Maybe EmojiId
stickerPackBannerAssetId :: Maybe Snowflake
  }
  deriving (Int -> StickerPack -> ShowS
[StickerPack] -> ShowS
StickerPack -> String
(Int -> StickerPack -> ShowS)
-> (StickerPack -> String)
-> ([StickerPack] -> ShowS)
-> Show StickerPack
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [StickerPack] -> ShowS
$cshowList :: [StickerPack] -> ShowS
show :: StickerPack -> String
$cshow :: StickerPack -> String
showsPrec :: Int -> StickerPack -> ShowS
$cshowsPrec :: Int -> StickerPack -> ShowS
Show, ReadPrec [StickerPack]
ReadPrec StickerPack
Int -> ReadS StickerPack
ReadS [StickerPack]
(Int -> ReadS StickerPack)
-> ReadS [StickerPack]
-> ReadPrec StickerPack
-> ReadPrec [StickerPack]
-> Read StickerPack
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [StickerPack]
$creadListPrec :: ReadPrec [StickerPack]
readPrec :: ReadPrec StickerPack
$creadPrec :: ReadPrec StickerPack
readList :: ReadS [StickerPack]
$creadList :: ReadS [StickerPack]
readsPrec :: Int -> ReadS StickerPack
$creadsPrec :: Int -> ReadS StickerPack
Read, StickerPack -> StickerPack -> Bool
(StickerPack -> StickerPack -> Bool)
-> (StickerPack -> StickerPack -> Bool) -> Eq StickerPack
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: StickerPack -> StickerPack -> Bool
$c/= :: StickerPack -> StickerPack -> Bool
== :: StickerPack -> StickerPack -> Bool
$c== :: StickerPack -> StickerPack -> Bool
Eq, Eq StickerPack
Eq StickerPack
-> (StickerPack -> StickerPack -> Ordering)
-> (StickerPack -> StickerPack -> Bool)
-> (StickerPack -> StickerPack -> Bool)
-> (StickerPack -> StickerPack -> Bool)
-> (StickerPack -> StickerPack -> Bool)
-> (StickerPack -> StickerPack -> StickerPack)
-> (StickerPack -> StickerPack -> StickerPack)
-> Ord StickerPack
StickerPack -> StickerPack -> Bool
StickerPack -> StickerPack -> Ordering
StickerPack -> StickerPack -> StickerPack
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 :: StickerPack -> StickerPack -> StickerPack
$cmin :: StickerPack -> StickerPack -> StickerPack
max :: StickerPack -> StickerPack -> StickerPack
$cmax :: StickerPack -> StickerPack -> StickerPack
>= :: StickerPack -> StickerPack -> Bool
$c>= :: StickerPack -> StickerPack -> Bool
> :: StickerPack -> StickerPack -> Bool
$c> :: StickerPack -> StickerPack -> Bool
<= :: StickerPack -> StickerPack -> Bool
$c<= :: StickerPack -> StickerPack -> Bool
< :: StickerPack -> StickerPack -> Bool
$c< :: StickerPack -> StickerPack -> Bool
compare :: StickerPack -> StickerPack -> Ordering
$ccompare :: StickerPack -> StickerPack -> Ordering
$cp1Ord :: Eq StickerPack
Ord)

instance FromJSON StickerPack where
  parseJSON :: Value -> Parser StickerPack
parseJSON = String
-> (Object -> Parser StickerPack) -> Value -> Parser StickerPack
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"StickerPack" ((Object -> Parser StickerPack) -> Value -> Parser StickerPack)
-> (Object -> Parser StickerPack) -> Value -> Parser StickerPack
forall a b. (a -> b) -> a -> b
$ \Object
o ->
    EmojiId
-> [Sticker]
-> Text
-> EmojiId
-> Maybe EmojiId
-> Text
-> Maybe EmojiId
-> StickerPack
StickerPack (EmojiId
 -> [Sticker]
 -> Text
 -> EmojiId
 -> Maybe EmojiId
 -> Text
 -> Maybe EmojiId
 -> StickerPack)
-> Parser EmojiId
-> Parser
     ([Sticker]
      -> Text
      -> EmojiId
      -> Maybe EmojiId
      -> Text
      -> Maybe EmojiId
      -> StickerPack)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser EmojiId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"id"
      Parser
  ([Sticker]
   -> Text
   -> EmojiId
   -> Maybe EmojiId
   -> Text
   -> Maybe EmojiId
   -> StickerPack)
-> Parser [Sticker]
-> Parser
     (Text
      -> EmojiId
      -> Maybe EmojiId
      -> Text
      -> Maybe EmojiId
      -> StickerPack)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser [Sticker]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"stickers"
      Parser
  (Text
   -> EmojiId
   -> Maybe EmojiId
   -> Text
   -> Maybe EmojiId
   -> StickerPack)
-> Parser Text
-> Parser
     (EmojiId -> Maybe EmojiId -> Text -> Maybe EmojiId -> StickerPack)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"name"
      Parser
  (EmojiId -> Maybe EmojiId -> Text -> Maybe EmojiId -> StickerPack)
-> Parser EmojiId
-> Parser (Maybe EmojiId -> Text -> Maybe EmojiId -> StickerPack)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser EmojiId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"sku_id"
      Parser (Maybe EmojiId -> Text -> Maybe EmojiId -> StickerPack)
-> Parser (Maybe EmojiId)
-> Parser (Text -> Maybe EmojiId -> StickerPack)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe EmojiId)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"cover_sticker_id"
      Parser (Text -> Maybe EmojiId -> StickerPack)
-> Parser Text -> Parser (Maybe EmojiId -> StickerPack)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"description"
      Parser (Maybe EmojiId -> StickerPack)
-> Parser (Maybe EmojiId) -> Parser StickerPack
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe EmojiId)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"banner_asset_id"

-- | A full sticker object
data Sticker = Sticker
  { -- | The sticker's id.
    Sticker -> EmojiId
stickerId :: StickerId,
    -- | For standard stickers, the id of the pack.
    Sticker -> Maybe EmojiId
stickerStickerPackId :: Maybe Snowflake,
    -- | The sticker's name.
    Sticker -> Text
stickerName :: T.Text,
    -- | The sticker's description.
    Sticker -> Maybe Text
stickerDescription :: Maybe T.Text,
    -- | Autocomplete/suggestion tags for the sticker (max 200 characters total).
    Sticker -> [Text]
stickerTags :: [T.Text],
    -- | Whether the sticker is standard or guild type.
    Sticker -> Bool
stickerIsStandardType :: Bool,
    -- | The sticker's format type.
    Sticker -> StickerFormatType
stickerFormatType :: StickerFormatType,
    -- | Whether this guild sticker can be used.
    Sticker -> Maybe Bool
stickerAvailable :: Maybe Bool,
    -- | What guild owns this sticker.
    Sticker -> Maybe EmojiId
stickerGuildId :: Maybe GuildId,
    -- | What user uploaded the guild sticker.
    Sticker -> Maybe User
stickerUser :: Maybe User,
    -- | A standard sticker's sort order in its pack.
    Sticker -> Maybe Integer
stickerSortValue :: Maybe Integer
  }
  deriving (Int -> Sticker -> ShowS
[Sticker] -> ShowS
Sticker -> String
(Int -> Sticker -> ShowS)
-> (Sticker -> String) -> ([Sticker] -> ShowS) -> Show Sticker
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Sticker] -> ShowS
$cshowList :: [Sticker] -> ShowS
show :: Sticker -> String
$cshow :: Sticker -> String
showsPrec :: Int -> Sticker -> ShowS
$cshowsPrec :: Int -> Sticker -> ShowS
Show, ReadPrec [Sticker]
ReadPrec Sticker
Int -> ReadS Sticker
ReadS [Sticker]
(Int -> ReadS Sticker)
-> ReadS [Sticker]
-> ReadPrec Sticker
-> ReadPrec [Sticker]
-> Read Sticker
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Sticker]
$creadListPrec :: ReadPrec [Sticker]
readPrec :: ReadPrec Sticker
$creadPrec :: ReadPrec Sticker
readList :: ReadS [Sticker]
$creadList :: ReadS [Sticker]
readsPrec :: Int -> ReadS Sticker
$creadsPrec :: Int -> ReadS Sticker
Read, Sticker -> Sticker -> Bool
(Sticker -> Sticker -> Bool)
-> (Sticker -> Sticker -> Bool) -> Eq Sticker
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Sticker -> Sticker -> Bool
$c/= :: Sticker -> Sticker -> Bool
== :: Sticker -> Sticker -> Bool
$c== :: Sticker -> Sticker -> Bool
Eq, Eq Sticker
Eq Sticker
-> (Sticker -> Sticker -> Ordering)
-> (Sticker -> Sticker -> Bool)
-> (Sticker -> Sticker -> Bool)
-> (Sticker -> Sticker -> Bool)
-> (Sticker -> Sticker -> Bool)
-> (Sticker -> Sticker -> Sticker)
-> (Sticker -> Sticker -> Sticker)
-> Ord Sticker
Sticker -> Sticker -> Bool
Sticker -> Sticker -> Ordering
Sticker -> Sticker -> Sticker
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 :: Sticker -> Sticker -> Sticker
$cmin :: Sticker -> Sticker -> Sticker
max :: Sticker -> Sticker -> Sticker
$cmax :: Sticker -> Sticker -> Sticker
>= :: Sticker -> Sticker -> Bool
$c>= :: Sticker -> Sticker -> Bool
> :: Sticker -> Sticker -> Bool
$c> :: Sticker -> Sticker -> Bool
<= :: Sticker -> Sticker -> Bool
$c<= :: Sticker -> Sticker -> Bool
< :: Sticker -> Sticker -> Bool
$c< :: Sticker -> Sticker -> Bool
compare :: Sticker -> Sticker -> Ordering
$ccompare :: Sticker -> Sticker -> Ordering
$cp1Ord :: Eq Sticker
Ord)

instance FromJSON Sticker where
  parseJSON :: Value -> Parser Sticker
parseJSON = String -> (Object -> Parser Sticker) -> Value -> Parser Sticker
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"Sticker" ((Object -> Parser Sticker) -> Value -> Parser Sticker)
-> (Object -> Parser Sticker) -> Value -> Parser Sticker
forall a b. (a -> b) -> a -> b
$ \Object
o ->
    EmojiId
-> Maybe EmojiId
-> Text
-> Maybe Text
-> [Text]
-> Bool
-> StickerFormatType
-> Maybe Bool
-> Maybe EmojiId
-> Maybe User
-> Maybe Integer
-> Sticker
Sticker (EmojiId
 -> Maybe EmojiId
 -> Text
 -> Maybe Text
 -> [Text]
 -> Bool
 -> StickerFormatType
 -> Maybe Bool
 -> Maybe EmojiId
 -> Maybe User
 -> Maybe Integer
 -> Sticker)
-> Parser EmojiId
-> Parser
     (Maybe EmojiId
      -> Text
      -> Maybe Text
      -> [Text]
      -> Bool
      -> StickerFormatType
      -> Maybe Bool
      -> Maybe EmojiId
      -> Maybe User
      -> Maybe Integer
      -> Sticker)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser EmojiId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"id"
      Parser
  (Maybe EmojiId
   -> Text
   -> Maybe Text
   -> [Text]
   -> Bool
   -> StickerFormatType
   -> Maybe Bool
   -> Maybe EmojiId
   -> Maybe User
   -> Maybe Integer
   -> Sticker)
-> Parser (Maybe EmojiId)
-> Parser
     (Text
      -> Maybe Text
      -> [Text]
      -> Bool
      -> StickerFormatType
      -> Maybe Bool
      -> Maybe EmojiId
      -> Maybe User
      -> Maybe Integer
      -> Sticker)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe EmojiId)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"pack_id"
      Parser
  (Text
   -> Maybe Text
   -> [Text]
   -> Bool
   -> StickerFormatType
   -> Maybe Bool
   -> Maybe EmojiId
   -> Maybe User
   -> Maybe Integer
   -> Sticker)
-> Parser Text
-> Parser
     (Maybe Text
      -> [Text]
      -> Bool
      -> StickerFormatType
      -> Maybe Bool
      -> Maybe EmojiId
      -> Maybe User
      -> Maybe Integer
      -> Sticker)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.:  Key
"name"
      Parser
  (Maybe Text
   -> [Text]
   -> Bool
   -> StickerFormatType
   -> Maybe Bool
   -> Maybe EmojiId
   -> Maybe User
   -> Maybe Integer
   -> Sticker)
-> Parser (Maybe Text)
-> Parser
     ([Text]
      -> Bool
      -> StickerFormatType
      -> Maybe Bool
      -> Maybe EmojiId
      -> Maybe User
      -> Maybe Integer
      -> Sticker)
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"
      Parser
  ([Text]
   -> Bool
   -> StickerFormatType
   -> Maybe Bool
   -> Maybe EmojiId
   -> Maybe User
   -> Maybe Integer
   -> Sticker)
-> Parser [Text]
-> Parser
     (Bool
      -> StickerFormatType
      -> Maybe Bool
      -> Maybe EmojiId
      -> Maybe User
      -> Maybe Integer
      -> Sticker)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ((Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"tags") Parser Text -> (Text -> [Text]) -> Parser [Text]
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> Text -> Text -> [Text]
T.splitOn Text
"\n")
      Parser
  (Bool
   -> StickerFormatType
   -> Maybe Bool
   -> Maybe EmojiId
   -> Maybe User
   -> Maybe Integer
   -> Sticker)
-> Parser Bool
-> Parser
     (StickerFormatType
      -> Maybe Bool
      -> Maybe EmojiId
      -> Maybe User
      -> Maybe Integer
      -> Sticker)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ((Object
o Object -> Key -> Parser Int
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"type") Parser Int -> (Int -> Bool) -> Parser Bool
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> (Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== (Int
1 :: Int)))
      Parser
  (StickerFormatType
   -> Maybe Bool
   -> Maybe EmojiId
   -> Maybe User
   -> Maybe Integer
   -> Sticker)
-> Parser StickerFormatType
-> Parser
     (Maybe Bool
      -> Maybe EmojiId -> Maybe User -> Maybe Integer -> Sticker)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser StickerFormatType
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"format_type"
      Parser
  (Maybe Bool
   -> Maybe EmojiId -> Maybe User -> Maybe Integer -> Sticker)
-> Parser (Maybe Bool)
-> Parser (Maybe EmojiId -> Maybe User -> Maybe Integer -> Sticker)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"available"
      Parser (Maybe EmojiId -> Maybe User -> Maybe Integer -> Sticker)
-> Parser (Maybe EmojiId)
-> Parser (Maybe User -> Maybe Integer -> Sticker)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe EmojiId)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"guild_id"
      Parser (Maybe User -> Maybe Integer -> Sticker)
-> Parser (Maybe User) -> Parser (Maybe Integer -> Sticker)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe User)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"user"
      Parser (Maybe Integer -> Sticker)
-> Parser (Maybe Integer) -> Parser Sticker
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Integer)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"sort_value"

-- | A simplified sticker object.
data StickerItem = StickerItem
  { -- | The sticker's id.
    StickerItem -> EmojiId
stickerItemId :: StickerId,
    -- | The sticker's name.
    StickerItem -> Text
stickerItemName :: T.Text,
    -- | The sticker's format type.
    StickerItem -> StickerFormatType
stickerItemFormatType :: StickerFormatType
  }
  deriving (Int -> StickerItem -> ShowS
[StickerItem] -> ShowS
StickerItem -> String
(Int -> StickerItem -> ShowS)
-> (StickerItem -> String)
-> ([StickerItem] -> ShowS)
-> Show StickerItem
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [StickerItem] -> ShowS
$cshowList :: [StickerItem] -> ShowS
show :: StickerItem -> String
$cshow :: StickerItem -> String
showsPrec :: Int -> StickerItem -> ShowS
$cshowsPrec :: Int -> StickerItem -> ShowS
Show, ReadPrec [StickerItem]
ReadPrec StickerItem
Int -> ReadS StickerItem
ReadS [StickerItem]
(Int -> ReadS StickerItem)
-> ReadS [StickerItem]
-> ReadPrec StickerItem
-> ReadPrec [StickerItem]
-> Read StickerItem
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [StickerItem]
$creadListPrec :: ReadPrec [StickerItem]
readPrec :: ReadPrec StickerItem
$creadPrec :: ReadPrec StickerItem
readList :: ReadS [StickerItem]
$creadList :: ReadS [StickerItem]
readsPrec :: Int -> ReadS StickerItem
$creadsPrec :: Int -> ReadS StickerItem
Read, StickerItem -> StickerItem -> Bool
(StickerItem -> StickerItem -> Bool)
-> (StickerItem -> StickerItem -> Bool) -> Eq StickerItem
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: StickerItem -> StickerItem -> Bool
$c/= :: StickerItem -> StickerItem -> Bool
== :: StickerItem -> StickerItem -> Bool
$c== :: StickerItem -> StickerItem -> Bool
Eq, Eq StickerItem
Eq StickerItem
-> (StickerItem -> StickerItem -> Ordering)
-> (StickerItem -> StickerItem -> Bool)
-> (StickerItem -> StickerItem -> Bool)
-> (StickerItem -> StickerItem -> Bool)
-> (StickerItem -> StickerItem -> Bool)
-> (StickerItem -> StickerItem -> StickerItem)
-> (StickerItem -> StickerItem -> StickerItem)
-> Ord StickerItem
StickerItem -> StickerItem -> Bool
StickerItem -> StickerItem -> Ordering
StickerItem -> StickerItem -> StickerItem
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 :: StickerItem -> StickerItem -> StickerItem
$cmin :: StickerItem -> StickerItem -> StickerItem
max :: StickerItem -> StickerItem -> StickerItem
$cmax :: StickerItem -> StickerItem -> StickerItem
>= :: StickerItem -> StickerItem -> Bool
$c>= :: StickerItem -> StickerItem -> Bool
> :: StickerItem -> StickerItem -> Bool
$c> :: StickerItem -> StickerItem -> Bool
<= :: StickerItem -> StickerItem -> Bool
$c<= :: StickerItem -> StickerItem -> Bool
< :: StickerItem -> StickerItem -> Bool
$c< :: StickerItem -> StickerItem -> Bool
compare :: StickerItem -> StickerItem -> Ordering
$ccompare :: StickerItem -> StickerItem -> Ordering
$cp1Ord :: Eq StickerItem
Ord)

instance FromJSON StickerItem where
  parseJSON :: Value -> Parser StickerItem
parseJSON = String
-> (Object -> Parser StickerItem) -> Value -> Parser StickerItem
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"StickerItem" ((Object -> Parser StickerItem) -> Value -> Parser StickerItem)
-> (Object -> Parser StickerItem) -> Value -> Parser StickerItem
forall a b. (a -> b) -> a -> b
$ \Object
o ->
    EmojiId -> Text -> StickerFormatType -> StickerItem
StickerItem (EmojiId -> Text -> StickerFormatType -> StickerItem)
-> Parser EmojiId
-> Parser (Text -> StickerFormatType -> StickerItem)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser EmojiId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"id"
      Parser (Text -> StickerFormatType -> StickerItem)
-> Parser Text -> Parser (StickerFormatType -> StickerItem)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"name"
      Parser (StickerFormatType -> StickerItem)
-> Parser StickerFormatType -> Parser StickerItem
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser StickerFormatType
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"format_type"

instance ToJSON StickerItem where
  toJSON :: StickerItem -> Value
toJSON StickerItem {Text
EmojiId
StickerFormatType
stickerItemFormatType :: StickerFormatType
stickerItemName :: Text
stickerItemId :: EmojiId
stickerItemFormatType :: StickerItem -> StickerFormatType
stickerItemName :: StickerItem -> Text
stickerItemId :: StickerItem -> EmojiId
..} =
    [Pair] -> Value
object
      [ (Key
"id", EmojiId -> Value
forall a. ToJSON a => a -> Value
toJSON EmojiId
stickerItemId),
        (Key
"name", Text -> Value
forall a. ToJSON a => a -> Value
toJSON Text
stickerItemName),
        (Key
"format_type", StickerFormatType -> Value
forall a. ToJSON a => a -> Value
toJSON StickerFormatType
stickerItemFormatType)
      ]

data StickerFormatType
  = StickerFormatTypePNG
  | StickerFormatTypeAPNG
  | StickerFormatTypeLOTTIE
  deriving (Int -> StickerFormatType -> ShowS
[StickerFormatType] -> ShowS
StickerFormatType -> String
(Int -> StickerFormatType -> ShowS)
-> (StickerFormatType -> String)
-> ([StickerFormatType] -> ShowS)
-> Show StickerFormatType
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [StickerFormatType] -> ShowS
$cshowList :: [StickerFormatType] -> ShowS
show :: StickerFormatType -> String
$cshow :: StickerFormatType -> String
showsPrec :: Int -> StickerFormatType -> ShowS
$cshowsPrec :: Int -> StickerFormatType -> ShowS
Show, ReadPrec [StickerFormatType]
ReadPrec StickerFormatType
Int -> ReadS StickerFormatType
ReadS [StickerFormatType]
(Int -> ReadS StickerFormatType)
-> ReadS [StickerFormatType]
-> ReadPrec StickerFormatType
-> ReadPrec [StickerFormatType]
-> Read StickerFormatType
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [StickerFormatType]
$creadListPrec :: ReadPrec [StickerFormatType]
readPrec :: ReadPrec StickerFormatType
$creadPrec :: ReadPrec StickerFormatType
readList :: ReadS [StickerFormatType]
$creadList :: ReadS [StickerFormatType]
readsPrec :: Int -> ReadS StickerFormatType
$creadsPrec :: Int -> ReadS StickerFormatType
Read, StickerFormatType -> StickerFormatType -> Bool
(StickerFormatType -> StickerFormatType -> Bool)
-> (StickerFormatType -> StickerFormatType -> Bool)
-> Eq StickerFormatType
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: StickerFormatType -> StickerFormatType -> Bool
$c/= :: StickerFormatType -> StickerFormatType -> Bool
== :: StickerFormatType -> StickerFormatType -> Bool
$c== :: StickerFormatType -> StickerFormatType -> Bool
Eq, Eq StickerFormatType
Eq StickerFormatType
-> (StickerFormatType -> StickerFormatType -> Ordering)
-> (StickerFormatType -> StickerFormatType -> Bool)
-> (StickerFormatType -> StickerFormatType -> Bool)
-> (StickerFormatType -> StickerFormatType -> Bool)
-> (StickerFormatType -> StickerFormatType -> Bool)
-> (StickerFormatType -> StickerFormatType -> StickerFormatType)
-> (StickerFormatType -> StickerFormatType -> StickerFormatType)
-> Ord StickerFormatType
StickerFormatType -> StickerFormatType -> Bool
StickerFormatType -> StickerFormatType -> Ordering
StickerFormatType -> StickerFormatType -> StickerFormatType
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 :: StickerFormatType -> StickerFormatType -> StickerFormatType
$cmin :: StickerFormatType -> StickerFormatType -> StickerFormatType
max :: StickerFormatType -> StickerFormatType -> StickerFormatType
$cmax :: StickerFormatType -> StickerFormatType -> StickerFormatType
>= :: StickerFormatType -> StickerFormatType -> Bool
$c>= :: StickerFormatType -> StickerFormatType -> Bool
> :: StickerFormatType -> StickerFormatType -> Bool
$c> :: StickerFormatType -> StickerFormatType -> Bool
<= :: StickerFormatType -> StickerFormatType -> Bool
$c<= :: StickerFormatType -> StickerFormatType -> Bool
< :: StickerFormatType -> StickerFormatType -> Bool
$c< :: StickerFormatType -> StickerFormatType -> Bool
compare :: StickerFormatType -> StickerFormatType -> Ordering
$ccompare :: StickerFormatType -> StickerFormatType -> Ordering
$cp1Ord :: Eq StickerFormatType
Ord, Typeable StickerFormatType
DataType
Constr
Typeable StickerFormatType
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g)
    -> StickerFormatType
    -> c StickerFormatType)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c StickerFormatType)
-> (StickerFormatType -> Constr)
-> (StickerFormatType -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c StickerFormatType))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c StickerFormatType))
-> ((forall b. Data b => b -> b)
    -> StickerFormatType -> StickerFormatType)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> StickerFormatType -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> StickerFormatType -> r)
-> (forall u.
    (forall d. Data d => d -> u) -> StickerFormatType -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> StickerFormatType -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> StickerFormatType -> m StickerFormatType)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> StickerFormatType -> m StickerFormatType)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> StickerFormatType -> m StickerFormatType)
-> Data StickerFormatType
StickerFormatType -> DataType
StickerFormatType -> Constr
(forall b. Data b => b -> b)
-> StickerFormatType -> StickerFormatType
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> StickerFormatType -> c StickerFormatType
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c StickerFormatType
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u.
Int -> (forall d. Data d => d -> u) -> StickerFormatType -> u
forall u. (forall d. Data d => d -> u) -> StickerFormatType -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> StickerFormatType -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> StickerFormatType -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> StickerFormatType -> m StickerFormatType
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> StickerFormatType -> m StickerFormatType
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c StickerFormatType
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> StickerFormatType -> c StickerFormatType
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c StickerFormatType)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c StickerFormatType)
$cStickerFormatTypeLOTTIE :: Constr
$cStickerFormatTypeAPNG :: Constr
$cStickerFormatTypePNG :: Constr
$tStickerFormatType :: DataType
gmapMo :: (forall d. Data d => d -> m d)
-> StickerFormatType -> m StickerFormatType
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> StickerFormatType -> m StickerFormatType
gmapMp :: (forall d. Data d => d -> m d)
-> StickerFormatType -> m StickerFormatType
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> StickerFormatType -> m StickerFormatType
gmapM :: (forall d. Data d => d -> m d)
-> StickerFormatType -> m StickerFormatType
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> StickerFormatType -> m StickerFormatType
gmapQi :: Int -> (forall d. Data d => d -> u) -> StickerFormatType -> u
$cgmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> StickerFormatType -> u
gmapQ :: (forall d. Data d => d -> u) -> StickerFormatType -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> StickerFormatType -> [u]
gmapQr :: (r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> StickerFormatType -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> StickerFormatType -> r
gmapQl :: (r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> StickerFormatType -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> StickerFormatType -> r
gmapT :: (forall b. Data b => b -> b)
-> StickerFormatType -> StickerFormatType
$cgmapT :: (forall b. Data b => b -> b)
-> StickerFormatType -> StickerFormatType
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c StickerFormatType)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c StickerFormatType)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c StickerFormatType)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c StickerFormatType)
dataTypeOf :: StickerFormatType -> DataType
$cdataTypeOf :: StickerFormatType -> DataType
toConstr :: StickerFormatType -> Constr
$ctoConstr :: StickerFormatType -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c StickerFormatType
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c StickerFormatType
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> StickerFormatType -> c StickerFormatType
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> StickerFormatType -> c StickerFormatType
$cp1Data :: Typeable StickerFormatType
Data)

instance InternalDiscordEnum StickerFormatType where
  discordTypeStartValue :: StickerFormatType
discordTypeStartValue = StickerFormatType
StickerFormatTypePNG
  fromDiscordType :: StickerFormatType -> Int
fromDiscordType StickerFormatType
StickerFormatTypePNG = Int
1
  fromDiscordType StickerFormatType
StickerFormatTypeAPNG = Int
2
  fromDiscordType StickerFormatType
StickerFormatTypeLOTTIE = Int
3

instance ToJSON StickerFormatType where
  toJSON :: StickerFormatType -> Value
toJSON = Int -> Value
forall a. ToJSON a => a -> Value
toJSON (Int -> Value)
-> (StickerFormatType -> Int) -> StickerFormatType -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. StickerFormatType -> Int
forall a. InternalDiscordEnum a => a -> Int
fromDiscordType

instance FromJSON StickerFormatType where
  parseJSON :: Value -> Parser StickerFormatType
parseJSON = String -> Value -> Parser StickerFormatType
forall a. InternalDiscordEnum a => String -> Value -> Parser a
discordTypeParseJSON String
"StickerFormatType"