From e2942e38b9370f7146d0cc8917bda938986f9dcd Mon Sep 17 00:00:00 2001 From: 1computer1 Date: Tue, 16 Jun 2020 22:37:38 -0400 Subject: [PATCH] style/refactor --- src/Myriad.hs | 2 +- src/Myriad/Config.hs | 50 ++++++++++++++++++++++---------------------- src/Myriad/Core.hs | 2 +- src/Myriad/Docker.hs | 6 +++--- src/Myriad/Server.hs | 20 +++++++++++------- 5 files changed, 43 insertions(+), 37 deletions(-) diff --git a/src/Myriad.hs b/src/Myriad.hs index b93b782..439f46f 100644 --- a/src/Myriad.hs +++ b/src/Myriad.hs @@ -8,8 +8,8 @@ import Data.String.Conversions import Network.Wai.Handler.Warp -import Myriad.Core import Myriad.Config +import Myriad.Core import Myriad.Docker import Myriad.Server diff --git a/src/Myriad/Config.hs b/src/Myriad/Config.hs index be4cc84..9e92818 100644 --- a/src/Myriad/Config.hs +++ b/src/Myriad/Config.hs @@ -6,9 +6,9 @@ module Myriad.Config ) where import qualified Data.ByteString.Lazy as BL -import Data.Maybe +import Data.Maybe import qualified Data.Text as T -import Data.YAML +import Data.YAML type LanguageName = T.Text @@ -29,26 +29,36 @@ data Language = Language , retries :: Int } deriving (Show) +readConfig :: FilePath -> IO Config +readConfig = fmap fromRawConfig . readRawConfig + +readRawConfig :: FilePath -> IO RawConfig +readRawConfig f = do + x <- BL.readFile f + case decode1 x of + Left (pos, e) -> error $ prettyPosWithSource pos x e + Right y -> pure y + fromRawConfig :: RawConfig -> Config -fromRawConfig (r@RawConfig { rawLanguages, rawDefaultLanguage }) = +fromRawConfig r = Config - { languages = map f rawLanguages + { languages = map (fromRawLanguage $ rawDefaultLanguage r) $ rawLanguages r , buildConcurrently = rawBuildConcurrently r , prepareContainers = rawPrepareContainers r , cleanupInterval = rawCleanupInterval r , port = rawPort r } - where - f :: RawLanguage -> Language - f l = - Language - { name = rawName l - , memory = fromMaybe (defMemory rawDefaultLanguage) (rawMemory l) - , cpus = fromMaybe (defCpus rawDefaultLanguage) (rawCpus l) - , timeout = fromMaybe (defTimeout rawDefaultLanguage) (rawTimeout l) - , concurrent = fromMaybe (defConcurrent rawDefaultLanguage) (rawConcurrent l) - , retries = fromMaybe (defRetries rawDefaultLanguage) (rawRetries l) - } + +fromRawLanguage :: DefaultLanguage -> RawLanguage -> Language +fromRawLanguage d l = + Language + { name = rawName l + , memory = fromMaybe (defMemory d) (rawMemory l) + , cpus = fromMaybe (defCpus d) (rawCpus l) + , timeout = fromMaybe (defTimeout d) (rawTimeout l) + , concurrent = fromMaybe (defConcurrent d) (rawConcurrent l) + , retries = fromMaybe (defRetries d) (rawRetries l) + } data RawConfig = RawConfig { rawLanguages :: [RawLanguage] @@ -101,13 +111,3 @@ instance FromYAML RawLanguage where <*> m .:? "timeout" <*> m .:? "concurrent" <*> m .:? "retries" - -readConfig :: FilePath -> IO Config -readConfig = fmap fromRawConfig . readRawConfig - -readRawConfig :: FilePath -> IO RawConfig -readRawConfig f = do - x <- BL.readFile f - case decode1 x of - Left (pos, e) -> error $ prettyPosWithSource pos x e - Right y -> pure y diff --git a/src/Myriad/Core.hs b/src/Myriad/Core.hs index 9fea144..55b6092 100644 --- a/src/Myriad/Core.hs +++ b/src/Myriad/Core.hs @@ -27,7 +27,7 @@ import Control.Monad.Writer import qualified Data.ByteString.Lazy as BL import qualified Data.Map.Strict as M -import Data.Snowflake +import Data.Snowflake import qualified Data.Text as T import Control.Concurrent.MVar.Lifted diff --git a/src/Myriad/Docker.hs b/src/Myriad/Docker.hs index 33b3492..c92f31b 100644 --- a/src/Myriad/Docker.hs +++ b/src/Myriad/Docker.hs @@ -12,8 +12,8 @@ module Myriad.Docker import Control.Monad.Reader import qualified Data.Map.Strict as M -import Data.Snowflake -import Data.String.Conversions +import Data.Snowflake +import Data.String.Conversions import Control.Concurrent.Async.Lifted import Control.Concurrent.Lifted (fork, threadDelay) @@ -23,8 +23,8 @@ import Control.Exception.Lifted import System.FilePath (()) import System.Process.Typed -import Myriad.Core import Myriad.Config +import Myriad.Core type Myriad = MyriadT IO diff --git a/src/Myriad/Server.hs b/src/Myriad/Server.hs index 1fb3151..e497dda 100644 --- a/src/Myriad/Server.hs +++ b/src/Myriad/Server.hs @@ -7,25 +7,31 @@ module Myriad.Server import Control.Monad.Except import Control.Monad.Reader -import Data.Aeson -import Data.List (find) +import Data.Aeson +import Data.List (find) import qualified Data.Map as M -import Data.String.Conversions +import Data.String.Conversions import qualified Data.Text as T -import GHC.Generics +import GHC.Generics import Control.Concurrent.Async.Lifted import Control.Concurrent.MVar.Lifted import Servant -import Myriad.Core import Myriad.Config +import Myriad.Core import Myriad.Docker type Myriad = MyriadT Handler -data EvalRequest = EvalRequest { language :: T.Text, code :: String } deriving (Generic, FromJSON) -data EvalResponse = EvalResponse { result :: T.Text } deriving (Generic, ToJSON) +data EvalRequest = EvalRequest + { language :: T.Text + , code :: String + } deriving (Generic, FromJSON) + +data EvalResponse = EvalResponse + { result :: T.Text + } deriving (Generic, ToJSON) type API = "languages" :> Get '[JSON] [T.Text]