diff options
author | Paul Oliver <contact@pauloliver.dev> | 2024-08-24 11:57:18 -0700 |
---|---|---|
committer | Paul Oliver <contact@pauloliver.dev> | 2024-12-01 07:01:30 -0800 |
commit | f0854265f7a1b59078308965d33fe2583a5c0f9c (patch) | |
tree | d8b06110d84fce783f1cc91aa37155351c655b2c /hsm-dummy-receiver/Main.hs |
Diffstat (limited to 'hsm-dummy-receiver/Main.hs')
-rw-r--r-- | hsm-dummy-receiver/Main.hs | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/hsm-dummy-receiver/Main.hs b/hsm-dummy-receiver/Main.hs new file mode 100644 index 0000000..37e99b8 --- /dev/null +++ b/hsm-dummy-receiver/Main.hs @@ -0,0 +1,46 @@ +{-# LANGUAGE OverloadedRecordDot #-} +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE TemplateHaskell #-} + +module Main + ( main + ) +where + +import Data.Aeson.TH (defaultOptions, deriveFromJSON, rejectUnknownFields) +import Data.Function ((&)) +import Data.Text (Text, show) +import Effectful (Eff, runEff, (:>)) +import Effectful.Log (Log, localDomain, logInfo_, runLog) +import Effectful.Reader.Static (runReader) +import Effectful.Resource (runResource) +import Hsm.Core.App (launch) +import Hsm.Core.Zmq (receive, runClient) +import Streamly.Data.Fold (drain) +import Streamly.Data.Stream (fold, mapM, repeatM) +import Prelude hiding (mapM, show) + +data Env = Env + { name :: Text + , subEps :: [Text] + , topics :: [Text] + } + +$(deriveFromJSON defaultOptions {rejectUnknownFields = True} ''Env) + +receiver :: Log :> es => Int -> Eff es () +receiver = + localDomain "receiver" + . logInfo_ + . mappend "Received pulse #" + . show + +main :: IO () +main = + launch @Env "dummy-receiver" $ \env logger level -> + (repeatM receive & mapM receiver & fold drain) + & runClient @Env + & runLog env.name logger level + & runReader env + & runResource + & runEff |