module Calamity.HTTP.Guild
( GuildRequest(..)
, CreateGuildData(..)
, ModifyGuildData(..) ) where
import Calamity.HTTP.Internal.Request
import Calamity.HTTP.Internal.Route
import Calamity.Internal.AesonThings
import Calamity.Types.Model.Channel
import Calamity.Types.Model.Guild
import Calamity.Types.Model.User
import Calamity.Types.Snowflake
import Data.Aeson
import Data.Function
import Data.Text ( Text )
import GHC.Generics
import Network.Wreq
data CreateGuildData = CreateGuildData
{ CreateGuildData -> Text
name :: Text
, CreateGuildData -> Text
region :: Text
, CreateGuildData -> Text
icon :: Text
, CreateGuildData -> Integer
verificationLevel :: Integer
, CreateGuildData -> Integer
defaultMessageNotifications :: Integer
, CreateGuildData -> Integer
explicitContentFilter :: Integer
, CreateGuildData -> [Role]
roles :: [Role]
, CreateGuildData -> [Partial Channel]
channels :: [Partial Channel]
}
deriving ( Int -> CreateGuildData -> ShowS
[CreateGuildData] -> ShowS
CreateGuildData -> String
(Int -> CreateGuildData -> ShowS)
-> (CreateGuildData -> String)
-> ([CreateGuildData] -> ShowS)
-> Show CreateGuildData
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateGuildData] -> ShowS
$cshowList :: [CreateGuildData] -> ShowS
show :: CreateGuildData -> String
$cshow :: CreateGuildData -> String
showsPrec :: Int -> CreateGuildData -> ShowS
$cshowsPrec :: Int -> CreateGuildData -> ShowS
Show, (forall x. CreateGuildData -> Rep CreateGuildData x)
-> (forall x. Rep CreateGuildData x -> CreateGuildData)
-> Generic CreateGuildData
forall x. Rep CreateGuildData x -> CreateGuildData
forall x. CreateGuildData -> Rep CreateGuildData x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateGuildData x -> CreateGuildData
$cfrom :: forall x. CreateGuildData -> Rep CreateGuildData x
Generic )
deriving ( [CreateGuildData] -> Encoding
[CreateGuildData] -> Value
CreateGuildData -> Encoding
CreateGuildData -> Value
(CreateGuildData -> Value)
-> (CreateGuildData -> Encoding)
-> ([CreateGuildData] -> Value)
-> ([CreateGuildData] -> Encoding)
-> ToJSON CreateGuildData
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
toEncodingList :: [CreateGuildData] -> Encoding
$ctoEncodingList :: [CreateGuildData] -> Encoding
toJSONList :: [CreateGuildData] -> Value
$ctoJSONList :: [CreateGuildData] -> Value
toEncoding :: CreateGuildData -> Encoding
$ctoEncoding :: CreateGuildData -> Encoding
toJSON :: CreateGuildData -> Value
$ctoJSON :: CreateGuildData -> Value
ToJSON ) via CalamityJSON CreateGuildData
data ModifyGuildData = ModifyGuildData
{ ModifyGuildData -> Maybe Text
name :: Maybe Text
, ModifyGuildData -> Maybe Text
region :: Maybe Text
, ModifyGuildData -> Maybe Text
icon :: Maybe Text
, ModifyGuildData -> Maybe Integer
verificationLevel :: Maybe Integer
, ModifyGuildData -> Maybe Integer
defaultMessageNotifications :: Maybe Integer
, ModifyGuildData -> Maybe Integer
explicitContentFilter :: Maybe Integer
, ModifyGuildData -> Maybe (Snowflake Channel)
afkChannelID :: Maybe (Snowflake Channel)
, ModifyGuildData -> Maybe Integer
afkTimeout :: Maybe Integer
, ModifyGuildData -> Maybe (Snowflake User)
ownerID :: Maybe (Snowflake User)
, ModifyGuildData -> Maybe Text
splash :: Maybe Text
, ModifyGuildData -> Maybe Text
banner :: Maybe Text
, ModifyGuildData -> Maybe (Snowflake Channel)
systemChannelID :: Maybe (Snowflake Channel)
}
deriving ( Int -> ModifyGuildData -> ShowS
[ModifyGuildData] -> ShowS
ModifyGuildData -> String
(Int -> ModifyGuildData -> ShowS)
-> (ModifyGuildData -> String)
-> ([ModifyGuildData] -> ShowS)
-> Show ModifyGuildData
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ModifyGuildData] -> ShowS
$cshowList :: [ModifyGuildData] -> ShowS
show :: ModifyGuildData -> String
$cshow :: ModifyGuildData -> String
showsPrec :: Int -> ModifyGuildData -> ShowS
$cshowsPrec :: Int -> ModifyGuildData -> ShowS
Show, (forall x. ModifyGuildData -> Rep ModifyGuildData x)
-> (forall x. Rep ModifyGuildData x -> ModifyGuildData)
-> Generic ModifyGuildData
forall x. Rep ModifyGuildData x -> ModifyGuildData
forall x. ModifyGuildData -> Rep ModifyGuildData x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ModifyGuildData x -> ModifyGuildData
$cfrom :: forall x. ModifyGuildData -> Rep ModifyGuildData x
Generic )
deriving ( [ModifyGuildData] -> Encoding
[ModifyGuildData] -> Value
ModifyGuildData -> Encoding
ModifyGuildData -> Value
(ModifyGuildData -> Value)
-> (ModifyGuildData -> Encoding)
-> ([ModifyGuildData] -> Value)
-> ([ModifyGuildData] -> Encoding)
-> ToJSON ModifyGuildData
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
toEncodingList :: [ModifyGuildData] -> Encoding
$ctoEncodingList :: [ModifyGuildData] -> Encoding
toJSONList :: [ModifyGuildData] -> Value
$ctoJSONList :: [ModifyGuildData] -> Value
toEncoding :: ModifyGuildData -> Encoding
$ctoEncoding :: ModifyGuildData -> Encoding
toJSON :: ModifyGuildData -> Value
$ctoJSON :: ModifyGuildData -> Value
ToJSON ) via CalamityJSON ModifyGuildData
data GuildRequest a where
CreateGuild :: CreateGuildData -> GuildRequest Guild
GetGuild :: HasID Guild g => g -> GuildRequest Guild
ModifyGuild :: HasID Guild g => g -> ModifyGuildData -> GuildRequest Guild
baseRoute :: Snowflake Guild -> RouteBuilder _
baseRoute :: Snowflake Guild
-> RouteBuilder '[ '(Guild, 'Satisfied), '(Guild, 'Required)]
baseRoute id :: Snowflake Guild
id = RouteBuilder '[]
mkRouteBuilder RouteBuilder '[] -> S -> ConsRes S '[]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S "guilds" RouteBuilder '[] -> ID Guild -> ConsRes (ID Guild) '[]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// ID Guild
forall k (a :: k). ID a
ID @Guild
RouteBuilder '[ '(Guild, 'Required)]
-> (RouteBuilder '[ '(Guild, 'Required)]
-> RouteBuilder '[ '(Guild, 'Satisfied), '(Guild, 'Required)])
-> RouteBuilder '[ '(Guild, 'Satisfied), '(Guild, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Guild
-> RouteBuilder '[ '(Guild, 'Required)]
-> RouteBuilder '[ '(Guild, 'Satisfied), '(Guild, 'Required)]
forall k (ids :: [(*, RouteRequirement)]).
Typeable k =>
Snowflake k
-> RouteBuilder ids -> RouteBuilder ('(k, 'Satisfied) : ids)
giveID Snowflake Guild
id
instance Request (GuildRequest a) a where
toRoute :: GuildRequest a -> Route
toRoute (CreateGuild _) = RouteBuilder '[]
mkRouteBuilder RouteBuilder '[] -> S -> ConsRes S '[]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S "guilds"
RouteBuilder '[] -> (RouteBuilder '[] -> Route) -> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder '[] -> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
toRoute (GetGuild (g -> Snowflake Guild
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID -> Snowflake Guild
gid)) = Snowflake Guild
-> RouteBuilder '[ '(Guild, 'Satisfied), '(Guild, 'Required)]
baseRoute Snowflake Guild
gid
RouteBuilder '[ '(Guild, 'Satisfied), '(Guild, 'Required)]
-> (RouteBuilder '[ '(Guild, 'Satisfied), '(Guild, 'Required)]
-> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder '[ '(Guild, 'Satisfied), '(Guild, 'Required)] -> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
toRoute (ModifyGuild (g -> Snowflake Guild
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID -> Snowflake Guild
gid) _) = Snowflake Guild
-> RouteBuilder '[ '(Guild, 'Satisfied), '(Guild, 'Required)]
baseRoute Snowflake Guild
gid
RouteBuilder '[ '(Guild, 'Satisfied), '(Guild, 'Required)]
-> (RouteBuilder '[ '(Guild, 'Satisfied), '(Guild, 'Required)]
-> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder '[ '(Guild, 'Satisfied), '(Guild, 'Required)] -> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
toAction :: GuildRequest a -> Options -> String -> IO (Response ByteString)
toAction (CreateGuild o :: CreateGuildData
o) = Value -> Options -> String -> IO (Response ByteString)
forall a.
Postable a =>
a -> Options -> String -> IO (Response ByteString)
postWith' (CreateGuildData -> Value
forall a. ToJSON a => a -> Value
toJSON CreateGuildData
o)
toAction (GetGuild _) = Options -> String -> IO (Response ByteString)
getWith
toAction (ModifyGuild _ o :: ModifyGuildData
o) = Value -> Options -> String -> IO (Response ByteString)
forall a.
Patchable a =>
a -> Options -> String -> IO (Response ByteString)
patchWith' (ModifyGuildData -> Value
forall a. ToJSON a => a -> Value
toJSON ModifyGuildData
o)