{-# LANGUAGE TemplateHaskell #-}
module Calamity.Interactions.Eff (
InteractionEff (..),
getInteraction,
getInteractionID,
getApplicationID,
getInteractionToken,
getInteractionUser,
) where
import Calamity.Types.Model.Interaction
import Calamity.Types.Model.User (User)
import Calamity.Types.Snowflake
import Control.Applicative ((<|>))
import Optics ((^.), (^?), _Just, (%))
import Data.Maybe (fromJust)
import Polysemy
import qualified Polysemy as P
data InteractionEff m a where
GetInteraction :: InteractionEff m Interaction
makeSem ''InteractionEff
getInteractionID :: P.Member InteractionEff r => P.Sem r (Snowflake Interaction)
getInteractionID :: Sem r (Snowflake Interaction)
getInteractionID = (Interaction
-> Optic' A_Lens NoIx Interaction (Snowflake Interaction)
-> Snowflake Interaction
forall (k :: OpticKind) (s :: OpticKind) (is :: IxList)
(a :: OpticKind).
Is k A_Getter =>
s -> Optic' k is s a -> a
^. IsLabel
"id" (Optic' A_Lens NoIx Interaction (Snowflake Interaction))
Optic' A_Lens NoIx Interaction (Snowflake Interaction)
#id) (Interaction -> Snowflake Interaction)
-> Sem r Interaction -> Sem r (Snowflake Interaction)
forall (f :: OpticKind -> OpticKind) (a :: OpticKind)
(b :: OpticKind).
Functor f =>
(a -> b) -> f a -> f b
<$> Sem r Interaction
forall (r :: [Effect]).
MemberWithError InteractionEff r =>
Sem r Interaction
getInteraction
getApplicationID :: P.Member InteractionEff r => P.Sem r (Snowflake Application)
getApplicationID :: Sem r (Snowflake Application)
getApplicationID = (Interaction
-> Optic' A_Lens NoIx Interaction (Snowflake Application)
-> Snowflake Application
forall (k :: OpticKind) (s :: OpticKind) (is :: IxList)
(a :: OpticKind).
Is k A_Getter =>
s -> Optic' k is s a -> a
^. IsLabel
"applicationID"
(Optic' A_Lens NoIx Interaction (Snowflake Application))
Optic' A_Lens NoIx Interaction (Snowflake Application)
#applicationID) (Interaction -> Snowflake Application)
-> Sem r Interaction -> Sem r (Snowflake Application)
forall (f :: OpticKind -> OpticKind) (a :: OpticKind)
(b :: OpticKind).
Functor f =>
(a -> b) -> f a -> f b
<$> Sem r Interaction
forall (r :: [Effect]).
MemberWithError InteractionEff r =>
Sem r Interaction
getInteraction
getInteractionToken :: P.Member InteractionEff r => P.Sem r InteractionToken
getInteractionToken :: Sem r InteractionToken
getInteractionToken = (Interaction
-> Optic' A_Lens NoIx Interaction InteractionToken
-> InteractionToken
forall (k :: OpticKind) (s :: OpticKind) (is :: IxList)
(a :: OpticKind).
Is k A_Getter =>
s -> Optic' k is s a -> a
^. IsLabel "token" (Optic' A_Lens NoIx Interaction InteractionToken)
Optic' A_Lens NoIx Interaction InteractionToken
#token) (Interaction -> InteractionToken)
-> Sem r Interaction -> Sem r InteractionToken
forall (f :: OpticKind -> OpticKind) (a :: OpticKind)
(b :: OpticKind).
Functor f =>
(a -> b) -> f a -> f b
<$> Sem r Interaction
forall (r :: [Effect]).
MemberWithError InteractionEff r =>
Sem r Interaction
getInteraction
getInteractionUser :: P.Member InteractionEff r => P.Sem r (Snowflake User)
getInteractionUser :: Sem r (Snowflake User)
getInteractionUser = do
Interaction
int <- Sem r Interaction
forall (r :: [Effect]).
MemberWithError InteractionEff r =>
Sem r Interaction
getInteraction
let uid :: Maybe (Snowflake User)
uid = Interaction
int Interaction
-> Optic' An_AffineTraversal NoIx Interaction (Snowflake User)
-> Maybe (Snowflake User)
forall (k :: OpticKind) (s :: OpticKind) (is :: IxList)
(a :: OpticKind).
Is k An_AffineFold =>
s -> Optic' k is s a -> Maybe a
^? IsLabel
"user"
(Optic
A_Lens NoIx Interaction Interaction (Maybe User) (Maybe User))
Optic A_Lens NoIx Interaction Interaction (Maybe User) (Maybe User)
#user Optic A_Lens NoIx Interaction Interaction (Maybe User) (Maybe User)
-> Optic A_Prism NoIx (Maybe User) (Maybe User) User User
-> Optic An_AffineTraversal NoIx Interaction Interaction User User
forall (k :: OpticKind) (l :: OpticKind) (m :: OpticKind)
(is :: IxList) (js :: IxList) (ks :: IxList) (s :: OpticKind)
(t :: OpticKind) (u :: OpticKind) (v :: OpticKind) (a :: OpticKind)
(b :: OpticKind).
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% Optic A_Prism NoIx (Maybe User) (Maybe User) User User
forall (a :: OpticKind) (b :: OpticKind).
Prism (Maybe a) (Maybe b) a b
_Just Optic An_AffineTraversal NoIx Interaction Interaction User User
-> Optic A_Lens NoIx User User (Snowflake User) (Snowflake User)
-> Optic' An_AffineTraversal NoIx Interaction (Snowflake User)
forall (k :: OpticKind) (l :: OpticKind) (m :: OpticKind)
(is :: IxList) (js :: IxList) (ks :: IxList) (s :: OpticKind)
(t :: OpticKind) (u :: OpticKind) (v :: OpticKind) (a :: OpticKind)
(b :: OpticKind).
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% IsLabel
"id"
(Optic A_Lens NoIx User User (Snowflake User) (Snowflake User))
Optic A_Lens NoIx User User (Snowflake User) (Snowflake User)
#id
mid :: Maybe (Snowflake User)
mid = Interaction
int Interaction
-> Optic' An_AffineTraversal NoIx Interaction (Snowflake User)
-> Maybe (Snowflake User)
forall (k :: OpticKind) (s :: OpticKind) (is :: IxList)
(a :: OpticKind).
Is k An_AffineFold =>
s -> Optic' k is s a -> Maybe a
^? IsLabel
"member"
(Optic
A_Lens NoIx Interaction Interaction (Maybe Member) (Maybe Member))
Optic
A_Lens NoIx Interaction Interaction (Maybe Member) (Maybe Member)
#member Optic
A_Lens NoIx Interaction Interaction (Maybe Member) (Maybe Member)
-> Optic A_Prism NoIx (Maybe Member) (Maybe Member) Member Member
-> Optic
An_AffineTraversal NoIx Interaction Interaction Member Member
forall (k :: OpticKind) (l :: OpticKind) (m :: OpticKind)
(is :: IxList) (js :: IxList) (ks :: IxList) (s :: OpticKind)
(t :: OpticKind) (u :: OpticKind) (v :: OpticKind) (a :: OpticKind)
(b :: OpticKind).
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% Optic A_Prism NoIx (Maybe Member) (Maybe Member) Member Member
forall (a :: OpticKind) (b :: OpticKind).
Prism (Maybe a) (Maybe b) a b
_Just Optic An_AffineTraversal NoIx Interaction Interaction Member Member
-> Optic
A_Lens NoIx Member Member (Snowflake User) (Snowflake User)
-> Optic' An_AffineTraversal NoIx Interaction (Snowflake User)
forall (k :: OpticKind) (l :: OpticKind) (m :: OpticKind)
(is :: IxList) (js :: IxList) (ks :: IxList) (s :: OpticKind)
(t :: OpticKind) (u :: OpticKind) (v :: OpticKind) (a :: OpticKind)
(b :: OpticKind).
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% IsLabel
"id"
(Optic A_Lens NoIx Member Member (Snowflake User) (Snowflake User))
Optic A_Lens NoIx Member Member (Snowflake User) (Snowflake User)
#id
Snowflake User -> Sem r (Snowflake User)
forall (f :: OpticKind -> OpticKind) (a :: OpticKind).
Applicative f =>
a -> f a
pure (Snowflake User -> Sem r (Snowflake User))
-> (Maybe (Snowflake User) -> Snowflake User)
-> Maybe (Snowflake User)
-> Sem r (Snowflake User)
forall (b :: OpticKind) (c :: OpticKind) (a :: OpticKind).
(b -> c) -> (a -> b) -> a -> c
. Maybe (Snowflake User) -> Snowflake User
forall (a :: OpticKind). HasCallStack => Maybe a -> a
fromJust (Maybe (Snowflake User) -> Sem r (Snowflake User))
-> Maybe (Snowflake User) -> Sem r (Snowflake User)
forall (a :: OpticKind) b. (a -> b) -> a -> b
$ Maybe (Snowflake User)
uid Maybe (Snowflake User)
-> Maybe (Snowflake User) -> Maybe (Snowflake User)
forall (f :: OpticKind -> OpticKind) (a :: OpticKind).
Alternative f =>
f a -> f a -> f a
<|> Maybe (Snowflake User)
mid