Skip to content

Commit 43481b0

Browse files
committed
added an extra executable just for the server
1 parent edc8849 commit 43481b0

2 files changed

Lines changed: 93 additions & 0 deletions

File tree

poseidon-hs.cabal

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,17 @@ executable trident
5454
filepath, co-log
5555
other-modules: Paths_poseidon_hs
5656
default-language: Haskell2010
57+
58+
executable poseidon-server
59+
main-is: Main-server.hs
60+
hs-source-dirs: src-executables
61+
build-depends: base, poseidon-hs, optparse-applicative, sequence-formats>=1.6.1, bytestring,
62+
filepath, co-log
63+
other-modules: Paths_poseidon_hs
64+
default-language: Haskell2010
65+
ghc-options:
66+
-threaded
67+
-rtsopts
5768

5869
Test-Suite poseidon-tools-tests
5970
type: exitcode-stdio-1.0

src-executables/Main-server.hs

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
{-# LANGUAGE OverloadedStrings #-}
2+
3+
import Paths_poseidon_hs (version)
4+
import Poseidon.CLI.Trident.OptparseApplicativeParsers
5+
import Poseidon.CLI.Trident.Serve (ServeOptions (..),
6+
runServerMainThread)
7+
import Poseidon.Core.PoseidonVersion (showPoseidonVersion,
8+
validPoseidonVersions)
9+
import Poseidon.Core.Utils (ErrorLength (..),
10+
LogMode (..),
11+
PlinkPopNameMode (..),
12+
PoseidonException (..),
13+
TestMode,
14+
logError,
15+
renderPoseidonException,
16+
usePoseidonLogger)
17+
18+
import Control.Applicative ((<|>))
19+
import Control.Exception (catch)
20+
import Data.List (intercalate)
21+
import Data.Version (showVersion)
22+
import qualified Options.Applicative as OP
23+
import System.Exit (exitFailure)
24+
import System.IO (hPutStrLn,
25+
stderr)
26+
27+
data Options = Options
28+
{ _logMode :: LogMode
29+
, _testMode :: TestMode
30+
, _errLength :: ErrorLength
31+
, _plinkMode :: PlinkPopNameMode
32+
, _serveOptions :: ServeOptions
33+
}
34+
35+
main :: IO ()
36+
main = do
37+
hPutStrLn stderr renderVersion
38+
hPutStrLn stderr ""
39+
Options logMode testMode errLength plinkMode serveOptions <-
40+
OP.customExecParser (OP.prefs OP.showHelpOnEmpty) optParserInfo
41+
catch (usePoseidonLogger logMode testMode plinkMode errLength $ runServerMainThread serveOptions)
42+
(handler logMode testMode plinkMode errLength)
43+
where
44+
handler :: LogMode -> TestMode -> PlinkPopNameMode -> ErrorLength -> PoseidonException -> IO ()
45+
handler l t pm len e = do
46+
usePoseidonLogger l t pm len $ logError $ renderPoseidonException e
47+
exitFailure
48+
49+
optParserInfo :: OP.ParserInfo Options
50+
optParserInfo = OP.info
51+
(OP.helper <*> versionOption <*> optionsParser)
52+
( OP.briefDesc <> OP.progDesc "Poseidon webserver")
53+
54+
optionsParser :: OP.Parser Options
55+
optionsParser =
56+
Options
57+
<$> (parseLogMode <|> parseDebugMode)
58+
<*> parseTestMode
59+
<*> parseErrorLength
60+
<*> parseInputPlinkPopMode
61+
<*> serveOptParser
62+
63+
versionOption :: OP.Parser (a -> a)
64+
versionOption =
65+
OP.infoOption
66+
(showVersion version)
67+
(OP.long "version" <> OP.help "Show version number")
68+
69+
renderVersion :: String
70+
renderVersion =
71+
"poseidon-server v" ++ showVersion version ++ " for poseidon v" ++
72+
intercalate ", v" (map showPoseidonVersion validPoseidonVersions) ++ "\n" ++
73+
"https://poseidon-framework.github.io"
74+
75+
serveOptParser :: OP.Parser ServeOptions
76+
serveOptParser =
77+
ServeOptions
78+
<$> parseArchiveConfig
79+
<*> parseMaybeZipDir
80+
<*> parsePort
81+
<*> parseIgnoreChecksums
82+
<*> parseMaybeCertFiles

0 commit comments

Comments
 (0)