{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE TemplateHaskell #-} module Main (main) where import qualified QueryImpl import Data.List (find, isPrefixOf) import Katip (Severity (..), closeScribes, logTM, ls) import KatipLogger (katipLogger, mkLogEnv, unliftKatip) import Network.GRPC.HTTP2.Encoding (Compression, gzip) import Network.Wai.Handler.Warp (Settings, defaultSettings, setPort) import Network.Wai.Handler.WarpTLS (TLSSettings, defaultTlsSettings) import SimpleLogger (simpleLogger) import qualified SubmitImpl import qualified SyncImpl import System.Environment (getArgs) import UnliftIO (MonadIO, bracket) import Utxorpc.Server (ServiceConfig (..), UtxorpcHandlers (UtxorpcHandlers), runUtxorpc) import qualified WatchImpl main :: IO () main = do args <- getArgs let port = maybe 3000 (read . drop 3) $ find ("-p=" `isPrefixOf`) args putStrLn $ "Starting server on port " ++ show port if "--katip" `elem` args then runKatipExample defaultTlsSettings (setPort port defaultSettings) [gzip] else runSimpleExample port runKatipExample :: TLSSettings -> Settings -> [Compression] -> IO () runKatipExample tlsSettings warpSettings compression = bracket mkLogEnv closeScribes $ \le -> do runUtxorpc $ config le where config le = ServiceConfig tlsSettings warpSettings (handlersImpl katipLogF) (Just katipLogger) (unliftKatip le) compression katipLogF str = $(logTM) InfoS (ls str) runSimpleExample :: Int -> IO () runSimpleExample port = do runUtxorpc $ ServiceConfig defaultTlsSettings (setPort port defaultSettings) (handlersImpl putStrLn) (Just simpleLogger) id [gzip] handlersImpl :: (MonadIO m) => (String -> m ()) -> UtxorpcHandlers m Int Int Int Int Int handlersImpl logF = UtxorpcHandlers (QueryImpl.handlerImpls logF) (SubmitImpl.handlerImpls logF) (SyncImpl.handlerImpls logF) (WatchImpl.handlerImpls logF)