{-# LANGUAGE GeneralisedNewtypeDeriving #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TemplateHaskell #-} module Striot.Nodes.Types where import Control.Lens ((^.)) import Control.Lens.Combinators (makeClassy) import Control.Lens.TH import Control.Monad.Reader import Data.IORef import Network.Socket (HostName, ServiceName) import System.Envy import System.Metrics.Prometheus.Metric.Counter (Counter) import System.Metrics.Prometheus.Metric.Gauge (Gauge) data Metrics = Metrics { Metrics -> Gauge _ingressConn :: Gauge , Metrics -> Counter _ingressBytes :: Counter , Metrics -> Counter _ingressEvents :: Counter , Metrics -> Gauge _egressConn :: Gauge , Metrics -> Counter _egressBytes :: Counter , Metrics -> Counter _egressEvents :: Counter } data NetConfig = NetConfig { NetConfig -> HostName _host :: HostName , NetConfig -> HostName _port :: ServiceName } deriving (Int -> NetConfig -> ShowS [NetConfig] -> ShowS NetConfig -> HostName (Int -> NetConfig -> ShowS) -> (NetConfig -> HostName) -> ([NetConfig] -> ShowS) -> Show NetConfig forall a. (Int -> a -> ShowS) -> (a -> HostName) -> ([a] -> ShowS) -> Show a showList :: [NetConfig] -> ShowS $cshowList :: [NetConfig] -> ShowS show :: NetConfig -> HostName $cshow :: NetConfig -> HostName showsPrec :: Int -> NetConfig -> ShowS $cshowsPrec :: Int -> NetConfig -> ShowS Show) makeLenses ''NetConfig data TCPConfig = TCPConfig { TCPConfig -> NetConfig _tcpConn :: NetConfig } deriving (Int -> TCPConfig -> ShowS [TCPConfig] -> ShowS TCPConfig -> HostName (Int -> TCPConfig -> ShowS) -> (TCPConfig -> HostName) -> ([TCPConfig] -> ShowS) -> Show TCPConfig forall a. (Int -> a -> ShowS) -> (a -> HostName) -> ([a] -> ShowS) -> Show a showList :: [TCPConfig] -> ShowS $cshowList :: [TCPConfig] -> ShowS show :: TCPConfig -> HostName $cshow :: TCPConfig -> HostName showsPrec :: Int -> TCPConfig -> ShowS $cshowsPrec :: Int -> TCPConfig -> ShowS Show) makeLenses ''TCPConfig data KafkaConfig = KafkaConfig { KafkaConfig -> NetConfig _kafkaConn :: NetConfig , KafkaConfig -> HostName _kafkaTopic :: String , KafkaConfig -> HostName _kafkaConGroup :: String } deriving (Int -> KafkaConfig -> ShowS [KafkaConfig] -> ShowS KafkaConfig -> HostName (Int -> KafkaConfig -> ShowS) -> (KafkaConfig -> HostName) -> ([KafkaConfig] -> ShowS) -> Show KafkaConfig forall a. (Int -> a -> ShowS) -> (a -> HostName) -> ([a] -> ShowS) -> Show a showList :: [KafkaConfig] -> ShowS $cshowList :: [KafkaConfig] -> ShowS show :: KafkaConfig -> HostName $cshow :: KafkaConfig -> HostName showsPrec :: Int -> KafkaConfig -> ShowS $cshowsPrec :: Int -> KafkaConfig -> ShowS Show) makeLenses ''KafkaConfig data MQTTConfig = MQTTConfig { MQTTConfig -> NetConfig _mqttConn :: NetConfig , MQTTConfig -> HostName _mqttTopic :: String } deriving (Int -> MQTTConfig -> ShowS [MQTTConfig] -> ShowS MQTTConfig -> HostName (Int -> MQTTConfig -> ShowS) -> (MQTTConfig -> HostName) -> ([MQTTConfig] -> ShowS) -> Show MQTTConfig forall a. (Int -> a -> ShowS) -> (a -> HostName) -> ([a] -> ShowS) -> Show a showList :: [MQTTConfig] -> ShowS $cshowList :: [MQTTConfig] -> ShowS show :: MQTTConfig -> HostName $cshow :: MQTTConfig -> HostName showsPrec :: Int -> MQTTConfig -> ShowS $cshowsPrec :: Int -> MQTTConfig -> ShowS Show) makeLenses ''MQTTConfig data ConnectionConfig = ConnTCPConfig TCPConfig | ConnKafkaConfig KafkaConfig | ConnMQTTConfig MQTTConfig deriving (Int -> ConnectionConfig -> ShowS [ConnectionConfig] -> ShowS ConnectionConfig -> HostName (Int -> ConnectionConfig -> ShowS) -> (ConnectionConfig -> HostName) -> ([ConnectionConfig] -> ShowS) -> Show ConnectionConfig forall a. (Int -> a -> ShowS) -> (a -> HostName) -> ([a] -> ShowS) -> Show a showList :: [ConnectionConfig] -> ShowS $cshowList :: [ConnectionConfig] -> ShowS show :: ConnectionConfig -> HostName $cshow :: ConnectionConfig -> HostName showsPrec :: Int -> ConnectionConfig -> ShowS $cshowsPrec :: Int -> ConnectionConfig -> ShowS Show) data StriotConfig = StriotConfig { StriotConfig -> HostName _nodeName :: String , StriotConfig -> ConnectionConfig _ingressConnConfig :: ConnectionConfig , StriotConfig -> ConnectionConfig _egressConnConfig :: ConnectionConfig , StriotConfig -> Int _chanSize :: Int } deriving (Int -> StriotConfig -> ShowS [StriotConfig] -> ShowS StriotConfig -> HostName (Int -> StriotConfig -> ShowS) -> (StriotConfig -> HostName) -> ([StriotConfig] -> ShowS) -> Show StriotConfig forall a. (Int -> a -> ShowS) -> (a -> HostName) -> ([a] -> ShowS) -> Show a showList :: [StriotConfig] -> ShowS $cshowList :: [StriotConfig] -> ShowS show :: StriotConfig -> HostName $cshow :: StriotConfig -> HostName showsPrec :: Int -> StriotConfig -> ShowS $cshowsPrec :: Int -> StriotConfig -> ShowS Show) makeClassy ''StriotConfig instance ToEnv StriotConfig where toEnv :: StriotConfig -> EnvList StriotConfig toEnv StriotConfig {Int HostName ConnectionConfig _chanSize :: Int _egressConnConfig :: ConnectionConfig _ingressConnConfig :: ConnectionConfig _nodeName :: HostName _chanSize :: StriotConfig -> Int _egressConnConfig :: StriotConfig -> ConnectionConfig _ingressConnConfig :: StriotConfig -> ConnectionConfig _nodeName :: StriotConfig -> HostName ..} = [EnvVar] -> EnvList StriotConfig forall a. [EnvVar] -> EnvList a makeEnv ([EnvVar] -> EnvList StriotConfig) -> [EnvVar] -> EnvList StriotConfig forall a b. (a -> b) -> a -> b $ [ HostName "STRIOT_NODE_NAME" HostName -> HostName -> EnvVar forall a. Var a => HostName -> a -> EnvVar .= HostName _nodeName , HostName "STRIOT_CHAN_SIZE" HostName -> Int -> EnvVar forall a. Var a => HostName -> a -> EnvVar .= Int _chanSize ] [EnvVar] -> [EnvVar] -> [EnvVar] forall a. [a] -> [a] -> [a] ++ ConnectType -> ConnectionConfig -> [EnvVar] writeConf ConnectType INGRESS ConnectionConfig _ingressConnConfig [EnvVar] -> [EnvVar] -> [EnvVar] forall a. [a] -> [a] -> [a] ++ ConnectType -> ConnectionConfig -> [EnvVar] writeConf ConnectType EGRESS ConnectionConfig _egressConnConfig writeConf :: ConnectType -> ConnectionConfig -> [EnvVar] writeConf :: ConnectType -> ConnectionConfig -> [EnvVar] writeConf ConnectType t (ConnTCPConfig TCPConfig conf) = let base :: HostName base = HostName "STRIOT_" HostName -> ShowS forall a. [a] -> [a] -> [a] ++ ConnectType -> HostName forall a. Show a => a -> HostName show ConnectType t HostName -> ShowS forall a. [a] -> [a] -> [a] ++ HostName "_" in [ (HostName base HostName -> ShowS forall a. [a] -> [a] -> [a] ++ HostName "TYPE") HostName -> HostName -> EnvVar forall a. Var a => HostName -> a -> EnvVar .= HostName "TCP" , (HostName base HostName -> ShowS forall a. [a] -> [a] -> [a] ++ HostName "HOST") HostName -> HostName -> EnvVar forall a. Var a => HostName -> a -> EnvVar .= (TCPConfig conf TCPConfig -> Getting HostName TCPConfig HostName -> HostName forall s a. s -> Getting a s a -> a ^. (NetConfig -> Const HostName NetConfig) -> TCPConfig -> Const HostName TCPConfig Iso' TCPConfig NetConfig tcpConn ((NetConfig -> Const HostName NetConfig) -> TCPConfig -> Const HostName TCPConfig) -> ((HostName -> Const HostName HostName) -> NetConfig -> Const HostName NetConfig) -> Getting HostName TCPConfig HostName forall b c a. (b -> c) -> (a -> b) -> a -> c . (HostName -> Const HostName HostName) -> NetConfig -> Const HostName NetConfig Lens' NetConfig HostName host) , (HostName base HostName -> ShowS forall a. [a] -> [a] -> [a] ++ HostName "PORT") HostName -> HostName -> EnvVar forall a. Var a => HostName -> a -> EnvVar .= (TCPConfig conf TCPConfig -> Getting HostName TCPConfig HostName -> HostName forall s a. s -> Getting a s a -> a ^. (NetConfig -> Const HostName NetConfig) -> TCPConfig -> Const HostName TCPConfig Iso' TCPConfig NetConfig tcpConn ((NetConfig -> Const HostName NetConfig) -> TCPConfig -> Const HostName TCPConfig) -> ((HostName -> Const HostName HostName) -> NetConfig -> Const HostName NetConfig) -> Getting HostName TCPConfig HostName forall b c a. (b -> c) -> (a -> b) -> a -> c . (HostName -> Const HostName HostName) -> NetConfig -> Const HostName NetConfig Lens' NetConfig HostName port)] writeConf ConnectType t (ConnKafkaConfig KafkaConfig conf) = let base :: HostName base = HostName "STRIOT_" HostName -> ShowS forall a. [a] -> [a] -> [a] ++ ConnectType -> HostName forall a. Show a => a -> HostName show ConnectType t HostName -> ShowS forall a. [a] -> [a] -> [a] ++ HostName "_" in [ (HostName base HostName -> ShowS forall a. [a] -> [a] -> [a] ++ HostName "TYPE") HostName -> HostName -> EnvVar forall a. Var a => HostName -> a -> EnvVar .= HostName "KAFKA" , (HostName base HostName -> ShowS forall a. [a] -> [a] -> [a] ++ HostName "HOST") HostName -> HostName -> EnvVar forall a. Var a => HostName -> a -> EnvVar .= (KafkaConfig conf KafkaConfig -> Getting HostName KafkaConfig HostName -> HostName forall s a. s -> Getting a s a -> a ^. (NetConfig -> Const HostName NetConfig) -> KafkaConfig -> Const HostName KafkaConfig Lens' KafkaConfig NetConfig kafkaConn ((NetConfig -> Const HostName NetConfig) -> KafkaConfig -> Const HostName KafkaConfig) -> ((HostName -> Const HostName HostName) -> NetConfig -> Const HostName NetConfig) -> Getting HostName KafkaConfig HostName forall b c a. (b -> c) -> (a -> b) -> a -> c . (HostName -> Const HostName HostName) -> NetConfig -> Const HostName NetConfig Lens' NetConfig HostName host) , (HostName base HostName -> ShowS forall a. [a] -> [a] -> [a] ++ HostName "PORT") HostName -> HostName -> EnvVar forall a. Var a => HostName -> a -> EnvVar .= (KafkaConfig conf KafkaConfig -> Getting HostName KafkaConfig HostName -> HostName forall s a. s -> Getting a s a -> a ^. (NetConfig -> Const HostName NetConfig) -> KafkaConfig -> Const HostName KafkaConfig Lens' KafkaConfig NetConfig kafkaConn ((NetConfig -> Const HostName NetConfig) -> KafkaConfig -> Const HostName KafkaConfig) -> ((HostName -> Const HostName HostName) -> NetConfig -> Const HostName NetConfig) -> Getting HostName KafkaConfig HostName forall b c a. (b -> c) -> (a -> b) -> a -> c . (HostName -> Const HostName HostName) -> NetConfig -> Const HostName NetConfig Lens' NetConfig HostName port) , (HostName base HostName -> ShowS forall a. [a] -> [a] -> [a] ++ HostName "KAFKA_TOPIC") HostName -> HostName -> EnvVar forall a. Var a => HostName -> a -> EnvVar .= (KafkaConfig conf KafkaConfig -> Getting HostName KafkaConfig HostName -> HostName forall s a. s -> Getting a s a -> a ^. Getting HostName KafkaConfig HostName Lens' KafkaConfig HostName kafkaTopic) , (HostName base HostName -> ShowS forall a. [a] -> [a] -> [a] ++ HostName "KAFKA_CON_GROUP") HostName -> HostName -> EnvVar forall a. Var a => HostName -> a -> EnvVar .= (KafkaConfig conf KafkaConfig -> Getting HostName KafkaConfig HostName -> HostName forall s a. s -> Getting a s a -> a ^. Getting HostName KafkaConfig HostName Lens' KafkaConfig HostName kafkaConGroup)] writeConf ConnectType t (ConnMQTTConfig MQTTConfig conf) = let base :: HostName base = HostName "STRIOT_" HostName -> ShowS forall a. [a] -> [a] -> [a] ++ ConnectType -> HostName forall a. Show a => a -> HostName show ConnectType t HostName -> ShowS forall a. [a] -> [a] -> [a] ++ HostName "_" in [ (HostName base HostName -> ShowS forall a. [a] -> [a] -> [a] ++ HostName "TYPE") HostName -> HostName -> EnvVar forall a. Var a => HostName -> a -> EnvVar .= HostName "MQTT" , (HostName base HostName -> ShowS forall a. [a] -> [a] -> [a] ++ HostName "HOST") HostName -> HostName -> EnvVar forall a. Var a => HostName -> a -> EnvVar .= (MQTTConfig conf MQTTConfig -> Getting HostName MQTTConfig HostName -> HostName forall s a. s -> Getting a s a -> a ^. (NetConfig -> Const HostName NetConfig) -> MQTTConfig -> Const HostName MQTTConfig Lens' MQTTConfig NetConfig mqttConn ((NetConfig -> Const HostName NetConfig) -> MQTTConfig -> Const HostName MQTTConfig) -> ((HostName -> Const HostName HostName) -> NetConfig -> Const HostName NetConfig) -> Getting HostName MQTTConfig HostName forall b c a. (b -> c) -> (a -> b) -> a -> c . (HostName -> Const HostName HostName) -> NetConfig -> Const HostName NetConfig Lens' NetConfig HostName host) , (HostName base HostName -> ShowS forall a. [a] -> [a] -> [a] ++ HostName "PORT") HostName -> HostName -> EnvVar forall a. Var a => HostName -> a -> EnvVar .= (MQTTConfig conf MQTTConfig -> Getting HostName MQTTConfig HostName -> HostName forall s a. s -> Getting a s a -> a ^. (NetConfig -> Const HostName NetConfig) -> MQTTConfig -> Const HostName MQTTConfig Lens' MQTTConfig NetConfig mqttConn ((NetConfig -> Const HostName NetConfig) -> MQTTConfig -> Const HostName MQTTConfig) -> ((HostName -> Const HostName HostName) -> NetConfig -> Const HostName NetConfig) -> Getting HostName MQTTConfig HostName forall b c a. (b -> c) -> (a -> b) -> a -> c . (HostName -> Const HostName HostName) -> NetConfig -> Const HostName NetConfig Lens' NetConfig HostName port) , (HostName base HostName -> ShowS forall a. [a] -> [a] -> [a] ++ HostName "MQTT_TOPIC") HostName -> HostName -> EnvVar forall a. Var a => HostName -> a -> EnvVar .= (MQTTConfig conf MQTTConfig -> Getting HostName MQTTConfig HostName -> HostName forall s a. s -> Getting a s a -> a ^. Getting HostName MQTTConfig HostName Lens' MQTTConfig HostName mqttTopic)] instance FromEnv StriotConfig where fromEnv :: Maybe StriotConfig -> Parser StriotConfig fromEnv Maybe StriotConfig _ = HostName -> ConnectionConfig -> ConnectionConfig -> Int -> StriotConfig StriotConfig (HostName -> ConnectionConfig -> ConnectionConfig -> Int -> StriotConfig) -> Parser HostName -> Parser (ConnectionConfig -> ConnectionConfig -> Int -> StriotConfig) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> HostName -> Parser (Maybe HostName) forall a. Var a => HostName -> Parser (Maybe a) envMaybe HostName "STRIOT_NODE_NAME" Parser (Maybe HostName) -> HostName -> Parser HostName forall a. Parser (Maybe a) -> a -> Parser a .!= HostName "striot" Parser (ConnectionConfig -> ConnectionConfig -> Int -> StriotConfig) -> Parser ConnectionConfig -> Parser (ConnectionConfig -> Int -> StriotConfig) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> ConnectType -> Parser ConnectionConfig readConf ConnectType INGRESS Parser (ConnectionConfig -> Int -> StriotConfig) -> Parser ConnectionConfig -> Parser (Int -> StriotConfig) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> ConnectType -> Parser ConnectionConfig readConf ConnectType EGRESS Parser (Int -> StriotConfig) -> Parser Int -> Parser StriotConfig forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> HostName -> Parser (Maybe Int) forall a. Var a => HostName -> Parser (Maybe a) envMaybe HostName "STRIOT_CHAN_SIZE" Parser (Maybe Int) -> Int -> Parser Int forall a. Parser (Maybe a) -> a -> Parser a .!= Int 10 readConf :: ConnectType -> Parser ConnectionConfig readConf :: ConnectType -> Parser ConnectionConfig readConf ConnectType t = do let base :: HostName base = HostName "STRIOT_" HostName -> ShowS forall a. [a] -> [a] -> [a] ++ ConnectType -> HostName forall a. Show a => a -> HostName show ConnectType t HostName -> ShowS forall a. [a] -> [a] -> [a] ++ HostName "_" HostName p <- HostName -> Parser HostName forall a. Var a => HostName -> Parser a env (HostName base HostName -> ShowS forall a. [a] -> [a] -> [a] ++ HostName "TYPE") case HostName p of HostName "TCP" -> TCPConfig -> ConnectionConfig ConnTCPConfig (TCPConfig -> ConnectionConfig) -> Parser TCPConfig -> Parser ConnectionConfig forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> (NetConfig -> TCPConfig TCPConfig (NetConfig -> TCPConfig) -> Parser NetConfig -> Parser TCPConfig forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> HostName -> Parser NetConfig nc HostName base) HostName "KAFKA" -> KafkaConfig -> ConnectionConfig ConnKafkaConfig (KafkaConfig -> ConnectionConfig) -> Parser KafkaConfig -> Parser ConnectionConfig forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> (NetConfig -> HostName -> HostName -> KafkaConfig KafkaConfig (NetConfig -> HostName -> HostName -> KafkaConfig) -> Parser NetConfig -> Parser (HostName -> HostName -> KafkaConfig) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> HostName -> Parser NetConfig nc HostName base Parser (HostName -> HostName -> KafkaConfig) -> Parser HostName -> Parser (HostName -> KafkaConfig) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> HostName -> Parser HostName forall a. Var a => HostName -> Parser a env (HostName base HostName -> ShowS forall a. [a] -> [a] -> [a] ++ HostName "KAFKA_TOPIC") Parser (HostName -> KafkaConfig) -> Parser HostName -> Parser KafkaConfig forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> HostName -> Parser HostName forall a. Var a => HostName -> Parser a env (HostName base HostName -> ShowS forall a. [a] -> [a] -> [a] ++ HostName "KAFKA_CON_GROUP")) HostName "MQTT" -> MQTTConfig -> ConnectionConfig ConnMQTTConfig (MQTTConfig -> ConnectionConfig) -> Parser MQTTConfig -> Parser ConnectionConfig forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> (NetConfig -> HostName -> MQTTConfig MQTTConfig (NetConfig -> HostName -> MQTTConfig) -> Parser NetConfig -> Parser (HostName -> MQTTConfig) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> HostName -> Parser NetConfig nc HostName base Parser (HostName -> MQTTConfig) -> Parser HostName -> Parser MQTTConfig forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> HostName -> Parser HostName forall a. Var a => HostName -> Parser a env (HostName base HostName -> ShowS forall a. [a] -> [a] -> [a] ++ HostName "MQTT_TOPIC")) nc :: String -> Parser NetConfig nc :: HostName -> Parser NetConfig nc HostName base = HostName -> HostName -> NetConfig NetConfig (HostName -> HostName -> NetConfig) -> Parser HostName -> Parser (HostName -> NetConfig) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> HostName -> Parser HostName forall a. Var a => HostName -> Parser a env (HostName base HostName -> ShowS forall a. [a] -> [a] -> [a] ++ HostName "HOST") Parser (HostName -> NetConfig) -> Parser HostName -> Parser NetConfig forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> HostName -> Parser HostName forall a. Var a => HostName -> Parser a env (HostName base HostName -> ShowS forall a. [a] -> [a] -> [a] ++ HostName "PORT") newtype StriotApp a = StriotApp { forall a. StriotApp a -> ReaderT StriotConfig IO a unApp :: ReaderT StriotConfig IO a } deriving ( (forall a b. (a -> b) -> StriotApp a -> StriotApp b) -> (forall a b. a -> StriotApp b -> StriotApp a) -> Functor StriotApp forall a b. a -> StriotApp b -> StriotApp a forall a b. (a -> b) -> StriotApp a -> StriotApp b forall (f :: * -> *). (forall a b. (a -> b) -> f a -> f b) -> (forall a b. a -> f b -> f a) -> Functor f <$ :: forall a b. a -> StriotApp b -> StriotApp a $c<$ :: forall a b. a -> StriotApp b -> StriotApp a fmap :: forall a b. (a -> b) -> StriotApp a -> StriotApp b $cfmap :: forall a b. (a -> b) -> StriotApp a -> StriotApp b Functor, Functor StriotApp Functor StriotApp -> (forall a. a -> StriotApp a) -> (forall a b. StriotApp (a -> b) -> StriotApp a -> StriotApp b) -> (forall a b c. (a -> b -> c) -> StriotApp a -> StriotApp b -> StriotApp c) -> (forall a b. StriotApp a -> StriotApp b -> StriotApp b) -> (forall a b. StriotApp a -> StriotApp b -> StriotApp a) -> Applicative StriotApp forall a. a -> StriotApp a forall a b. StriotApp a -> StriotApp b -> StriotApp a forall a b. StriotApp a -> StriotApp b -> StriotApp b forall a b. StriotApp (a -> b) -> StriotApp a -> StriotApp b forall a b c. (a -> b -> c) -> StriotApp a -> StriotApp b -> StriotApp c forall (f :: * -> *). Functor f -> (forall a. a -> f a) -> (forall a b. f (a -> b) -> f a -> f b) -> (forall a b c. (a -> b -> c) -> f a -> f b -> f c) -> (forall a b. f a -> f b -> f b) -> (forall a b. f a -> f b -> f a) -> Applicative f <* :: forall a b. StriotApp a -> StriotApp b -> StriotApp a $c<* :: forall a b. StriotApp a -> StriotApp b -> StriotApp a *> :: forall a b. StriotApp a -> StriotApp b -> StriotApp b $c*> :: forall a b. StriotApp a -> StriotApp b -> StriotApp b liftA2 :: forall a b c. (a -> b -> c) -> StriotApp a -> StriotApp b -> StriotApp c $cliftA2 :: forall a b c. (a -> b -> c) -> StriotApp a -> StriotApp b -> StriotApp c <*> :: forall a b. StriotApp (a -> b) -> StriotApp a -> StriotApp b $c<*> :: forall a b. StriotApp (a -> b) -> StriotApp a -> StriotApp b pure :: forall a. a -> StriotApp a $cpure :: forall a. a -> StriotApp a Applicative, Applicative StriotApp Applicative StriotApp -> (forall a b. StriotApp a -> (a -> StriotApp b) -> StriotApp b) -> (forall a b. StriotApp a -> StriotApp b -> StriotApp b) -> (forall a. a -> StriotApp a) -> Monad StriotApp forall a. a -> StriotApp a forall a b. StriotApp a -> StriotApp b -> StriotApp b forall a b. StriotApp a -> (a -> StriotApp b) -> StriotApp b forall (m :: * -> *). Applicative m -> (forall a b. m a -> (a -> m b) -> m b) -> (forall a b. m a -> m b -> m b) -> (forall a. a -> m a) -> Monad m return :: forall a. a -> StriotApp a $creturn :: forall a. a -> StriotApp a >> :: forall a b. StriotApp a -> StriotApp b -> StriotApp b $c>> :: forall a b. StriotApp a -> StriotApp b -> StriotApp b >>= :: forall a b. StriotApp a -> (a -> StriotApp b) -> StriotApp b $c>>= :: forall a b. StriotApp a -> (a -> StriotApp b) -> StriotApp b Monad, MonadReader StriotConfig, Monad StriotApp Monad StriotApp -> (forall a. IO a -> StriotApp a) -> MonadIO StriotApp forall a. IO a -> StriotApp a forall (m :: * -> *). Monad m -> (forall a. IO a -> m a) -> MonadIO m liftIO :: forall a. IO a -> StriotApp a $cliftIO :: forall a. IO a -> StriotApp a MonadIO ) data ConnectType = INGRESS | EGRESS deriving (Int -> ConnectType -> ShowS [ConnectType] -> ShowS ConnectType -> HostName (Int -> ConnectType -> ShowS) -> (ConnectType -> HostName) -> ([ConnectType] -> ShowS) -> Show ConnectType forall a. (Int -> a -> ShowS) -> (a -> HostName) -> ([a] -> ShowS) -> Show a showList :: [ConnectType] -> ShowS $cshowList :: [ConnectType] -> ShowS show :: ConnectType -> HostName $cshow :: ConnectType -> HostName showsPrec :: Int -> ConnectType -> ShowS $cshowsPrec :: Int -> ConnectType -> ShowS Show) data ConnectProtocol = TCP | KAFKA | MQTT