module Magicbane (
module X
, module Magicbane
) where
import ClassyPrelude as X hiding (fromString, Handler, Concurrently, runConcurrently, concurrently, mapConcurrently, async, asyncWithUnmask, asyncBound, asyncOn, asyncOnWithUnmask, race, race_, withAsync, withAsyncBound, withAsyncOn, withAsyncOnWithUnmask, withAsyncWithUnmask, cancel, cancelWith)
import Control.Concurrent.Async.Lifted as X
import Control.Error.Util as X hiding (hoistEither, (??), tryIO, bool)
import Control.Monad.Trans.Control as X
import Control.Monad.Trans.Either as X
import Control.Monad.Trans.Maybe as X hiding (liftListen, liftPass, liftCallCC)
import qualified System.Envy
import System.Envy as X hiding ((.=), (.!=), decode)
import qualified System.IO
import Data.Default as X
import Data.List.Split as X (splitOn)
import Data.String.Conversions as X hiding ((<>))
import Data.String.Conversions.Monomorphic as X
import Data.Aeson as X
import Data.Aeson.QQ as X
import Text.RawString.QQ as X
import Network.URI as X
import qualified Network.HTTP.Link
import Network.HTTP.Link as X hiding (Link)
import Network.HTTP.Types as X hiding (Header)
import Network.Wai as X (Application, Middleware)
import Network.Wai.Cli as X hiding (port)
import Magicbane.App as X hiding (Or)
import Magicbane.Logging as X
import Magicbane.Metrics as X
import Magicbane.Validation as X
import Magicbane.HTTPClient as X
import Magicbane.Util as X
type Host = Header "Host" Text
type Form = ReqBody '[FormUrlEncoded] [(Text, Text)]
type HTTPLink = Network.HTTP.Link.Link
type WithLink α = (Headers '[Header "Link" [HTTPLink]] α)
instance (Default α) ⇒ DefConfig α where
defConfig = def
decodeEnvy = System.Envy.decode
withEnvConfig ∷ FromEnv α ⇒ (α → IO ()) → IO ()
withEnvConfig a = decodeEnv >>= \case
Left e → hPutStrLn stderr ("error reading env: " ++ e)
Right c → a c
hPutStrLn h s = liftIO $ System.IO.hPutStrLn h s
type BasicContext = (ModHttpClient, ModLogger)
type BasicApp α = MagicbaneApp BasicContext α
newBasicContext ∷ IO BasicContext
newBasicContext = do
http ← newHttpClient
(_, logg) ← newLogger $ LogStdout defaultBufSize
return (http, logg)