git.iko.soy/typeable/request-track
on master help sign in
more docs
7a6c433Nick
request-track-servant/src/Web/Tracking/Servant/Types.hs+9
@@ -37,15 +37,22 @@ import Servant.Server.Internal
37-- type instance TrackingData RequestTracking = TrackingArg
37-- type instance TrackingData RequestTracking = TrackingArg
38--
38--
39-- trackingHandler :: ReqtrackingHandler (Maybe ReqtrackInfo) TrackingArg
39-- trackingHandler :: ReqtrackingHandler (Maybe ReqtrackInfo) TrackingArg
40+-- trackingHandler = mkReqtrackingHandler $ \mrti ->
41+-- case mrti of
42+-- Just rti -> ... -- Do something with ReqtrackInfo, return TrackingArg
43+-- Nothing -> ...
40--
44--
41-- @
45-- @
42data RequestTracking
46data RequestTracking
43
47
48+-- | See 'RequestTracking'
44type family TrackingData a
49type family TrackingData a
45
50
46-- | Same as above, except no argument is passed to a handler.
51-- | Same as above, except no argument is passed to a handler.
47data RequestTracking_
52data RequestTracking_
48
53
54+-- | Servant context handler used for processing 'ReqtrackInfo' before passing the result to endpoint handlers.
55+-- Use 'mkReqtrackingHandler' in your code instead of the constructor.
49newtype ReqtrackingHandler r o = ReqtrackingHandler { runReqtrackingHandler :: r -> Handler o
56newtype ReqtrackingHandler r o = ReqtrackingHandler { runReqtrackingHandler :: r -> Handler o
50 } deriving (Functor)
57 } deriving (Functor)
51
58
@@ -58,6 +65,7 @@ instance Monad (ReqtrackingHandler r) where
58 f >>= g = ReqtrackingHandler $ \r -> do a <- runReqtrackingHandler f r
65 f >>= g = ReqtrackingHandler $ \r -> do a <- runReqtrackingHandler f r
59 runReqtrackingHandler (g a) r
66 runReqtrackingHandler (g a) r
60
67
68+-- | Smart constructor to create 'ReqtrackingHandler'.
61mkReqtrackingHandler :: (Maybe ReqtrackInfo -> Handler o) -> ReqtrackingHandler (Maybe ReqtrackInfo) o
69mkReqtrackingHandler :: (Maybe ReqtrackInfo -> Handler o) -> ReqtrackingHandler (Maybe ReqtrackInfo) o
62mkReqtrackingHandler = ReqtrackingHandler
70mkReqtrackingHandler = ReqtrackingHandler
63
71
@@ -108,6 +116,7 @@ instance HasClient m api => HasClient m (RequestTracking_ :> api) where
108 hoistClientMonad pm Proxy f cl = hoistClientMonad pm (Proxy :: Proxy api) f cl
116 hoistClientMonad pm Proxy f cl = hoistClientMonad pm (Proxy :: Proxy api) f cl
109
117
110
118
119+-- | Headers list to use with 'Headers'. Currently unused.
111type ReqtrackHeaders = '[ Header RequestIdHdr ByteString
120type ReqtrackHeaders = '[ Header RequestIdHdr ByteString
112 , Header RequestLevelHdr Word
121 , Header RequestLevelHdr Word
113 , Header RequestSourceHdr ByteString
122 , Header RequestSourceHdr ByteString