-- |An effect for storing errors.
module Ribosome.Host.Effect.Reports where

import Ribosome.Host.Data.Report (Report, ReportContext)
import Ribosome.Host.Data.StoredReport (StoredReport)

-- |This internal effect stores all errors in memory that have been created through the 'Report' system.
data Reports :: Effect where
  -- |Add a report to the store.
  StoreReport :: ReportContext -> Report -> Reports m ()
  -- |Get all reports.
  StoredReports :: Reports m (Map ReportContext [StoredReport])

makeSem_ ''Reports

-- |Add a report to the store.
storeReport ::
  Member Reports r =>
  ReportContext ->
  Report ->
  Sem r ()

-- |Get all reports.
storedReports ::
  Member Reports r =>
  Sem r (Map ReportContext [StoredReport])