module Webcrank.Internal.ResourceData where
import Control.Lens
import Control.Monad.Reader
import Data.ByteString (ByteString)
import Network.HTTP.Date
import Network.HTTP.Types
import Webcrank.Internal.Types
newResourceData :: ServerAPI m -> Resource m -> ResourceData m
newResourceData = ResourceData
callr
:: (MonadReader r m, HasResourceData r m)
=> (Resource m -> HaltT m b)
-> HaltT m b
callr = (view resourceDataResource >>=)
callr'
:: (MonadReader r m, HasResourceData r m)
=> (Resource m -> m b)
-> HaltT m b
callr' = lift . (view resourceDataResource >>=)
callr''
:: (MonadReader r m, HasResourceData r m)
=> (Resource m -> m b)
-> m b
callr'' = (view resourceDataResource >>=)
callAPI
:: (MonadTrans t, Monad m, MonadReader r (t m), HasResourceData r m)
=> (ServerAPI m -> m b)
-> t m b
callAPI f = view resourceDataServerAPI >>= lift . f
callAPI'
:: (MonadReader r m, HasResourceData r m)
=> (ServerAPI m -> m b)
-> m b
callAPI' f = view resourceDataServerAPI >>= f
getRequestMethod
:: (MonadTrans t, Monad m, MonadReader r (t m), HasResourceData r m)
=> t m Method
getRequestMethod = callAPI srvGetRequestMethod
getRequestMethod'
:: (MonadReader r m, HasResourceData r m)
=> m Method
getRequestMethod' = callAPI' srvGetRequestMethod
getRequestHeader
:: (MonadTrans t, Monad m, MonadReader r (t m), HasResourceData r m)
=> HeaderName
-> t m (Maybe ByteString)
getRequestHeader = callAPI . flip srvGetRequestHeader
getRequestTime
:: (MonadTrans t, Monad m, MonadReader r (t m), HasResourceData r m)
=> t m HTTPDate
getRequestTime = callAPI srvGetRequestTime
getRequestURI
:: (MonadTrans t, Monad m, MonadReader r (t m), HasResourceData r m)
=> t m ByteString
getRequestURI = callAPI srvGetRequestURI