abci.host.middleware

Utility functions for transforming ABCI handler functions. All middleware assumes asynchronous handler functions, excepting wrap-synchronous.

default-response

(default-response v & [{envelop? :envelop?, :or {envelop? true}}])

Convenience. Return the default response for the given request keyword, the :stickler/msg value of the given map, or the :stickler/msg key of its :stickler.one-of/value, when enveloped.

Result will be stripped of its :abci/Response envelope when not :envelop?.

(default-response :abci/RequestDeliverTx)
(default-response {:stickler/msg :abci/RequestDeliverTx ...})
(default-response {:stickler/msg          :abci/Request
                   :stickler.one-of/value :deliver-tx
                   :deliver-tx            {:stickler/msg :abci/RequestDeliverTx ...}})

wrap-code-keywords

(wrap-code-keywords f)

Wrap f such that the structure its deferred resolves to is walked, substituting keywords in the abci.code namespace (:abci.code/ok, :abci.code/error) with the corresponding numbers (0, 1).

wrap-default

(wrap-default f & [opts])

If the deferred returned by f resolves to ::default, substitute it for a request-appropriate success response.

If opts contains a :predicate key, its value will be used over (partial identical? ::default) when determining whether to substitute a return value.

wrap-envelope

(wrap-envelope f)

Use both wrap-request-envelope and wrap-response-envelope with their default configuration.

wrap-prewalk-replace

(wrap-prewalk-replace f substitutions)

Wrap f such that the structure its deferred resolves to is passed to walk/prewalk-replace, with the given substitutions map.

wrap-request-envelope

(wrap-request-envelope f & [{lift-key? :lift-key?, :or {lift-key? #{:abci.host/conn}}}])

Wrap f such that it receives the :stickler.one-of/value map for each incoming :abci/Request, rather than the request map itself.

Pass-through values which don’t appear to be enveloped.

wrap-response-envelope

(wrap-response-envelope f & [{lift-key? :lift-key?, :or {lift-key? nil}}])

Wrap f such that its eventual result is wrapped in an :abci/Response.

Pass-through values which appear enveloped.

wrap-synchronous

(wrap-synchronous f & [opts])

Wrap f such that calls to it are initiated from a worker thread, using future-with. The wrapped function will always return a deferred.

The default executor may be overridden by providing :executor in opts.