/
Beam.hs
43 lines (39 loc) · 1.7 KB
/
Beam.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeOperators #-}
{-
Interface to beam ecosystem used by the PAB to store contracts.
-}
module Plutus.PAB.Db.Beam
where
import Control.Monad.Freer (Eff, interpret, runM, subsume)
import Control.Monad.Freer.Delay (DelayEffect, handleDelayEffect)
import Control.Monad.Freer.Error (runError)
import qualified Control.Monad.Freer.Extras.Modify as Modify
import Control.Monad.Freer.Reader (runReader)
import Database.SQLite.Simple (Connection)
import Plutus.PAB.Db.Beam.ContractDefinitionStore (handleContractDefinitionStore)
import Plutus.PAB.Db.Beam.ContractStore (handleContractStore)
import Plutus.PAB.Effects.Contract (ContractDefinitionStore, ContractStore)
import Plutus.PAB.Effects.Contract.ContractExe (ContractExe)
import Plutus.PAB.Effects.DbStore
import Plutus.PAB.Types (PABError)
-- | Run the ContractStore and ContractDefinitionStore effects on the
-- SQLite database.
runBeamStoreAction ::
forall a.
Connection
-> Eff '[ContractDefinitionStore ContractExe, ContractStore ContractExe, DelayEffect, IO] a
-> IO (Either PABError a)
runBeamStoreAction connection =
runM
. runError
. runReader connection
. interpret handleDbStore
. subsume @IO
. handleDelayEffect
. interpret handleContractStore
. interpret handleContractDefinitionStore
. Modify.raiseEnd