diff options
Diffstat (limited to 'hsm-dummy-receiver')
-rw-r--r-- | hsm-dummy-receiver/Main.hs | 44 | ||||
-rw-r--r-- | hsm-dummy-receiver/hsm-dummy-receiver.cabal | 25 |
2 files changed, 69 insertions, 0 deletions
diff --git a/hsm-dummy-receiver/Main.hs b/hsm-dummy-receiver/Main.hs new file mode 100644 index 0000000..c0aa98a --- /dev/null +++ b/hsm-dummy-receiver/Main.hs @@ -0,0 +1,44 @@ +{-# LANGUAGE OverloadedRecordDot #-} +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE TemplateHaskell #-} + +import Data.Function ((&)) +import Data.Text (Text, pack) +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.Env (deriveFromYaml) +import Hsm.Core.Zmq.Client (receive, runClient) +import Streamly.Data.Fold qualified as S (drain) +import Streamly.Data.Stream qualified as S (Stream, fold, mapM) +import System.IO.Echo (withoutInputEcho) + +data Env = Env + { name :: Text + , subEps :: [Text] + , topics :: [Text] + } + +$(deriveFromYaml ''Env) + +handle :: + forall es. Log :> es + => S.Stream (Eff es) Int + -> Eff es () +handle = S.fold S.drain . S.mapM handler + where + handler :: Int -> Eff es () + handler p = + localDomain "receiver" $ logInfo_ $ "Received pulse #" <> pack (show p) + +main :: IO () +main = + launch @Env "dummy-receiver" withoutInputEcho $ \env logger level -> + (receive & handle) + & runClient @Env + & runLog env.name logger level + & runReader env + & runResource + & runEff diff --git a/hsm-dummy-receiver/hsm-dummy-receiver.cabal b/hsm-dummy-receiver/hsm-dummy-receiver.cabal new file mode 100644 index 0000000..9738bbe --- /dev/null +++ b/hsm-dummy-receiver/hsm-dummy-receiver.cabal @@ -0,0 +1,25 @@ +cabal-version: 3.4 +author: Paul Oliver +build-type: Simple +maintainer: contact@pauloliver.dev +name: hsm-dummy-receiver +version: 0.1.0.0 + +executable dummy-receiver + build-depends: + , base + , echo + , effectful-core + , hsm-core + , log-effectful + , resourcet-effectful + , streamly-core + , text + + main-is: Main.hs + ghc-options: -Wall -Wunused-packages + + if !arch(x86_64) + ghc-options: -optl=-mno-fix-cortex-a53-835769 + + default-language: GHC2021 |