summaryrefslogtreecommitdiff
path: root/hsm-dummy-receiver/Main.hs
diff options
context:
space:
mode:
authorPaul Oliver <contact@pauloliver.dev>2024-08-24 11:57:18 -0700
committerPaul Oliver <contact@pauloliver.dev>2024-12-01 07:01:30 -0800
commitf0854265f7a1b59078308965d33fe2583a5c0f9c (patch)
treed8b06110d84fce783f1cc91aa37155351c655b2c /hsm-dummy-receiver/Main.hs
Initial commitHEADmaster
Diffstat (limited to 'hsm-dummy-receiver/Main.hs')
-rw-r--r--hsm-dummy-receiver/Main.hs46
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