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

-- | Structures pertaining to Discord Scheduled Events
module Discord.Internal.Types.ScheduledEvents where

import           Data.Aeson                     ( (.:)
                                                , (.:!)
                                                , (.:?)
                                                , (.=)
                                                , FromJSON(parseJSON)
                                                , ToJSON(toJSON)
                                                , Value(Null, Number, String)
                                                , object
                                                , withObject
                                                , withText
                                                )
import           Data.Aeson.Types               ( Parser )
import qualified Data.ByteString               as B
import           Data.Data                      ( Data )
import           Data.Default                   ( Default(def) )
import qualified Data.Text                     as T
import qualified Data.Text.Encoding            as T
import           Data.Time                      ( UTCTime )
import           Discord.Internal.Types.Prelude ( ChannelId
                                                , GuildId
                                                , InternalDiscordEnum
                                                  ( discordTypeParseJSON
                                                  , discordTypeStartValue
                                                  , fromDiscordType
                                                  )
                                                , ScheduledEventEntityId
                                                , ScheduledEventId
                                                , UserId
                                                , toMaybeJSON
                                                )
import           Discord.Internal.Types.User    ( GuildMember
                                                , User
                                                )



-- | The ScheduledEvent data structure
data ScheduledEvent
  = ScheduledEventStage
      { ScheduledEvent -> ScheduledEventId
scheduledEventStageId :: ScheduledEventId
      , ScheduledEvent -> ScheduledEventId
scheduledEventStageGuildId :: GuildId
      , ScheduledEvent -> ScheduledEventId
scheduledEventStageChannelId :: ChannelId
      , ScheduledEvent -> Maybe ScheduledEventId
scheduledEventStageCreatorId :: Maybe UserId
      , ScheduledEvent -> Text
scheduledEventStageName :: T.Text
      , ScheduledEvent -> Maybe Text
scheduledEventStageDescription :: Maybe T.Text
      , ScheduledEvent -> UTCTime
scheduledEventStageStartTime :: UTCTime
      , ScheduledEvent -> Maybe UTCTime
scheduledEventStageEndTime :: Maybe UTCTime
      , ScheduledEvent -> ScheduledEventPrivacyLevel
scheduledEventStagePrivacyLevel :: ScheduledEventPrivacyLevel
      , ScheduledEvent -> ScheduledEventStatus
scheduledEventStageStatus :: ScheduledEventStatus
      , ScheduledEvent -> Maybe ScheduledEventId
scheduledEventStageEntityId :: Maybe ScheduledEventEntityId
      , ScheduledEvent -> Maybe User
scheduledEventStageCreator :: Maybe User
      , ScheduledEvent -> Maybe Integer
scheduledEventStageUserCount :: Maybe Integer
      , ScheduledEvent -> Maybe Text
scheduledEventStageImage :: Maybe ScheduledEventImageHash
      }
  | ScheduledEventVoice
      { ScheduledEvent -> ScheduledEventId
scheduledEventVoiceId :: ScheduledEventId
      , ScheduledEvent -> ScheduledEventId
scheduledEventVoiceGuildId :: GuildId
      , ScheduledEvent -> ScheduledEventId
scheduledEventVoiceChannelId :: ChannelId
      , ScheduledEvent -> Maybe ScheduledEventId
scheduledEventVoiceCreatorId :: Maybe UserId
      , ScheduledEvent -> Text
scheduledEventVoiceName :: T.Text
      , ScheduledEvent -> Maybe Text
scheduledEventVoiceDescription :: Maybe T.Text
      , ScheduledEvent -> UTCTime
scheduledEventVoiceStartTime :: UTCTime
      , ScheduledEvent -> Maybe UTCTime
scheduledEventVoiceEndTime :: Maybe UTCTime
      , ScheduledEvent -> ScheduledEventPrivacyLevel
scheduledEventVoicePrivacyLevel :: ScheduledEventPrivacyLevel
      , ScheduledEvent -> ScheduledEventStatus
scheduledEventVoiceStatus :: ScheduledEventStatus
      , ScheduledEvent -> Maybe ScheduledEventId
scheduledEventVoiceEntityId :: Maybe ScheduledEventEntityId
      , ScheduledEvent -> Maybe User
scheduledEventVoiceCreator :: Maybe User
      , ScheduledEvent -> Maybe Integer
scheduledEventVoiceUserCount :: Maybe Integer
      , ScheduledEvent -> Maybe Text
scheduledEventVoiceImage :: Maybe ScheduledEventImageHash
      }
  | ScheduledEventExternal
      { ScheduledEvent -> ScheduledEventId
scheduledEventExternalId :: ScheduledEventId
      , ScheduledEvent -> ScheduledEventId
scheduledEventExternalGuildId :: GuildId
      , ScheduledEvent -> Text
scheduledEventExternalLocation :: T.Text
      , ScheduledEvent -> Maybe ScheduledEventId
scheduledEventExternalCreatorId :: Maybe UserId
      , ScheduledEvent -> Text
scheduledEventExternalName :: T.Text
      , ScheduledEvent -> Maybe Text
scheduledEventExternalDescription :: Maybe T.Text
      , ScheduledEvent -> UTCTime
scheduledEventExternalStartTime :: UTCTime
      , ScheduledEvent -> UTCTime
scheduledEventExternalEndTime :: UTCTime
      , ScheduledEvent -> ScheduledEventPrivacyLevel
scheduledEventExternalPrivacyLevel :: ScheduledEventPrivacyLevel
      , ScheduledEvent -> ScheduledEventStatus
scheduledEventExternalStatus :: ScheduledEventStatus
      , ScheduledEvent -> Maybe ScheduledEventId
scheduledEventExternalEntityId :: Maybe ScheduledEventEntityId
      , ScheduledEvent -> Maybe User
scheduledEventExternalCreator :: Maybe User
      , ScheduledEvent -> Maybe Integer
scheduledEventExternalUserCount :: Maybe Integer
      , ScheduledEvent -> Maybe Text
scheduledEventExternalImage :: Maybe ScheduledEventImageHash
      }

instance ToJSON ScheduledEvent where
  toJSON :: ScheduledEvent -> Value
toJSON ScheduledEventStage {Maybe Integer
Maybe UTCTime
Maybe Text
Maybe ScheduledEventId
Maybe User
UTCTime
Text
ScheduledEventId
ScheduledEventStatus
ScheduledEventPrivacyLevel
scheduledEventStageImage :: Maybe Text
scheduledEventStageUserCount :: Maybe Integer
scheduledEventStageCreator :: Maybe User
scheduledEventStageEntityId :: Maybe ScheduledEventId
scheduledEventStageStatus :: ScheduledEventStatus
scheduledEventStagePrivacyLevel :: ScheduledEventPrivacyLevel
scheduledEventStageEndTime :: Maybe UTCTime
scheduledEventStageStartTime :: UTCTime
scheduledEventStageDescription :: Maybe Text
scheduledEventStageName :: Text
scheduledEventStageCreatorId :: Maybe ScheduledEventId
scheduledEventStageChannelId :: ScheduledEventId
scheduledEventStageGuildId :: ScheduledEventId
scheduledEventStageId :: ScheduledEventId
scheduledEventStageImage :: ScheduledEvent -> Maybe Text
scheduledEventStageUserCount :: ScheduledEvent -> Maybe Integer
scheduledEventStageCreator :: ScheduledEvent -> Maybe User
scheduledEventStageEntityId :: ScheduledEvent -> Maybe ScheduledEventId
scheduledEventStageStatus :: ScheduledEvent -> ScheduledEventStatus
scheduledEventStagePrivacyLevel :: ScheduledEvent -> ScheduledEventPrivacyLevel
scheduledEventStageEndTime :: ScheduledEvent -> Maybe UTCTime
scheduledEventStageStartTime :: ScheduledEvent -> UTCTime
scheduledEventStageDescription :: ScheduledEvent -> Maybe Text
scheduledEventStageName :: ScheduledEvent -> Text
scheduledEventStageCreatorId :: ScheduledEvent -> Maybe ScheduledEventId
scheduledEventStageChannelId :: ScheduledEvent -> ScheduledEventId
scheduledEventStageGuildId :: ScheduledEvent -> ScheduledEventId
scheduledEventStageId :: ScheduledEvent -> ScheduledEventId
..} = [Pair] -> Value
object
    [ (Key
name, Value
value)
    | (Key
name, Just Value
value) <-
      [ (Key
"id"                  , ScheduledEventId -> Maybe Value
forall a. ToJSON a => a -> Maybe Value
toMaybeJSON ScheduledEventId
scheduledEventStageId)
      , (Key
"guild_id"            , ScheduledEventId -> Maybe Value
forall a. ToJSON a => a -> Maybe Value
toMaybeJSON ScheduledEventId
scheduledEventStageGuildId)
      , (Key
"channel_id"          , ScheduledEventId -> Maybe Value
forall a. ToJSON a => a -> Maybe Value
toMaybeJSON ScheduledEventId
scheduledEventStageChannelId)
      , (Key
"creator_id"          , ScheduledEventId -> Value
forall a. ToJSON a => a -> Value
toJSON (ScheduledEventId -> Value)
-> Maybe ScheduledEventId -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe ScheduledEventId
scheduledEventStageCreatorId)
      , (Key
"name"                , Text -> Maybe Value
forall a. ToJSON a => a -> Maybe Value
toMaybeJSON Text
scheduledEventStageName)
      , (Key
"description"         , Text -> Value
forall a. ToJSON a => a -> Value
toJSON (Text -> Value) -> Maybe Text -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
scheduledEventStageDescription)
      , (Key
"scheduled_start_time", UTCTime -> Maybe Value
forall a. ToJSON a => a -> Maybe Value
toMaybeJSON UTCTime
scheduledEventStageStartTime)
      , (Key
"scheduled_end_time"  , UTCTime -> Value
forall a. ToJSON a => a -> Value
toJSON (UTCTime -> Value) -> Maybe UTCTime -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe UTCTime
scheduledEventStageEndTime)
      , (Key
"privacy_level"       , ScheduledEventPrivacyLevel -> Maybe Value
forall a. ToJSON a => a -> Maybe Value
toMaybeJSON ScheduledEventPrivacyLevel
scheduledEventStagePrivacyLevel)
      , (Key
"entity_type"         , Value -> Maybe Value
forall a. a -> Maybe a
Just (Value -> Maybe Value) -> Value -> Maybe Value
forall a b. (a -> b) -> a -> b
$ Scientific -> Value
Number Scientific
1)
      , (Key
"entity_id"           , ScheduledEventId -> Value
forall a. ToJSON a => a -> Value
toJSON (ScheduledEventId -> Value)
-> Maybe ScheduledEventId -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe ScheduledEventId
scheduledEventStageEntityId)
      , (Key
"creator"             , 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
scheduledEventStageCreator)
      , (Key
"user_count"          , Integer -> Value
forall a. ToJSON a => a -> Value
toJSON (Integer -> Value) -> Maybe Integer -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Integer
scheduledEventStageUserCount)
      , (Key
"image"               , Text -> Value
forall a. ToJSON a => a -> Value
toJSON (Text -> Value) -> Maybe Text -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
scheduledEventStageImage)
      ]
    ]
  toJSON ScheduledEventVoice {Maybe Integer
Maybe UTCTime
Maybe Text
Maybe ScheduledEventId
Maybe User
UTCTime
Text
ScheduledEventId
ScheduledEventStatus
ScheduledEventPrivacyLevel
scheduledEventVoiceImage :: Maybe Text
scheduledEventVoiceUserCount :: Maybe Integer
scheduledEventVoiceCreator :: Maybe User
scheduledEventVoiceEntityId :: Maybe ScheduledEventId
scheduledEventVoiceStatus :: ScheduledEventStatus
scheduledEventVoicePrivacyLevel :: ScheduledEventPrivacyLevel
scheduledEventVoiceEndTime :: Maybe UTCTime
scheduledEventVoiceStartTime :: UTCTime
scheduledEventVoiceDescription :: Maybe Text
scheduledEventVoiceName :: Text
scheduledEventVoiceCreatorId :: Maybe ScheduledEventId
scheduledEventVoiceChannelId :: ScheduledEventId
scheduledEventVoiceGuildId :: ScheduledEventId
scheduledEventVoiceId :: ScheduledEventId
scheduledEventVoiceImage :: ScheduledEvent -> Maybe Text
scheduledEventVoiceUserCount :: ScheduledEvent -> Maybe Integer
scheduledEventVoiceCreator :: ScheduledEvent -> Maybe User
scheduledEventVoiceEntityId :: ScheduledEvent -> Maybe ScheduledEventId
scheduledEventVoiceStatus :: ScheduledEvent -> ScheduledEventStatus
scheduledEventVoicePrivacyLevel :: ScheduledEvent -> ScheduledEventPrivacyLevel
scheduledEventVoiceEndTime :: ScheduledEvent -> Maybe UTCTime
scheduledEventVoiceStartTime :: ScheduledEvent -> UTCTime
scheduledEventVoiceDescription :: ScheduledEvent -> Maybe Text
scheduledEventVoiceName :: ScheduledEvent -> Text
scheduledEventVoiceCreatorId :: ScheduledEvent -> Maybe ScheduledEventId
scheduledEventVoiceChannelId :: ScheduledEvent -> ScheduledEventId
scheduledEventVoiceGuildId :: ScheduledEvent -> ScheduledEventId
scheduledEventVoiceId :: ScheduledEvent -> ScheduledEventId
..} = [Pair] -> Value
object
    [ (Key
name, Value
value)
    | (Key
name, Just Value
value) <-
      [ (Key
"id"                  , ScheduledEventId -> Maybe Value
forall a. ToJSON a => a -> Maybe Value
toMaybeJSON ScheduledEventId
scheduledEventVoiceId)
      , (Key
"guild_id"            , ScheduledEventId -> Maybe Value
forall a. ToJSON a => a -> Maybe Value
toMaybeJSON ScheduledEventId
scheduledEventVoiceGuildId)
      , (Key
"channel_id"          , ScheduledEventId -> Maybe Value
forall a. ToJSON a => a -> Maybe Value
toMaybeJSON ScheduledEventId
scheduledEventVoiceChannelId)
      , (Key
"creator_id"          , ScheduledEventId -> Value
forall a. ToJSON a => a -> Value
toJSON (ScheduledEventId -> Value)
-> Maybe ScheduledEventId -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe ScheduledEventId
scheduledEventVoiceCreatorId)
      , (Key
"name"                , Text -> Maybe Value
forall a. ToJSON a => a -> Maybe Value
toMaybeJSON Text
scheduledEventVoiceName)
      , (Key
"description"         , Text -> Value
forall a. ToJSON a => a -> Value
toJSON (Text -> Value) -> Maybe Text -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
scheduledEventVoiceDescription)
      , (Key
"scheduled_start_time", UTCTime -> Maybe Value
forall a. ToJSON a => a -> Maybe Value
toMaybeJSON UTCTime
scheduledEventVoiceStartTime)
      , (Key
"scheduled_end_time"  , UTCTime -> Value
forall a. ToJSON a => a -> Value
toJSON (UTCTime -> Value) -> Maybe UTCTime -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe UTCTime
scheduledEventVoiceEndTime)
      , (Key
"privacy_level"       , ScheduledEventPrivacyLevel -> Maybe Value
forall a. ToJSON a => a -> Maybe Value
toMaybeJSON ScheduledEventPrivacyLevel
scheduledEventVoicePrivacyLevel)
      , (Key
"entity_type"         , Value -> Maybe Value
forall a. a -> Maybe a
Just (Value -> Maybe Value) -> Value -> Maybe Value
forall a b. (a -> b) -> a -> b
$ Scientific -> Value
Number Scientific
2)
      , (Key
"entity_id"           , ScheduledEventId -> Value
forall a. ToJSON a => a -> Value
toJSON (ScheduledEventId -> Value)
-> Maybe ScheduledEventId -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe ScheduledEventId
scheduledEventVoiceEntityId)
      , (Key
"creator"             , 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
scheduledEventVoiceCreator)
      , (Key
"user_count"          , Integer -> Value
forall a. ToJSON a => a -> Value
toJSON (Integer -> Value) -> Maybe Integer -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Integer
scheduledEventVoiceUserCount)
      , (Key
"image"               , Text -> Value
forall a. ToJSON a => a -> Value
toJSON (Text -> Value) -> Maybe Text -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
scheduledEventVoiceImage)
      ]
    ]
  toJSON ScheduledEventExternal {Maybe Integer
Maybe Text
Maybe ScheduledEventId
Maybe User
UTCTime
Text
ScheduledEventId
ScheduledEventStatus
ScheduledEventPrivacyLevel
scheduledEventExternalImage :: Maybe Text
scheduledEventExternalUserCount :: Maybe Integer
scheduledEventExternalCreator :: Maybe User
scheduledEventExternalEntityId :: Maybe ScheduledEventId
scheduledEventExternalStatus :: ScheduledEventStatus
scheduledEventExternalPrivacyLevel :: ScheduledEventPrivacyLevel
scheduledEventExternalEndTime :: UTCTime
scheduledEventExternalStartTime :: UTCTime
scheduledEventExternalDescription :: Maybe Text
scheduledEventExternalName :: Text
scheduledEventExternalCreatorId :: Maybe ScheduledEventId
scheduledEventExternalLocation :: Text
scheduledEventExternalGuildId :: ScheduledEventId
scheduledEventExternalId :: ScheduledEventId
scheduledEventExternalImage :: ScheduledEvent -> Maybe Text
scheduledEventExternalUserCount :: ScheduledEvent -> Maybe Integer
scheduledEventExternalCreator :: ScheduledEvent -> Maybe User
scheduledEventExternalEntityId :: ScheduledEvent -> Maybe ScheduledEventId
scheduledEventExternalStatus :: ScheduledEvent -> ScheduledEventStatus
scheduledEventExternalPrivacyLevel :: ScheduledEvent -> ScheduledEventPrivacyLevel
scheduledEventExternalEndTime :: ScheduledEvent -> UTCTime
scheduledEventExternalStartTime :: ScheduledEvent -> UTCTime
scheduledEventExternalDescription :: ScheduledEvent -> Maybe Text
scheduledEventExternalName :: ScheduledEvent -> Text
scheduledEventExternalCreatorId :: ScheduledEvent -> Maybe ScheduledEventId
scheduledEventExternalLocation :: ScheduledEvent -> Text
scheduledEventExternalGuildId :: ScheduledEvent -> ScheduledEventId
scheduledEventExternalId :: ScheduledEvent -> ScheduledEventId
..} = [Pair] -> Value
object
    [ (Key
name, Value
value)
    | (Key
name, Just Value
value) <-
      [ (Key
"id"                  , ScheduledEventId -> Maybe Value
forall a. ToJSON a => a -> Maybe Value
toMaybeJSON ScheduledEventId
scheduledEventExternalId)
      , (Key
"guild_id"            , ScheduledEventId -> Maybe Value
forall a. ToJSON a => a -> Maybe Value
toMaybeJSON ScheduledEventId
scheduledEventExternalGuildId)
      , (Key
"creator_id"          , ScheduledEventId -> Value
forall a. ToJSON a => a -> Value
toJSON (ScheduledEventId -> Value)
-> Maybe ScheduledEventId -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe ScheduledEventId
scheduledEventExternalCreatorId)
      , (Key
"name"                , Text -> Maybe Value
forall a. ToJSON a => a -> Maybe Value
toMaybeJSON Text
scheduledEventExternalName)
      , (Key
"description"         , Text -> Value
forall a. ToJSON a => a -> Value
toJSON (Text -> Value) -> Maybe Text -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
scheduledEventExternalDescription)
      , (Key
"scheduled_start_time", UTCTime -> Maybe Value
forall a. ToJSON a => a -> Maybe Value
toMaybeJSON UTCTime
scheduledEventExternalStartTime)
      , (Key
"scheduled_end_time"  , UTCTime -> Maybe Value
forall a. ToJSON a => a -> Maybe Value
toMaybeJSON UTCTime
scheduledEventExternalEndTime)
      , (Key
"privacy_level", ScheduledEventPrivacyLevel -> Maybe Value
forall a. ToJSON a => a -> Maybe Value
toMaybeJSON ScheduledEventPrivacyLevel
scheduledEventExternalPrivacyLevel)
      , (Key
"entity_type"         , Value -> Maybe Value
forall a. a -> Maybe a
Just (Value -> Maybe Value) -> Value -> Maybe Value
forall a b. (a -> b) -> a -> b
$ Scientific -> Value
Number Scientific
3)
      , (Key
"entity_id"           , ScheduledEventId -> Value
forall a. ToJSON a => a -> Value
toJSON (ScheduledEventId -> Value)
-> Maybe ScheduledEventId -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe ScheduledEventId
scheduledEventExternalEntityId)
      , (Key
"creator"             , 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
scheduledEventExternalCreator)
      , (Key
"user_count"          , Integer -> Value
forall a. ToJSON a => a -> Value
toJSON (Integer -> Value) -> Maybe Integer -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Integer
scheduledEventExternalUserCount)
      , (Key
"image"               , Text -> Value
forall a. ToJSON a => a -> Value
toJSON (Text -> Value) -> Maybe Text -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
scheduledEventExternalImage)
      , ( Key
"entity_metadata"
        , Value -> Maybe Value
forall a. a -> Maybe a
Just (Value -> Maybe Value) -> Value -> Maybe Value
forall a b. (a -> b) -> a -> b
$ [Pair] -> Value
object [Key
"location" Key -> Value -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text -> Value
forall a. ToJSON a => a -> Value
toJSON Text
scheduledEventExternalLocation]
        )
      ]
    ]


instance FromJSON ScheduledEvent where
  parseJSON :: Value -> Parser ScheduledEvent
parseJSON = String
-> (Object -> Parser ScheduledEvent)
-> Value
-> Parser ScheduledEvent
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject
    String
"ScheduledEvent"
    (\Object
v -> do
      Int
setype <- Object
v Object -> Key -> Parser Int
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"entity_type" :: Parser Int
      ScheduledEventId
seid   <- Object
v Object -> Key -> Parser ScheduledEventId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"id"
      ScheduledEventId
segid  <- Object
v Object -> Key -> Parser ScheduledEventId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"guild_id"
      Maybe ScheduledEventId
secrid <- Object
v Object -> Key -> Parser (Maybe ScheduledEventId)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"creator_id"
      Text
sename <- Object
v Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"name"
      Maybe Text
sedesc <- Object
v Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"description"
      UTCTime
sest   <- Object
v Object -> Key -> Parser UTCTime
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"scheduled_start_time"
      ScheduledEventPrivacyLevel
sepl   <- Object
v Object -> Key -> Parser ScheduledEventPrivacyLevel
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"privacy_level" :: Parser ScheduledEventPrivacyLevel
      ScheduledEventStatus
sestat <- Object
v Object -> Key -> Parser ScheduledEventStatus
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"status" :: Parser ScheduledEventStatus
      Maybe ScheduledEventId
seeid  <- Object
v Object -> Key -> Parser (Maybe ScheduledEventId)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"entity_id"
      Maybe User
secrea <- Object
v Object -> Key -> Parser (Maybe User)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"creator"
      Maybe Integer
seuc   <- Object
v Object -> Key -> Parser (Maybe Integer)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"user_count"
      Maybe Text
seim   <- Object
v Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"image"

      case Int
setype of
        Int
1 -> do
          ScheduledEventId
sechid <- Object
v Object -> Key -> Parser ScheduledEventId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"channelId"
          Maybe UTCTime
seet   <- Object
v Object -> Key -> Parser (Maybe UTCTime)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"scheduled_end_time"
          ScheduledEvent -> Parser ScheduledEvent
forall (m :: * -> *) a. Monad m => a -> m a
return (ScheduledEvent -> Parser ScheduledEvent)
-> ScheduledEvent -> Parser ScheduledEvent
forall a b. (a -> b) -> a -> b
$ ScheduledEventId
-> ScheduledEventId
-> ScheduledEventId
-> Maybe ScheduledEventId
-> Text
-> Maybe Text
-> UTCTime
-> Maybe UTCTime
-> ScheduledEventPrivacyLevel
-> ScheduledEventStatus
-> Maybe ScheduledEventId
-> Maybe User
-> Maybe Integer
-> Maybe Text
-> ScheduledEvent
ScheduledEventStage ScheduledEventId
seid
                                       ScheduledEventId
segid
                                       ScheduledEventId
sechid
                                       Maybe ScheduledEventId
secrid
                                       Text
sename
                                       Maybe Text
sedesc
                                       UTCTime
sest
                                       Maybe UTCTime
seet
                                       ScheduledEventPrivacyLevel
sepl
                                       ScheduledEventStatus
sestat
                                       Maybe ScheduledEventId
seeid
                                       Maybe User
secrea
                                       Maybe Integer
seuc
                                       Maybe Text
seim
        Int
2 -> do
          ScheduledEventId
sechid <- Object
v Object -> Key -> Parser ScheduledEventId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"channelId"
          Maybe UTCTime
seet   <- Object
v Object -> Key -> Parser (Maybe UTCTime)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"scheduled_end_time"
          ScheduledEvent -> Parser ScheduledEvent
forall (m :: * -> *) a. Monad m => a -> m a
return (ScheduledEvent -> Parser ScheduledEvent)
-> ScheduledEvent -> Parser ScheduledEvent
forall a b. (a -> b) -> a -> b
$ ScheduledEventId
-> ScheduledEventId
-> ScheduledEventId
-> Maybe ScheduledEventId
-> Text
-> Maybe Text
-> UTCTime
-> Maybe UTCTime
-> ScheduledEventPrivacyLevel
-> ScheduledEventStatus
-> Maybe ScheduledEventId
-> Maybe User
-> Maybe Integer
-> Maybe Text
-> ScheduledEvent
ScheduledEventVoice ScheduledEventId
seid
                                       ScheduledEventId
segid
                                       ScheduledEventId
sechid
                                       Maybe ScheduledEventId
secrid
                                       Text
sename
                                       Maybe Text
sedesc
                                       UTCTime
sest
                                       Maybe UTCTime
seet
                                       ScheduledEventPrivacyLevel
sepl
                                       ScheduledEventStatus
sestat
                                       Maybe ScheduledEventId
seeid
                                       Maybe User
secrea
                                       Maybe Integer
seuc
                                       Maybe Text
seim
        Int
3 -> do
          Value
semeta <- Object
v Object -> Key -> Parser Value
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"entity_metadata"
          Text
seloc  <- String -> (Object -> Parser Text) -> Value -> Parser Text
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"entity_metadata" (Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"location") Value
semeta
          UTCTime
seet   <- Object
v Object -> Key -> Parser UTCTime
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"scheduled_end_time"
          ScheduledEvent -> Parser ScheduledEvent
forall (m :: * -> *) a. Monad m => a -> m a
return (ScheduledEvent -> Parser ScheduledEvent)
-> ScheduledEvent -> Parser ScheduledEvent
forall a b. (a -> b) -> a -> b
$ ScheduledEventId
-> ScheduledEventId
-> Text
-> Maybe ScheduledEventId
-> Text
-> Maybe Text
-> UTCTime
-> UTCTime
-> ScheduledEventPrivacyLevel
-> ScheduledEventStatus
-> Maybe ScheduledEventId
-> Maybe User
-> Maybe Integer
-> Maybe Text
-> ScheduledEvent
ScheduledEventExternal ScheduledEventId
seid
                                          ScheduledEventId
segid
                                          Text
seloc
                                          Maybe ScheduledEventId
secrid
                                          Text
sename
                                          Maybe Text
sedesc
                                          UTCTime
sest
                                          UTCTime
seet
                                          ScheduledEventPrivacyLevel
sepl
                                          ScheduledEventStatus
sestat
                                          Maybe ScheduledEventId
seeid
                                          Maybe User
secrea
                                          Maybe Integer
seuc
                                          Maybe Text
seim
        Int
_ -> String -> Parser ScheduledEvent
forall a. HasCallStack => String -> a
error String
"unreachable"
    )

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

instance InternalDiscordEnum ScheduledEventPrivacyLevel where
  discordTypeStartValue :: ScheduledEventPrivacyLevel
discordTypeStartValue = ScheduledEventPrivacyLevel
ScheduledEventPrivacyLevelGuildOnly
  fromDiscordType :: ScheduledEventPrivacyLevel -> Int
fromDiscordType ScheduledEventPrivacyLevel
ScheduledEventPrivacyLevelGuildOnly = Int
2

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

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

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

instance InternalDiscordEnum ScheduledEventStatus where
  discordTypeStartValue :: ScheduledEventStatus
discordTypeStartValue = ScheduledEventStatus
ScheduledEventStatusScheduled
  fromDiscordType :: ScheduledEventStatus -> Int
fromDiscordType ScheduledEventStatus
ScheduledEventStatusScheduled = Int
1
  fromDiscordType ScheduledEventStatus
ScheduledEventStatusActive    = Int
2
  fromDiscordType ScheduledEventStatus
ScheduledEventStatusCompleted = Int
3
  fromDiscordType ScheduledEventStatus
ScheduledEventStatusCancelled = Int
4

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

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

-- | The hash of the cover image of a ScheduledEvent
type ScheduledEventImageHash = T.Text

-- | The type of images that can be uploaded
data CreateScheduledEventImageUploadType
  = CreateScheduledEventImageUploadTypeJPG
  | CreateScheduledEventImageUploadTypePNG
  | CreateScheduledEventImageUploadTypeGIF
  deriving (Int -> CreateScheduledEventImageUploadType -> ShowS
[CreateScheduledEventImageUploadType] -> ShowS
CreateScheduledEventImageUploadType -> String
(Int -> CreateScheduledEventImageUploadType -> ShowS)
-> (CreateScheduledEventImageUploadType -> String)
-> ([CreateScheduledEventImageUploadType] -> ShowS)
-> Show CreateScheduledEventImageUploadType
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateScheduledEventImageUploadType] -> ShowS
$cshowList :: [CreateScheduledEventImageUploadType] -> ShowS
show :: CreateScheduledEventImageUploadType -> String
$cshow :: CreateScheduledEventImageUploadType -> String
showsPrec :: Int -> CreateScheduledEventImageUploadType -> ShowS
$cshowsPrec :: Int -> CreateScheduledEventImageUploadType -> ShowS
Show, ReadPrec [CreateScheduledEventImageUploadType]
ReadPrec CreateScheduledEventImageUploadType
Int -> ReadS CreateScheduledEventImageUploadType
ReadS [CreateScheduledEventImageUploadType]
(Int -> ReadS CreateScheduledEventImageUploadType)
-> ReadS [CreateScheduledEventImageUploadType]
-> ReadPrec CreateScheduledEventImageUploadType
-> ReadPrec [CreateScheduledEventImageUploadType]
-> Read CreateScheduledEventImageUploadType
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateScheduledEventImageUploadType]
$creadListPrec :: ReadPrec [CreateScheduledEventImageUploadType]
readPrec :: ReadPrec CreateScheduledEventImageUploadType
$creadPrec :: ReadPrec CreateScheduledEventImageUploadType
readList :: ReadS [CreateScheduledEventImageUploadType]
$creadList :: ReadS [CreateScheduledEventImageUploadType]
readsPrec :: Int -> ReadS CreateScheduledEventImageUploadType
$creadsPrec :: Int -> ReadS CreateScheduledEventImageUploadType
Read, CreateScheduledEventImageUploadType
-> CreateScheduledEventImageUploadType -> Bool
(CreateScheduledEventImageUploadType
 -> CreateScheduledEventImageUploadType -> Bool)
-> (CreateScheduledEventImageUploadType
    -> CreateScheduledEventImageUploadType -> Bool)
-> Eq CreateScheduledEventImageUploadType
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateScheduledEventImageUploadType
-> CreateScheduledEventImageUploadType -> Bool
$c/= :: CreateScheduledEventImageUploadType
-> CreateScheduledEventImageUploadType -> Bool
== :: CreateScheduledEventImageUploadType
-> CreateScheduledEventImageUploadType -> Bool
$c== :: CreateScheduledEventImageUploadType
-> CreateScheduledEventImageUploadType -> Bool
Eq, Eq CreateScheduledEventImageUploadType
Eq CreateScheduledEventImageUploadType
-> (CreateScheduledEventImageUploadType
    -> CreateScheduledEventImageUploadType -> Ordering)
-> (CreateScheduledEventImageUploadType
    -> CreateScheduledEventImageUploadType -> Bool)
-> (CreateScheduledEventImageUploadType
    -> CreateScheduledEventImageUploadType -> Bool)
-> (CreateScheduledEventImageUploadType
    -> CreateScheduledEventImageUploadType -> Bool)
-> (CreateScheduledEventImageUploadType
    -> CreateScheduledEventImageUploadType -> Bool)
-> (CreateScheduledEventImageUploadType
    -> CreateScheduledEventImageUploadType
    -> CreateScheduledEventImageUploadType)
-> (CreateScheduledEventImageUploadType
    -> CreateScheduledEventImageUploadType
    -> CreateScheduledEventImageUploadType)
-> Ord CreateScheduledEventImageUploadType
CreateScheduledEventImageUploadType
-> CreateScheduledEventImageUploadType -> Bool
CreateScheduledEventImageUploadType
-> CreateScheduledEventImageUploadType -> Ordering
CreateScheduledEventImageUploadType
-> CreateScheduledEventImageUploadType
-> CreateScheduledEventImageUploadType
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 :: CreateScheduledEventImageUploadType
-> CreateScheduledEventImageUploadType
-> CreateScheduledEventImageUploadType
$cmin :: CreateScheduledEventImageUploadType
-> CreateScheduledEventImageUploadType
-> CreateScheduledEventImageUploadType
max :: CreateScheduledEventImageUploadType
-> CreateScheduledEventImageUploadType
-> CreateScheduledEventImageUploadType
$cmax :: CreateScheduledEventImageUploadType
-> CreateScheduledEventImageUploadType
-> CreateScheduledEventImageUploadType
>= :: CreateScheduledEventImageUploadType
-> CreateScheduledEventImageUploadType -> Bool
$c>= :: CreateScheduledEventImageUploadType
-> CreateScheduledEventImageUploadType -> Bool
> :: CreateScheduledEventImageUploadType
-> CreateScheduledEventImageUploadType -> Bool
$c> :: CreateScheduledEventImageUploadType
-> CreateScheduledEventImageUploadType -> Bool
<= :: CreateScheduledEventImageUploadType
-> CreateScheduledEventImageUploadType -> Bool
$c<= :: CreateScheduledEventImageUploadType
-> CreateScheduledEventImageUploadType -> Bool
< :: CreateScheduledEventImageUploadType
-> CreateScheduledEventImageUploadType -> Bool
$c< :: CreateScheduledEventImageUploadType
-> CreateScheduledEventImageUploadType -> Bool
compare :: CreateScheduledEventImageUploadType
-> CreateScheduledEventImageUploadType -> Ordering
$ccompare :: CreateScheduledEventImageUploadType
-> CreateScheduledEventImageUploadType -> Ordering
$cp1Ord :: Eq CreateScheduledEventImageUploadType
Ord)

-- | The required information to add a cover image to a Scheduled Event
data CreateScheduledEventImage
  = CreateScheduledEventImageURL T.Text
  | CreateScheduledEventImageUpload CreateScheduledEventImageUploadType B.ByteString
  deriving (Int -> CreateScheduledEventImage -> ShowS
[CreateScheduledEventImage] -> ShowS
CreateScheduledEventImage -> String
(Int -> CreateScheduledEventImage -> ShowS)
-> (CreateScheduledEventImage -> String)
-> ([CreateScheduledEventImage] -> ShowS)
-> Show CreateScheduledEventImage
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateScheduledEventImage] -> ShowS
$cshowList :: [CreateScheduledEventImage] -> ShowS
show :: CreateScheduledEventImage -> String
$cshow :: CreateScheduledEventImage -> String
showsPrec :: Int -> CreateScheduledEventImage -> ShowS
$cshowsPrec :: Int -> CreateScheduledEventImage -> ShowS
Show, ReadPrec [CreateScheduledEventImage]
ReadPrec CreateScheduledEventImage
Int -> ReadS CreateScheduledEventImage
ReadS [CreateScheduledEventImage]
(Int -> ReadS CreateScheduledEventImage)
-> ReadS [CreateScheduledEventImage]
-> ReadPrec CreateScheduledEventImage
-> ReadPrec [CreateScheduledEventImage]
-> Read CreateScheduledEventImage
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateScheduledEventImage]
$creadListPrec :: ReadPrec [CreateScheduledEventImage]
readPrec :: ReadPrec CreateScheduledEventImage
$creadPrec :: ReadPrec CreateScheduledEventImage
readList :: ReadS [CreateScheduledEventImage]
$creadList :: ReadS [CreateScheduledEventImage]
readsPrec :: Int -> ReadS CreateScheduledEventImage
$creadsPrec :: Int -> ReadS CreateScheduledEventImage
Read, CreateScheduledEventImage -> CreateScheduledEventImage -> Bool
(CreateScheduledEventImage -> CreateScheduledEventImage -> Bool)
-> (CreateScheduledEventImage -> CreateScheduledEventImage -> Bool)
-> Eq CreateScheduledEventImage
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateScheduledEventImage -> CreateScheduledEventImage -> Bool
$c/= :: CreateScheduledEventImage -> CreateScheduledEventImage -> Bool
== :: CreateScheduledEventImage -> CreateScheduledEventImage -> Bool
$c== :: CreateScheduledEventImage -> CreateScheduledEventImage -> Bool
Eq, Eq CreateScheduledEventImage
Eq CreateScheduledEventImage
-> (CreateScheduledEventImage
    -> CreateScheduledEventImage -> Ordering)
-> (CreateScheduledEventImage -> CreateScheduledEventImage -> Bool)
-> (CreateScheduledEventImage -> CreateScheduledEventImage -> Bool)
-> (CreateScheduledEventImage -> CreateScheduledEventImage -> Bool)
-> (CreateScheduledEventImage -> CreateScheduledEventImage -> Bool)
-> (CreateScheduledEventImage
    -> CreateScheduledEventImage -> CreateScheduledEventImage)
-> (CreateScheduledEventImage
    -> CreateScheduledEventImage -> CreateScheduledEventImage)
-> Ord CreateScheduledEventImage
CreateScheduledEventImage -> CreateScheduledEventImage -> Bool
CreateScheduledEventImage -> CreateScheduledEventImage -> Ordering
CreateScheduledEventImage
-> CreateScheduledEventImage -> CreateScheduledEventImage
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 :: CreateScheduledEventImage
-> CreateScheduledEventImage -> CreateScheduledEventImage
$cmin :: CreateScheduledEventImage
-> CreateScheduledEventImage -> CreateScheduledEventImage
max :: CreateScheduledEventImage
-> CreateScheduledEventImage -> CreateScheduledEventImage
$cmax :: CreateScheduledEventImage
-> CreateScheduledEventImage -> CreateScheduledEventImage
>= :: CreateScheduledEventImage -> CreateScheduledEventImage -> Bool
$c>= :: CreateScheduledEventImage -> CreateScheduledEventImage -> Bool
> :: CreateScheduledEventImage -> CreateScheduledEventImage -> Bool
$c> :: CreateScheduledEventImage -> CreateScheduledEventImage -> Bool
<= :: CreateScheduledEventImage -> CreateScheduledEventImage -> Bool
$c<= :: CreateScheduledEventImage -> CreateScheduledEventImage -> Bool
< :: CreateScheduledEventImage -> CreateScheduledEventImage -> Bool
$c< :: CreateScheduledEventImage -> CreateScheduledEventImage -> Bool
compare :: CreateScheduledEventImage -> CreateScheduledEventImage -> Ordering
$ccompare :: CreateScheduledEventImage -> CreateScheduledEventImage -> Ordering
$cp1Ord :: Eq CreateScheduledEventImage
Ord)

instance ToJSON CreateScheduledEventImage where
  toJSON :: CreateScheduledEventImage -> Value
toJSON (CreateScheduledEventImageURL Text
u) = Text -> Value
String Text
u
  toJSON (CreateScheduledEventImageUpload CreateScheduledEventImageUploadType
typ ByteString
bs) =
    Text -> Value
String
      (Text -> Value) -> Text -> Value
forall a b. (a -> b) -> a -> b
$  Text
"data:"
      Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> (case CreateScheduledEventImageUploadType
typ of
           CreateScheduledEventImageUploadType
CreateScheduledEventImageUploadTypeJPG -> Text
"image/jpeg"
           CreateScheduledEventImageUploadType
CreateScheduledEventImageUploadTypePNG -> Text
"image/png"
           CreateScheduledEventImageUploadType
CreateScheduledEventImageUploadTypeGIF -> Text
"image/gif"
         )
      Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
";base64,"
      Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> ByteString -> Text
T.decodeUtf8 ByteString
bs

instance FromJSON CreateScheduledEventImage where
  parseJSON :: Value -> Parser CreateScheduledEventImage
parseJSON =
    String
-> (Text -> Parser CreateScheduledEventImage)
-> Value
-> Parser CreateScheduledEventImage
forall a. String -> (Text -> Parser a) -> Value -> Parser a
withText String
"CreateScheduledEventImage" (CreateScheduledEventImage -> Parser CreateScheduledEventImage
forall (m :: * -> *) a. Monad m => a -> m a
return (CreateScheduledEventImage -> Parser CreateScheduledEventImage)
-> (Text -> CreateScheduledEventImage)
-> Text
-> Parser CreateScheduledEventImage
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> CreateScheduledEventImage
CreateScheduledEventImageURL)

-- | Data required to create a Scheduled Event
data CreateScheduledEventData
  = CreateScheduledEventDataStage
      { CreateScheduledEventData -> ScheduledEventId
createScheduleEventDataStageChannelId :: ChannelId
      , CreateScheduledEventData -> Text
createScheduleEventDataStageName :: T.Text
      , CreateScheduledEventData -> ScheduledEventPrivacyLevel
createScheduleEventDataStagePrivacyLevel :: ScheduledEventPrivacyLevel
      , CreateScheduledEventData -> UTCTime
createScheduleEventDataStageStartTime :: UTCTime
      , CreateScheduledEventData -> Maybe UTCTime
createScheduleEventDataStageEndTime :: Maybe UTCTime
      , CreateScheduledEventData -> Maybe Text
createScheduleEventDataStageDescription :: Maybe T.Text
      , CreateScheduledEventData -> Maybe CreateScheduledEventImage
createScheduleEventDataStageImage :: Maybe CreateScheduledEventImage
      }
  | CreateScheduledEventDataVoice
      { CreateScheduledEventData -> ScheduledEventId
createScheduleEventDataVoiceChannelId :: ChannelId
      , CreateScheduledEventData -> Text
createScheduleEventDataVoiceName :: T.Text
      , CreateScheduledEventData -> ScheduledEventPrivacyLevel
createScheduleEventDataVoicePrivacyLevel :: ScheduledEventPrivacyLevel
      , CreateScheduledEventData -> UTCTime
createScheduleEventDataVoiceStartTime :: UTCTime
      , CreateScheduledEventData -> Maybe UTCTime
createScheduleEventDataVoiceEndTime :: Maybe UTCTime
      , CreateScheduledEventData -> Maybe Text
createScheduleEventDataVoiceDescription :: Maybe T.Text
      , CreateScheduledEventData -> Maybe CreateScheduledEventImage
createScheduleEventDataVoiceImage :: Maybe CreateScheduledEventImage
      }
  | CreateScheduledEventDataExternal
      { CreateScheduledEventData -> Text
createScheduleEventDataExternalLocation :: T.Text
      , CreateScheduledEventData -> Text
createScheduleEventDataExternalName :: T.Text
      , CreateScheduledEventData -> ScheduledEventPrivacyLevel
createScheduleEventDataExternalPrivacyLevel :: ScheduledEventPrivacyLevel
      , CreateScheduledEventData -> UTCTime
createScheduleEventDataExternalStartTime :: UTCTime
      , CreateScheduledEventData -> UTCTime
createScheduleEventDataExternalEndTime :: UTCTime
      , CreateScheduledEventData -> Maybe Text
createScheduleEventDataExternalDescription :: Maybe T.Text
      , CreateScheduledEventData -> Maybe CreateScheduledEventImage
createScheduleEventDataExternalImage :: Maybe CreateScheduledEventImage
      }

instance ToJSON CreateScheduledEventData where
  toJSON :: CreateScheduledEventData -> Value
toJSON CreateScheduledEventDataStage {Maybe UTCTime
Maybe Text
Maybe CreateScheduledEventImage
UTCTime
Text
ScheduledEventId
ScheduledEventPrivacyLevel
createScheduleEventDataStageImage :: Maybe CreateScheduledEventImage
createScheduleEventDataStageDescription :: Maybe Text
createScheduleEventDataStageEndTime :: Maybe UTCTime
createScheduleEventDataStageStartTime :: UTCTime
createScheduleEventDataStagePrivacyLevel :: ScheduledEventPrivacyLevel
createScheduleEventDataStageName :: Text
createScheduleEventDataStageChannelId :: ScheduledEventId
createScheduleEventDataStageImage :: CreateScheduledEventData -> Maybe CreateScheduledEventImage
createScheduleEventDataStageDescription :: CreateScheduledEventData -> Maybe Text
createScheduleEventDataStageEndTime :: CreateScheduledEventData -> Maybe UTCTime
createScheduleEventDataStageStartTime :: CreateScheduledEventData -> UTCTime
createScheduleEventDataStagePrivacyLevel :: CreateScheduledEventData -> ScheduledEventPrivacyLevel
createScheduleEventDataStageName :: CreateScheduledEventData -> Text
createScheduleEventDataStageChannelId :: CreateScheduledEventData -> ScheduledEventId
..} = [Pair] -> Value
object
    [ (Key
name, Value
value)
    | (Key
name, Just Value
value) <-
      [ (Key
"channel_id"   , ScheduledEventId -> Maybe Value
forall a. ToJSON a => a -> Maybe Value
toMaybeJSON ScheduledEventId
createScheduleEventDataStageChannelId)
      , (Key
"name"         , Text -> Maybe Value
forall a. ToJSON a => a -> Maybe Value
toMaybeJSON Text
createScheduleEventDataStageName)
      , (Key
"privacy_level", ScheduledEventPrivacyLevel -> Maybe Value
forall a. ToJSON a => a -> Maybe Value
toMaybeJSON ScheduledEventPrivacyLevel
createScheduleEventDataStagePrivacyLevel)
      , ( Key
"scheduled_start_time"
        , UTCTime -> Maybe Value
forall a. ToJSON a => a -> Maybe Value
toMaybeJSON UTCTime
createScheduleEventDataStageStartTime
        )
      , (Key
"scheduled_end_time", UTCTime -> Value
forall a. ToJSON a => a -> Value
toJSON (UTCTime -> Value) -> Maybe UTCTime -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe UTCTime
createScheduleEventDataStageEndTime)
      , (Key
"description", Text -> Value
forall a. ToJSON a => a -> Value
toJSON (Text -> Value) -> Maybe Text -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
createScheduleEventDataStageDescription)
      , (Key
"entity_type"       , Value -> Maybe Value
forall a. a -> Maybe a
Just (Value -> Maybe Value) -> Value -> Maybe Value
forall a b. (a -> b) -> a -> b
$ Scientific -> Value
Number Scientific
1)
      , (Key
"image"             , CreateScheduledEventImage -> Value
forall a. ToJSON a => a -> Value
toJSON (CreateScheduledEventImage -> Value)
-> Maybe CreateScheduledEventImage -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe CreateScheduledEventImage
createScheduleEventDataStageImage)
      ]
    ]
  toJSON CreateScheduledEventDataVoice {Maybe UTCTime
Maybe Text
Maybe CreateScheduledEventImage
UTCTime
Text
ScheduledEventId
ScheduledEventPrivacyLevel
createScheduleEventDataVoiceImage :: Maybe CreateScheduledEventImage
createScheduleEventDataVoiceDescription :: Maybe Text
createScheduleEventDataVoiceEndTime :: Maybe UTCTime
createScheduleEventDataVoiceStartTime :: UTCTime
createScheduleEventDataVoicePrivacyLevel :: ScheduledEventPrivacyLevel
createScheduleEventDataVoiceName :: Text
createScheduleEventDataVoiceChannelId :: ScheduledEventId
createScheduleEventDataVoiceImage :: CreateScheduledEventData -> Maybe CreateScheduledEventImage
createScheduleEventDataVoiceDescription :: CreateScheduledEventData -> Maybe Text
createScheduleEventDataVoiceEndTime :: CreateScheduledEventData -> Maybe UTCTime
createScheduleEventDataVoiceStartTime :: CreateScheduledEventData -> UTCTime
createScheduleEventDataVoicePrivacyLevel :: CreateScheduledEventData -> ScheduledEventPrivacyLevel
createScheduleEventDataVoiceName :: CreateScheduledEventData -> Text
createScheduleEventDataVoiceChannelId :: CreateScheduledEventData -> ScheduledEventId
..} = [Pair] -> Value
object
    [ (Key
name, Value
value)
    | (Key
name, Just Value
value) <-
      [ (Key
"channel_id"   , ScheduledEventId -> Maybe Value
forall a. ToJSON a => a -> Maybe Value
toMaybeJSON ScheduledEventId
createScheduleEventDataVoiceChannelId)
      , (Key
"name"         , Text -> Maybe Value
forall a. ToJSON a => a -> Maybe Value
toMaybeJSON Text
createScheduleEventDataVoiceName)
      , (Key
"privacy_level", ScheduledEventPrivacyLevel -> Maybe Value
forall a. ToJSON a => a -> Maybe Value
toMaybeJSON ScheduledEventPrivacyLevel
createScheduleEventDataVoicePrivacyLevel)
      , ( Key
"scheduled_start_time"
        , UTCTime -> Maybe Value
forall a. ToJSON a => a -> Maybe Value
toMaybeJSON UTCTime
createScheduleEventDataVoiceStartTime
        )
      , (Key
"scheduled_end_time", UTCTime -> Value
forall a. ToJSON a => a -> Value
toJSON (UTCTime -> Value) -> Maybe UTCTime -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe UTCTime
createScheduleEventDataVoiceEndTime)
      , (Key
"description", Text -> Value
forall a. ToJSON a => a -> Value
toJSON (Text -> Value) -> Maybe Text -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
createScheduleEventDataVoiceDescription)
      , (Key
"entity_type"       , Value -> Maybe Value
forall a. a -> Maybe a
Just (Value -> Maybe Value) -> Value -> Maybe Value
forall a b. (a -> b) -> a -> b
$ Scientific -> Value
Number Scientific
2)
      , (Key
"image"             , CreateScheduledEventImage -> Value
forall a. ToJSON a => a -> Value
toJSON (CreateScheduledEventImage -> Value)
-> Maybe CreateScheduledEventImage -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe CreateScheduledEventImage
createScheduleEventDataVoiceImage)
      ]
    ]
  toJSON CreateScheduledEventDataExternal {Maybe Text
Maybe CreateScheduledEventImage
UTCTime
Text
ScheduledEventPrivacyLevel
createScheduleEventDataExternalImage :: Maybe CreateScheduledEventImage
createScheduleEventDataExternalDescription :: Maybe Text
createScheduleEventDataExternalEndTime :: UTCTime
createScheduleEventDataExternalStartTime :: UTCTime
createScheduleEventDataExternalPrivacyLevel :: ScheduledEventPrivacyLevel
createScheduleEventDataExternalName :: Text
createScheduleEventDataExternalLocation :: Text
createScheduleEventDataExternalImage :: CreateScheduledEventData -> Maybe CreateScheduledEventImage
createScheduleEventDataExternalDescription :: CreateScheduledEventData -> Maybe Text
createScheduleEventDataExternalEndTime :: CreateScheduledEventData -> UTCTime
createScheduleEventDataExternalStartTime :: CreateScheduledEventData -> UTCTime
createScheduleEventDataExternalPrivacyLevel :: CreateScheduledEventData -> ScheduledEventPrivacyLevel
createScheduleEventDataExternalName :: CreateScheduledEventData -> Text
createScheduleEventDataExternalLocation :: CreateScheduledEventData -> Text
..} = [Pair] -> Value
object
    [ (Key
name, Value
value)
    | (Key
name, Just Value
value) <-
      [ ( Key
"entity_metadata"
        , Value -> Maybe Value
forall a. a -> Maybe a
Just (Value -> Maybe Value) -> Value -> Maybe Value
forall a b. (a -> b) -> a -> b
$ [Pair] -> Value
object [Key
"location" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
createScheduleEventDataExternalLocation]
        )
      , (Key
"name", Text -> Maybe Value
forall a. ToJSON a => a -> Maybe Value
toMaybeJSON Text
createScheduleEventDataExternalName)
      , ( Key
"privacy_level"
        , ScheduledEventPrivacyLevel -> Maybe Value
forall a. ToJSON a => a -> Maybe Value
toMaybeJSON ScheduledEventPrivacyLevel
createScheduleEventDataExternalPrivacyLevel
        )
      , ( Key
"scheduled_start_time"
        , UTCTime -> Maybe Value
forall a. ToJSON a => a -> Maybe Value
toMaybeJSON UTCTime
createScheduleEventDataExternalStartTime
        )
      , ( Key
"scheduled_end_time"
        , UTCTime -> Maybe Value
forall a. ToJSON a => a -> Maybe Value
toMaybeJSON UTCTime
createScheduleEventDataExternalEndTime
        )
      , (Key
"description", Text -> Value
forall a. ToJSON a => a -> Value
toJSON (Text -> Value) -> Maybe Text -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
createScheduleEventDataExternalDescription)
      , (Key
"entity_type", Value -> Maybe Value
forall a. a -> Maybe a
Just (Value -> Maybe Value) -> Value -> Maybe Value
forall a b. (a -> b) -> a -> b
$ Scientific -> Value
Number Scientific
2)
      , (Key
"image", CreateScheduledEventImage -> Value
forall a. ToJSON a => a -> Value
toJSON (CreateScheduledEventImage -> Value)
-> Maybe CreateScheduledEventImage -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe CreateScheduledEventImage
createScheduleEventDataExternalImage)
      ]
    ]

instance FromJSON CreateScheduledEventData where
  parseJSON :: Value -> Parser CreateScheduledEventData
parseJSON = String
-> (Object -> Parser CreateScheduledEventData)
-> Value
-> Parser CreateScheduledEventData
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject
    String
"CreateScheduledEventData"
    (\Object
v -> do
      Int
t       <- Object
v Object -> Key -> Parser Int
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"entity_type" :: Parser Int
      Text
csename <- Object
v Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"name"
      ScheduledEventPrivacyLevel
csepl   <- Object
v Object -> Key -> Parser ScheduledEventPrivacyLevel
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"privacy_level"
      UTCTime
csest   <- Object
v Object -> Key -> Parser UTCTime
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"scheduled_start_time"
      Maybe Text
csedesc <- Object
v Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"description"
      Maybe CreateScheduledEventImage
cseimg  <- Object
v Object -> Key -> Parser (Maybe CreateScheduledEventImage)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"image"

      case Int
t of
        Int
1 -> do
          ScheduledEventId
csecid <- Object
v Object -> Key -> Parser ScheduledEventId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"channel_id"
          Maybe UTCTime
cseet  <- Object
v Object -> Key -> Parser (Maybe UTCTime)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"scheduled_end_time"
          CreateScheduledEventData -> Parser CreateScheduledEventData
forall (m :: * -> *) a. Monad m => a -> m a
return (CreateScheduledEventData -> Parser CreateScheduledEventData)
-> CreateScheduledEventData -> Parser CreateScheduledEventData
forall a b. (a -> b) -> a -> b
$ ScheduledEventId
-> Text
-> ScheduledEventPrivacyLevel
-> UTCTime
-> Maybe UTCTime
-> Maybe Text
-> Maybe CreateScheduledEventImage
-> CreateScheduledEventData
CreateScheduledEventDataStage ScheduledEventId
csecid
                                                 Text
csename
                                                 ScheduledEventPrivacyLevel
csepl
                                                 UTCTime
csest
                                                 Maybe UTCTime
cseet
                                                 Maybe Text
csedesc
                                                 Maybe CreateScheduledEventImage
cseimg
        Int
2 -> do
          ScheduledEventId
csecid <- Object
v Object -> Key -> Parser ScheduledEventId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"channel_id"
          Maybe UTCTime
cseet  <- Object
v Object -> Key -> Parser (Maybe UTCTime)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"scheduled_end_time"
          CreateScheduledEventData -> Parser CreateScheduledEventData
forall (m :: * -> *) a. Monad m => a -> m a
return (CreateScheduledEventData -> Parser CreateScheduledEventData)
-> CreateScheduledEventData -> Parser CreateScheduledEventData
forall a b. (a -> b) -> a -> b
$ ScheduledEventId
-> Text
-> ScheduledEventPrivacyLevel
-> UTCTime
-> Maybe UTCTime
-> Maybe Text
-> Maybe CreateScheduledEventImage
-> CreateScheduledEventData
CreateScheduledEventDataVoice ScheduledEventId
csecid
                                                 Text
csename
                                                 ScheduledEventPrivacyLevel
csepl
                                                 UTCTime
csest
                                                 Maybe UTCTime
cseet
                                                 Maybe Text
csedesc
                                                 Maybe CreateScheduledEventImage
cseimg
        Int
3 -> do
          Value
csemeta <- Object
v Object -> Key -> Parser Value
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"entity_metadata"
          ScheduledEventId
cseloc  <- String
-> (Object -> Parser ScheduledEventId)
-> Value
-> Parser ScheduledEventId
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"entity_metadata" (Object -> Key -> Parser ScheduledEventId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"location") Value
csemeta
          Maybe UTCTime
cseet   <- Object
v Object -> Key -> Parser (Maybe UTCTime)
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"scheduled_end_time"
          CreateScheduledEventData -> Parser CreateScheduledEventData
forall (m :: * -> *) a. Monad m => a -> m a
return (CreateScheduledEventData -> Parser CreateScheduledEventData)
-> CreateScheduledEventData -> Parser CreateScheduledEventData
forall a b. (a -> b) -> a -> b
$ ScheduledEventId
-> Text
-> ScheduledEventPrivacyLevel
-> UTCTime
-> Maybe UTCTime
-> Maybe Text
-> Maybe CreateScheduledEventImage
-> CreateScheduledEventData
CreateScheduledEventDataVoice ScheduledEventId
cseloc
                                                 Text
csename
                                                 ScheduledEventPrivacyLevel
csepl
                                                 UTCTime
csest
                                                 Maybe UTCTime
cseet
                                                 Maybe Text
csedesc
                                                 Maybe CreateScheduledEventImage
cseimg
        Int
_ -> String -> Parser CreateScheduledEventData
forall a. HasCallStack => String -> a
error String
"unreachable"
    )


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

instance InternalDiscordEnum ScheduledEventType where
  discordTypeStartValue :: ScheduledEventType
discordTypeStartValue = ScheduledEventType
ScheduledEventTypeStage
  fromDiscordType :: ScheduledEventType -> Int
fromDiscordType ScheduledEventType
ScheduledEventTypeStage    = Int
1
  fromDiscordType ScheduledEventType
ScheduledEventTypeVoice    = Int
2
  fromDiscordType ScheduledEventType
ScheduledEventTypeExternal = Int
3

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

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

-- | Data required to issue a Modify Scheduled Event request
-- This isnt fully type-safe, and can allow for boggus requests but I don't
-- know of any sane solution to this
data ModifyScheduledEventData = ModifyScheduledEventData
  { ModifyScheduledEventData -> Maybe (Maybe ScheduledEventId)
modifyScheduledEventDataChannelId    :: Maybe (Maybe ChannelId)
  , ModifyScheduledEventData -> Maybe (Maybe Text)
modifyScheduledEventDataLocation     :: Maybe (Maybe T.Text)
  , ModifyScheduledEventData -> Maybe Text
modifyScheduledEventDataName         :: Maybe T.Text
  , ModifyScheduledEventData -> Maybe ScheduledEventPrivacyLevel
modifyScheduledEventDataPrivacyLevel :: Maybe ScheduledEventPrivacyLevel
  , ModifyScheduledEventData -> Maybe UTCTime
modifyScheduledEventDataStartTime    :: Maybe UTCTime
  , ModifyScheduledEventData -> Maybe UTCTime
modifyScheduledEventDataEndTime      :: Maybe UTCTime
  , ModifyScheduledEventData -> Maybe (Maybe Text)
modifyScheduledEventDataDescription  :: Maybe (Maybe T.Text)
  , ModifyScheduledEventData -> Maybe ScheduledEventType
modifyScheduledEventDataType         :: Maybe ScheduledEventType
  , ModifyScheduledEventData -> Maybe ScheduledEventStatus
modifyScheduledEventDataStatus       :: Maybe ScheduledEventStatus
  , ModifyScheduledEventData -> Maybe CreateScheduledEventImage
modifyScheduledEventDataImage        :: Maybe CreateScheduledEventImage
  }

instance Default ModifyScheduledEventData where
  def :: ModifyScheduledEventData
def = Maybe (Maybe ScheduledEventId)
-> Maybe (Maybe Text)
-> Maybe Text
-> Maybe ScheduledEventPrivacyLevel
-> Maybe UTCTime
-> Maybe UTCTime
-> Maybe (Maybe Text)
-> Maybe ScheduledEventType
-> Maybe ScheduledEventStatus
-> Maybe CreateScheduledEventImage
-> ModifyScheduledEventData
ModifyScheduledEventData Maybe (Maybe ScheduledEventId)
forall a. Maybe a
Nothing
                                 Maybe (Maybe Text)
forall a. Maybe a
Nothing
                                 Maybe Text
forall a. Maybe a
Nothing
                                 Maybe ScheduledEventPrivacyLevel
forall a. Maybe a
Nothing
                                 Maybe UTCTime
forall a. Maybe a
Nothing
                                 Maybe UTCTime
forall a. Maybe a
Nothing
                                 Maybe (Maybe Text)
forall a. Maybe a
Nothing
                                 Maybe ScheduledEventType
forall a. Maybe a
Nothing
                                 Maybe ScheduledEventStatus
forall a. Maybe a
Nothing
                                 Maybe CreateScheduledEventImage
forall a. Maybe a
Nothing

instance ToJSON ModifyScheduledEventData where
  toJSON :: ModifyScheduledEventData -> Value
toJSON ModifyScheduledEventData {Maybe (Maybe Text)
Maybe (Maybe ScheduledEventId)
Maybe UTCTime
Maybe Text
Maybe ScheduledEventType
Maybe CreateScheduledEventImage
Maybe ScheduledEventStatus
Maybe ScheduledEventPrivacyLevel
modifyScheduledEventDataImage :: Maybe CreateScheduledEventImage
modifyScheduledEventDataStatus :: Maybe ScheduledEventStatus
modifyScheduledEventDataType :: Maybe ScheduledEventType
modifyScheduledEventDataDescription :: Maybe (Maybe Text)
modifyScheduledEventDataEndTime :: Maybe UTCTime
modifyScheduledEventDataStartTime :: Maybe UTCTime
modifyScheduledEventDataPrivacyLevel :: Maybe ScheduledEventPrivacyLevel
modifyScheduledEventDataName :: Maybe Text
modifyScheduledEventDataLocation :: Maybe (Maybe Text)
modifyScheduledEventDataChannelId :: Maybe (Maybe ScheduledEventId)
modifyScheduledEventDataImage :: ModifyScheduledEventData -> Maybe CreateScheduledEventImage
modifyScheduledEventDataStatus :: ModifyScheduledEventData -> Maybe ScheduledEventStatus
modifyScheduledEventDataType :: ModifyScheduledEventData -> Maybe ScheduledEventType
modifyScheduledEventDataDescription :: ModifyScheduledEventData -> Maybe (Maybe Text)
modifyScheduledEventDataEndTime :: ModifyScheduledEventData -> Maybe UTCTime
modifyScheduledEventDataStartTime :: ModifyScheduledEventData -> Maybe UTCTime
modifyScheduledEventDataPrivacyLevel :: ModifyScheduledEventData -> Maybe ScheduledEventPrivacyLevel
modifyScheduledEventDataName :: ModifyScheduledEventData -> Maybe Text
modifyScheduledEventDataLocation :: ModifyScheduledEventData -> Maybe (Maybe Text)
modifyScheduledEventDataChannelId :: ModifyScheduledEventData -> Maybe (Maybe ScheduledEventId)
..} = [Pair] -> Value
object
    [ (Key
name, Value
value)
    | (Key
name, Just Value
value) <-
      [ (Key
"channel_id", Maybe ScheduledEventId -> Value
forall a. ToJSON a => a -> Value
toJSON (Maybe ScheduledEventId -> Value)
-> Maybe (Maybe ScheduledEventId) -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (Maybe ScheduledEventId)
modifyScheduledEventDataChannelId)
      , (Key
"entity_metadata"     , Maybe Value
loc)
      , (Key
"name", Text -> Value
forall a. ToJSON a => a -> Value
toJSON (Text -> Value) -> Maybe Text -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
modifyScheduledEventDataName)
      , (Key
"scheduled_start_time", UTCTime -> Value
forall a. ToJSON a => a -> Value
toJSON (UTCTime -> Value) -> Maybe UTCTime -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe UTCTime
modifyScheduledEventDataStartTime)
      , (Key
"scheduled_end_time", UTCTime -> Value
forall a. ToJSON a => a -> Value
toJSON (UTCTime -> Value) -> Maybe UTCTime -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe UTCTime
modifyScheduledEventDataEndTime)
      , (Key
"description", Maybe Text -> Value
forall a. ToJSON a => a -> Value
toJSON (Maybe Text -> Value) -> Maybe (Maybe Text) -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (Maybe Text)
modifyScheduledEventDataDescription)
      , (Key
"entity_type", ScheduledEventType -> Value
forall a. ToJSON a => a -> Value
toJSON (ScheduledEventType -> Value)
-> Maybe ScheduledEventType -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe ScheduledEventType
modifyScheduledEventDataType)
      , (Key
"status", ScheduledEventStatus -> Value
forall a. ToJSON a => a -> Value
toJSON (ScheduledEventStatus -> Value)
-> Maybe ScheduledEventStatus -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe ScheduledEventStatus
modifyScheduledEventDataStatus)
      , (Key
"image", CreateScheduledEventImage -> Value
forall a. ToJSON a => a -> Value
toJSON (CreateScheduledEventImage -> Value)
-> Maybe CreateScheduledEventImage -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe CreateScheduledEventImage
modifyScheduledEventDataImage)
      ]
    ]
   where
    loc :: Maybe Value
loc = case Maybe (Maybe Text)
modifyScheduledEventDataLocation of
      Maybe (Maybe Text)
Nothing      -> Maybe Value
forall a. Maybe a
Nothing
      Just Maybe Text
Nothing -> Value -> Maybe Value
forall a. a -> Maybe a
Just Value
Null
      Just Maybe Text
loc'    -> Value -> Maybe Value
forall a. a -> Maybe a
Just (Value -> Maybe Value) -> Value -> Maybe Value
forall a b. (a -> b) -> a -> b
$ [Pair] -> Value
object [(Key
"location", Maybe Text -> Value
forall a. ToJSON a => a -> Value
toJSON Maybe Text
loc')]

instance FromJSON ModifyScheduledEventData where
  parseJSON :: Value -> Parser ModifyScheduledEventData
parseJSON = String
-> (Object -> Parser ModifyScheduledEventData)
-> Value
-> Parser ModifyScheduledEventData
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject
    String
"ModifyScheduledEventData"
    (\Object
v -> do
      -- The trivial fields
      Maybe Text
msename  <- Object
v Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"name"
      Maybe UTCTime
msest    <- Object
v Object -> Key -> Parser (Maybe UTCTime)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"scheduled_start_time"
      Maybe UTCTime
mseet    <- Object
v Object -> Key -> Parser (Maybe UTCTime)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"scheduled_end_time"
      Maybe ScheduledEventType
msetype  <- Object
v Object -> Key -> Parser (Maybe ScheduledEventType)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"entity_type"
      Maybe ScheduledEventPrivacyLevel
msepl    <- Object
v Object -> Key -> Parser (Maybe ScheduledEventPrivacyLevel)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"privacy_level"
      Maybe ScheduledEventStatus
msestat  <- Object
v Object -> Key -> Parser (Maybe ScheduledEventStatus)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"status"
      Maybe CreateScheduledEventImage
mseimg   <- Object
v Object -> Key -> Parser (Maybe CreateScheduledEventImage)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"image"

      -- The not so trivial ones
      Maybe Value
msecid'  <- Object
v Object -> Key -> Parser (Maybe Value)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:! Key
"channel_id"
      Maybe Value
mseloc'  <- Object
v Object -> Key -> Parser (Maybe Value)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:! Key
"entity_metadata"
      Maybe Value
msedesc' <- Object
v Object -> Key -> Parser (Maybe Value)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:! Key
"description"

      -- Extract the values
      Maybe (Maybe ScheduledEventId)
msecid   <- case Maybe Value
msecid' of
        Maybe Value
Nothing   -> Maybe (Maybe ScheduledEventId)
-> Parser (Maybe (Maybe ScheduledEventId))
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe (Maybe ScheduledEventId)
forall a. Maybe a
Nothing
        Just Value
Null -> Maybe (Maybe ScheduledEventId)
-> Parser (Maybe (Maybe ScheduledEventId))
forall (m :: * -> *) a. Monad m => a -> m a
return (Maybe (Maybe ScheduledEventId)
 -> Parser (Maybe (Maybe ScheduledEventId)))
-> Maybe (Maybe ScheduledEventId)
-> Parser (Maybe (Maybe ScheduledEventId))
forall a b. (a -> b) -> a -> b
$ Maybe ScheduledEventId -> Maybe (Maybe ScheduledEventId)
forall a. a -> Maybe a
Just Maybe ScheduledEventId
forall a. Maybe a
Nothing
        Just Value
x    -> do
          Maybe ScheduledEventId
x' <- Value -> Parser (Maybe ScheduledEventId)
forall a. FromJSON a => Value -> Parser a
parseJSON Value
x
          Maybe (Maybe ScheduledEventId)
-> Parser (Maybe (Maybe ScheduledEventId))
forall (m :: * -> *) a. Monad m => a -> m a
return (Maybe (Maybe ScheduledEventId)
 -> Parser (Maybe (Maybe ScheduledEventId)))
-> Maybe (Maybe ScheduledEventId)
-> Parser (Maybe (Maybe ScheduledEventId))
forall a b. (a -> b) -> a -> b
$ Maybe ScheduledEventId -> Maybe (Maybe ScheduledEventId)
forall a. a -> Maybe a
Just Maybe ScheduledEventId
x'

      Maybe (Maybe Text)
mseloc <- case Maybe Value
mseloc' of
        Maybe Value
Nothing   -> Maybe (Maybe Text) -> Parser (Maybe (Maybe Text))
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe (Maybe Text)
forall a. Maybe a
Nothing
        Just Value
Null -> Maybe (Maybe Text) -> Parser (Maybe (Maybe Text))
forall (m :: * -> *) a. Monad m => a -> m a
return (Maybe (Maybe Text) -> Parser (Maybe (Maybe Text)))
-> Maybe (Maybe Text) -> Parser (Maybe (Maybe Text))
forall a b. (a -> b) -> a -> b
$ Maybe Text -> Maybe (Maybe Text)
forall a. a -> Maybe a
Just Maybe Text
forall a. Maybe a
Nothing
        Just Value
x    -> do
          Maybe Text
x' <- String
-> (Object -> Parser (Maybe Text)) -> Value -> Parser (Maybe Text)
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"entity_metadata" (Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"location") Value
x
          Maybe (Maybe Text) -> Parser (Maybe (Maybe Text))
forall (m :: * -> *) a. Monad m => a -> m a
return (Maybe (Maybe Text) -> Parser (Maybe (Maybe Text)))
-> Maybe (Maybe Text) -> Parser (Maybe (Maybe Text))
forall a b. (a -> b) -> a -> b
$ Maybe Text -> Maybe (Maybe Text)
forall a. a -> Maybe a
Just Maybe Text
x'

      Maybe (Maybe Text)
msedesc <- case Maybe Value
msedesc' of
        Maybe Value
Nothing   -> Maybe (Maybe Text) -> Parser (Maybe (Maybe Text))
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe (Maybe Text)
forall a. Maybe a
Nothing
        Just Value
Null -> Maybe (Maybe Text) -> Parser (Maybe (Maybe Text))
forall (m :: * -> *) a. Monad m => a -> m a
return (Maybe (Maybe Text) -> Parser (Maybe (Maybe Text)))
-> Maybe (Maybe Text) -> Parser (Maybe (Maybe Text))
forall a b. (a -> b) -> a -> b
$ Maybe Text -> Maybe (Maybe Text)
forall a. a -> Maybe a
Just Maybe Text
forall a. Maybe a
Nothing
        Just Value
x    -> do
          Maybe Text
x' <- Value -> Parser (Maybe Text)
forall a. FromJSON a => Value -> Parser a
parseJSON Value
x
          Maybe (Maybe Text) -> Parser (Maybe (Maybe Text))
forall (m :: * -> *) a. Monad m => a -> m a
return (Maybe (Maybe Text) -> Parser (Maybe (Maybe Text)))
-> Maybe (Maybe Text) -> Parser (Maybe (Maybe Text))
forall a b. (a -> b) -> a -> b
$ Maybe Text -> Maybe (Maybe Text)
forall a. a -> Maybe a
Just Maybe Text
x'

      ModifyScheduledEventData -> Parser ModifyScheduledEventData
forall (m :: * -> *) a. Monad m => a -> m a
return (ModifyScheduledEventData -> Parser ModifyScheduledEventData)
-> ModifyScheduledEventData -> Parser ModifyScheduledEventData
forall a b. (a -> b) -> a -> b
$ ModifyScheduledEventData :: Maybe (Maybe ScheduledEventId)
-> Maybe (Maybe Text)
-> Maybe Text
-> Maybe ScheduledEventPrivacyLevel
-> Maybe UTCTime
-> Maybe UTCTime
-> Maybe (Maybe Text)
-> Maybe ScheduledEventType
-> Maybe ScheduledEventStatus
-> Maybe CreateScheduledEventImage
-> ModifyScheduledEventData
ModifyScheduledEventData
        { modifyScheduledEventDataChannelId :: Maybe (Maybe ScheduledEventId)
modifyScheduledEventDataChannelId    = Maybe (Maybe ScheduledEventId)
msecid
        , modifyScheduledEventDataLocation :: Maybe (Maybe Text)
modifyScheduledEventDataLocation     = Maybe (Maybe Text)
mseloc
        , modifyScheduledEventDataName :: Maybe Text
modifyScheduledEventDataName         = Maybe Text
msename
        , modifyScheduledEventDataPrivacyLevel :: Maybe ScheduledEventPrivacyLevel
modifyScheduledEventDataPrivacyLevel = Maybe ScheduledEventPrivacyLevel
msepl
        , modifyScheduledEventDataStartTime :: Maybe UTCTime
modifyScheduledEventDataStartTime    = Maybe UTCTime
msest
        , modifyScheduledEventDataEndTime :: Maybe UTCTime
modifyScheduledEventDataEndTime      = Maybe UTCTime
mseet
        , modifyScheduledEventDataDescription :: Maybe (Maybe Text)
modifyScheduledEventDataDescription  = Maybe (Maybe Text)
msedesc
        , modifyScheduledEventDataType :: Maybe ScheduledEventType
modifyScheduledEventDataType         = Maybe ScheduledEventType
msetype
        , modifyScheduledEventDataStatus :: Maybe ScheduledEventStatus
modifyScheduledEventDataStatus       = Maybe ScheduledEventStatus
msestat
        , modifyScheduledEventDataImage :: Maybe CreateScheduledEventImage
modifyScheduledEventDataImage        = Maybe CreateScheduledEventImage
mseimg
        }
    )

-- | An User that subscribed to a Scheduled Event
data ScheduledEventUser = ScheduledEventUser
  { ScheduledEventUser -> ScheduledEventId
scheduledEventUserEvent       :: ScheduledEventId
  , ScheduledEventUser -> User
scheduledEventUserUser        :: User
  , ScheduledEventUser -> Maybe GuildMember
scheduledEventUserGuildMember :: Maybe GuildMember
  }

instance FromJSON ScheduledEventUser where
  parseJSON :: Value -> Parser ScheduledEventUser
parseJSON = String
-> (Object -> Parser ScheduledEventUser)
-> Value
-> Parser ScheduledEventUser
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject
    String
"ScheduledEventUser"
    (\Object
v ->
      ScheduledEventId -> User -> Maybe GuildMember -> ScheduledEventUser
ScheduledEventUser
        (ScheduledEventId
 -> User -> Maybe GuildMember -> ScheduledEventUser)
-> Parser ScheduledEventId
-> Parser (User -> Maybe GuildMember -> ScheduledEventUser)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
v Object -> Key -> Parser ScheduledEventId
forall a. FromJSON a => Object -> Key -> Parser a
.:  Key
"guild_scheduled_event_id"
        Parser (User -> Maybe GuildMember -> ScheduledEventUser)
-> Parser User -> Parser (Maybe GuildMember -> ScheduledEventUser)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser User
forall a. FromJSON a => Object -> Key -> Parser a
.:  Key
"user"
        Parser (Maybe GuildMember -> ScheduledEventUser)
-> Parser (Maybe GuildMember) -> Parser ScheduledEventUser
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser (Maybe GuildMember)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"member"
    )