-- This file is part of the Wire Server implementation. -- -- Copyright (C) 2022 Wire Swiss GmbH <opensource@wire.com> -- -- This program is free software: you can redistribute it and/or modify it under -- the terms of the GNU Affero General Public License as published by the Free -- Software Foundation, either version 3 of the License, or (at your option) any -- later version. -- -- This program is distributed in the hope that it will be useful, but WITHOUT -- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -- FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more -- details. -- -- You should have received a copy of the GNU Affero General Public License along -- with this program. If not, see <https://www.gnu.org/licenses/>. module Galley.Cassandra.Store ( embedClient, ) where import Cassandra import Imports import Polysemy import Polysemy.Input embedClient :: ( Member (Embed IO) r, Member (Input ClientState) r ) => Client a -> Sem r a embedClient :: forall (r :: EffectRow) a. (Member (Embed IO) r, Member (Input ClientState) r) => Client a -> Sem r a embedClient Client a client = do ClientState cs <- Sem r ClientState forall i (r :: EffectRow). Member (Input i) r => Sem r i input forall (m :: * -> *) (r :: EffectRow) a. Member (Embed m) r => m a -> Sem r a embed @IO (IO a -> Sem r a) -> IO a -> Sem r a forall a b. (a -> b) -> a -> b $ ClientState -> Client a -> IO a forall (m :: * -> *) a. MonadIO m => ClientState -> Client a -> m a runClient ClientState cs Client a client