module Evalso.Cruncher.FinalResult (FinalResult (..)) where
import Evalso.Cruncher.SandboxResult
import Control.Applicative
import Control.Monad (mzero)
import Data.Aeson
import Data.ByteString (ByteString)
import Data.Map (Map)
data FinalResult
= FinalResult
{
compile :: Maybe SandboxResult
, run :: Maybe SandboxResult
, outputFiles :: Map String ByteString
}
| NoSuchLanguage
| SELinuxNotEnforcing
deriving (Eq, Show)
instance ToJSON FinalResult where
toJSON (FinalResult compile' run' outputFiles') = object
[
"compile" .= compile'
, "run" .= run'
, "outputFiles" .= outputFiles'
]
toJSON (NoSuchLanguage) = object ["error" .= noSuchLanguageError]
where
noSuchLanguageError :: String
noSuchLanguageError = "We do not currently support that language"
toJSON (SELinuxNotEnforcing) = object ["error" .= selinuxError]
where
selinuxError :: String
selinuxError = "Internal security error - halting request"
instance FromJSON FinalResult where
parseJSON (Object v) = FinalResult <$>
v .: "compile"
<*> v .: "run"
<*> v .: "outputFiles"
parseJSON _ = mzero