module Canteven.Listen.HTTP (
ListenerConfig(..),
ListenHTTPConfig(..),
Scheme(..),
WithListenHTTPConfig(..),
) where
import Data.Aeson (FromJSON(parseJSON), withObject, (.:))
import GHC.Generics (Generic)
newtype ListenHTTPConfig =
ListenHTTPConfig {
listeners :: [ListenerConfig]
} deriving (Generic)
instance FromJSON ListenHTTPConfig where
parseJSON = withObject "WithListenHTTPConfig" $ \obj ->
ListenHTTPConfig <$> obj .: "listen"
data WithListenHTTPConfig userConfig =
WithListenHTTPConfig {
listenConfig :: ListenHTTPConfig,
userConfig :: userConfig
} deriving (Generic)
instance (FromJSON c) => FromJSON (WithListenHTTPConfig c) where
parseJSON v = do
listenConfig <- parseJSON v
userConfig <- parseJSON v
return WithListenHTTPConfig {
listenConfig,
userConfig
}
data ListenerConfig =
ListenerConfig {
scheme :: Scheme,
port :: Int,
cert :: Maybe FilePath,
key :: Maybe FilePath
} deriving (Generic, Eq, Show)
instance FromJSON ListenerConfig
data Scheme = HTTP | HTTPS
deriving (Generic, Eq, Show)
instance FromJSON Scheme