{-# LANGUAGE OverloadedStrings #-} module Terraform.HttpBackend.Pass.Run where import Data.Function ((&)) import qualified Network.Wai.Handler.Warp as Warp import Options.Generic import qualified Servant.Server as Servant import qualified Terraform.HttpBackend.Pass.Api as Api import Terraform.HttpBackend.Pass.App (runAppT) import Terraform.HttpBackend.Pass.Env (Env, mkEnv) import qualified Terraform.HttpBackend.Pass.Options as Options run :: IO () run :: IO () run = do Options opts <- forall (io :: * -> *) a. (MonadIO io, ParseRecord a) => Text -> io a getRecord Text "Terraform HTTP Backend using Pass and Git" let env :: Env env = Options -> Env mkEnv Options opts Port -> Application -> IO () Warp.run (Options -> Port Options.port Options opts) (forall api. HasServer api '[] => Proxy api -> Server api -> Application Servant.serve Proxy Api Api.api (Env -> ServerT Api Handler hoistServer Env env)) hoistServer :: Env -> Servant.ServerT Api.Api Servant.Handler hoistServer :: Env -> ServerT Api Handler hoistServer Env env = forall api (m :: * -> *) (n :: * -> *). HasServer api '[] => Proxy api -> (forall x. m x -> n x) -> ServerT api m -> ServerT api n Servant.hoistServer Proxy Api Api.api (forall (m :: * -> *) a. Env -> AppT m a -> m a runAppT Env env) forall (m :: * -> *). (Monad m, MonadPass m, MonadGit m) => ServerT Api m Api.server