{-# LANGUAGE TemplateHaskell #-}
module Calamity.Types.Model.Guild.Member (Member (..)) where
import Calamity.Internal.Utils (AesonVector (unAesonVector))
import Calamity.Types.Model.Guild.Role
import Calamity.Types.Model.User
import Calamity.Types.Snowflake
import Data.Aeson ((.:), (.:?), (.!=))
import qualified Data.Aeson as Aeson
import Data.Text (Text)
import Data.Time
import Data.Vector.Unboxing (Vector)
import qualified Data.Vector.Unboxing as V
import Data.Word (Word64)
import Optics.TH
import qualified TextShow
data Member = Member
{ Member -> Snowflake User
id :: Snowflake User
, Member -> Text
username :: Text
, Member -> Text
discriminator :: Text
, Member -> Maybe Bool
bot :: Maybe Bool
, Member -> Maybe Text
avatar :: Maybe Text
, Member -> Maybe Bool
mfaEnabled :: Maybe Bool
, Member -> Maybe Bool
verified :: Maybe Bool
, Member -> Maybe Text
email :: Maybe Text
, Member -> Maybe Word64
flags :: Maybe Word64
, Member -> Maybe Word64
premiumType :: Maybe Word64
, Member -> Maybe Text
nick :: Maybe Text
, Member -> Vector (Snowflake Role)
roles :: Vector (Snowflake Role)
, Member -> UTCTime
joinedAt :: UTCTime
, Member -> Bool
deaf :: Bool
, Member -> Bool
mute :: Bool
}
deriving (Member -> Member -> Bool
(Member -> Member -> Bool)
-> (Member -> Member -> Bool) -> Eq Member
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Member -> Member -> Bool
$c/= :: Member -> Member -> Bool
== :: Member -> Member -> Bool
$c== :: Member -> Member -> Bool
Eq, Int -> Member -> ShowS
[Member] -> ShowS
Member -> String
(Int -> Member -> ShowS)
-> (Member -> String) -> ([Member] -> ShowS) -> Show Member
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Member] -> ShowS
$cshowList :: [Member] -> ShowS
show :: Member -> String
$cshow :: Member -> String
showsPrec :: Int -> Member -> ShowS
$cshowsPrec :: Int -> Member -> ShowS
Show)
deriving (Int -> Member -> Builder
Int -> Member -> Text
Int -> Member -> Text
[Member] -> Builder
[Member] -> Text
[Member] -> Text
Member -> Builder
Member -> Text
Member -> Text
(Int -> Member -> Builder)
-> (Member -> Builder)
-> ([Member] -> Builder)
-> (Int -> Member -> Text)
-> (Member -> Text)
-> ([Member] -> Text)
-> (Int -> Member -> Text)
-> (Member -> Text)
-> ([Member] -> Text)
-> TextShow Member
forall a.
(Int -> a -> Builder)
-> (a -> Builder)
-> ([a] -> Builder)
-> (Int -> a -> Text)
-> (a -> Text)
-> ([a] -> Text)
-> (Int -> a -> Text)
-> (a -> Text)
-> ([a] -> Text)
-> TextShow a
showtlList :: [Member] -> Text
$cshowtlList :: [Member] -> Text
showtl :: Member -> Text
$cshowtl :: Member -> Text
showtlPrec :: Int -> Member -> Text
$cshowtlPrec :: Int -> Member -> Text
showtList :: [Member] -> Text
$cshowtList :: [Member] -> Text
showt :: Member -> Text
$cshowt :: Member -> Text
showtPrec :: Int -> Member -> Text
$cshowtPrec :: Int -> Member -> Text
showbList :: [Member] -> Builder
$cshowbList :: [Member] -> Builder
showb :: Member -> Builder
$cshowb :: Member -> Builder
showbPrec :: Int -> Member -> Builder
$cshowbPrec :: Int -> Member -> Builder
TextShow.TextShow) via TextShow.FromStringShow Member
deriving (HasID Member) via HasIDFieldCoerce "id" Member User
deriving (HasID User) via HasIDField "id" Member
instance Aeson.FromJSON Member where
parseJSON :: Value -> Parser Member
parseJSON = String -> (Object -> Parser Member) -> Value -> Parser Member
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Aeson.withObject String
"Member" ((Object -> Parser Member) -> Value -> Parser Member)
-> (Object -> Parser Member) -> Value -> Parser Member
forall a b. (a -> b) -> a -> b
$ \Object
v -> do
Object
u :: Aeson.Object <- Object
v Object -> Key -> Parser Object
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"user"
Snowflake User
-> Text
-> Text
-> Maybe Bool
-> Maybe Text
-> Maybe Bool
-> Maybe Bool
-> Maybe Text
-> Maybe Word64
-> Maybe Word64
-> Maybe Text
-> Vector (Snowflake Role)
-> UTCTime
-> Bool
-> Bool
-> Member
Member
(Snowflake User
-> Text
-> Text
-> Maybe Bool
-> Maybe Text
-> Maybe Bool
-> Maybe Bool
-> Maybe Text
-> Maybe Word64
-> Maybe Word64
-> Maybe Text
-> Vector (Snowflake Role)
-> UTCTime
-> Bool
-> Bool
-> Member)
-> Parser (Snowflake User)
-> Parser
(Text
-> Text
-> Maybe Bool
-> Maybe Text
-> Maybe Bool
-> Maybe Bool
-> Maybe Text
-> Maybe Word64
-> Maybe Word64
-> Maybe Text
-> Vector (Snowflake Role)
-> UTCTime
-> Bool
-> Bool
-> Member)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
u Object -> Key -> Parser (Snowflake User)
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"id"
Parser
(Text
-> Text
-> Maybe Bool
-> Maybe Text
-> Maybe Bool
-> Maybe Bool
-> Maybe Text
-> Maybe Word64
-> Maybe Word64
-> Maybe Text
-> Vector (Snowflake Role)
-> UTCTime
-> Bool
-> Bool
-> Member)
-> Parser Text
-> Parser
(Text
-> Maybe Bool
-> Maybe Text
-> Maybe Bool
-> Maybe Bool
-> Maybe Text
-> Maybe Word64
-> Maybe Word64
-> Maybe Text
-> Vector (Snowflake Role)
-> UTCTime
-> Bool
-> Bool
-> Member)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
u Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"username"
Parser
(Text
-> Maybe Bool
-> Maybe Text
-> Maybe Bool
-> Maybe Bool
-> Maybe Text
-> Maybe Word64
-> Maybe Word64
-> Maybe Text
-> Vector (Snowflake Role)
-> UTCTime
-> Bool
-> Bool
-> Member)
-> Parser Text
-> Parser
(Maybe Bool
-> Maybe Text
-> Maybe Bool
-> Maybe Bool
-> Maybe Text
-> Maybe Word64
-> Maybe Word64
-> Maybe Text
-> Vector (Snowflake Role)
-> UTCTime
-> Bool
-> Bool
-> Member)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
u Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"discriminator"
Parser
(Maybe Bool
-> Maybe Text
-> Maybe Bool
-> Maybe Bool
-> Maybe Text
-> Maybe Word64
-> Maybe Word64
-> Maybe Text
-> Vector (Snowflake Role)
-> UTCTime
-> Bool
-> Bool
-> Member)
-> Parser (Maybe Bool)
-> Parser
(Maybe Text
-> Maybe Bool
-> Maybe Bool
-> Maybe Text
-> Maybe Word64
-> Maybe Word64
-> Maybe Text
-> Vector (Snowflake Role)
-> UTCTime
-> Bool
-> Bool
-> Member)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"bot"
Parser
(Maybe Text
-> Maybe Bool
-> Maybe Bool
-> Maybe Text
-> Maybe Word64
-> Maybe Word64
-> Maybe Text
-> Vector (Snowflake Role)
-> UTCTime
-> Bool
-> Bool
-> Member)
-> Parser (Maybe Text)
-> Parser
(Maybe Bool
-> Maybe Bool
-> Maybe Text
-> Maybe Word64
-> Maybe Word64
-> Maybe Text
-> Vector (Snowflake Role)
-> UTCTime
-> Bool
-> Bool
-> Member)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"avatar"
Parser
(Maybe Bool
-> Maybe Bool
-> Maybe Text
-> Maybe Word64
-> Maybe Word64
-> Maybe Text
-> Vector (Snowflake Role)
-> UTCTime
-> Bool
-> Bool
-> Member)
-> Parser (Maybe Bool)
-> Parser
(Maybe Bool
-> Maybe Text
-> Maybe Word64
-> Maybe Word64
-> Maybe Text
-> Vector (Snowflake Role)
-> UTCTime
-> Bool
-> Bool
-> Member)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"mfa_enabled"
Parser
(Maybe Bool
-> Maybe Text
-> Maybe Word64
-> Maybe Word64
-> Maybe Text
-> Vector (Snowflake Role)
-> UTCTime
-> Bool
-> Bool
-> Member)
-> Parser (Maybe Bool)
-> Parser
(Maybe Text
-> Maybe Word64
-> Maybe Word64
-> Maybe Text
-> Vector (Snowflake Role)
-> UTCTime
-> Bool
-> Bool
-> Member)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"verified"
Parser
(Maybe Text
-> Maybe Word64
-> Maybe Word64
-> Maybe Text
-> Vector (Snowflake Role)
-> UTCTime
-> Bool
-> Bool
-> Member)
-> Parser (Maybe Text)
-> Parser
(Maybe Word64
-> Maybe Word64
-> Maybe Text
-> Vector (Snowflake Role)
-> UTCTime
-> Bool
-> Bool
-> Member)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"email"
Parser
(Maybe Word64
-> Maybe Word64
-> Maybe Text
-> Vector (Snowflake Role)
-> UTCTime
-> Bool
-> Bool
-> Member)
-> Parser (Maybe Word64)
-> Parser
(Maybe Word64
-> Maybe Text
-> Vector (Snowflake Role)
-> UTCTime
-> Bool
-> Bool
-> Member)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser (Maybe Word64)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"flags"
Parser
(Maybe Word64
-> Maybe Text
-> Vector (Snowflake Role)
-> UTCTime
-> Bool
-> Bool
-> Member)
-> Parser (Maybe Word64)
-> Parser
(Maybe Text
-> Vector (Snowflake Role) -> UTCTime -> Bool -> Bool -> Member)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser (Maybe Word64)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"premium_type"
Parser
(Maybe Text
-> Vector (Snowflake Role) -> UTCTime -> Bool -> Bool -> Member)
-> Parser (Maybe Text)
-> Parser
(Vector (Snowflake Role) -> UTCTime -> Bool -> Bool -> Member)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"nick"
Parser
(Vector (Snowflake Role) -> UTCTime -> Bool -> Bool -> Member)
-> Parser (Vector (Snowflake Role))
-> Parser (UTCTime -> Bool -> Bool -> Member)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ((AesonVector (Snowflake Role) -> Vector (Snowflake Role))
-> Maybe (AesonVector (Snowflake Role))
-> Maybe (Vector (Snowflake Role))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap AesonVector (Snowflake Role) -> Vector (Snowflake Role)
forall a. AesonVector a -> Vector a
unAesonVector (Maybe (AesonVector (Snowflake Role))
-> Maybe (Vector (Snowflake Role)))
-> Parser (Maybe (AesonVector (Snowflake Role)))
-> Parser (Maybe (Vector (Snowflake Role)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
v Object -> Key -> Parser (Maybe (AesonVector (Snowflake Role)))
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"roles") Parser (Maybe (Vector (Snowflake Role)))
-> Vector (Snowflake Role) -> Parser (Vector (Snowflake Role))
forall a. Parser (Maybe a) -> a -> Parser a
.!= Vector (Snowflake Role)
forall a. Unboxable a => Vector a
V.empty
Parser (UTCTime -> Bool -> Bool -> Member)
-> Parser UTCTime -> Parser (Bool -> Bool -> Member)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser UTCTime
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"joined_at"
Parser (Bool -> Bool -> Member)
-> Parser Bool -> Parser (Bool -> Member)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser Bool
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"deaf"
Parser (Bool -> Member) -> Parser Bool -> Parser Member
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser Bool
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"mute"
$(makeFieldLabelsNoPrefix ''Member)