-- | Noop handler for metrics
module Calamity.Metrics.Noop
    ( runMetricsNoop ) where

import           Calamity.Metrics.Eff
import           Calamity.Metrics.Internal

import           Data.Default.Class

import           Polysemy

runMetricsNoop :: Sem (MetricEff ': r) a -> Sem r a
runMetricsNoop :: Sem (MetricEff : r) a -> Sem r a
runMetricsNoop = (forall (rInitial :: EffectRow) x.
 MetricEff (Sem rInitial) x -> Sem r x)
-> Sem (MetricEff : r) a -> Sem r a
forall (e :: (* -> *) -> * -> *) (r :: EffectRow) a.
FirstOrder e "interpret" =>
(forall (rInitial :: EffectRow) x. e (Sem rInitial) x -> Sem r x)
-> Sem (e : r) a -> Sem r a
interpret ((forall (rInitial :: EffectRow) x.
  MetricEff (Sem rInitial) x -> Sem r x)
 -> Sem (MetricEff : r) a -> Sem r a)
-> (forall (rInitial :: EffectRow) x.
    MetricEff (Sem rInitial) x -> Sem r x)
-> Sem (MetricEff : r) a
-> Sem r a
forall a b. (a -> b) -> a -> b
$ \case
  RegisterCounter _ _     -> Counter -> Sem r Counter
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Int -> Counter
Counter Int
0)
  RegisterGauge _ _       -> Gauge -> Sem r Gauge
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Int -> Gauge
Gauge Int
0)
  RegisterHistogram _ _ _ -> Histogram -> Sem r Histogram
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Int -> Histogram
Histogram Int
0)

  AddCounter _ _          -> x -> Sem r x
forall (f :: * -> *) a. Applicative f => a -> f a
pure x
forall a. Default a => a
def
  ModifyGauge _ _         -> x -> Sem r x
forall (f :: * -> *) a. Applicative f => a -> f a
pure x
forall a. Default a => a
def
  ObserveHistogram _ _    -> x -> Sem r x
forall (f :: * -> *) a. Applicative f => a -> f a
pure x
forall a. Default a => a
def