Deprecations

0.8.0

Many functions, macros, and even namespaces deprecated in 0.7.0 have been fully removed in 0.8.0.

There have been significant changes to routing, including some non-backwards compatible changes to functions, namespaces, and protocols; these changes should only be concerning if you have previously implemented your own routing specifications or routers.

0.7.0

In most cases, Pedestal can now emit a warning the first time a deprecated function, macro, or other bit of functionality is used.

Example:

WARNING: io.pedestal.interceptor.chain/execute-only is deprecated and may be removed in a future release
Call stack: ... clojure.test/test-var -> clojure.test/test-var/fn -> io.pedestal.interceptor-test/fn -> io.pedestal.interceptor.chain/execute-only

The warning is followed by the last few stack frames leading up to the deprecated function, to assist you in finding the code that needs to be changed.

This output is printed to the console (standard error), and is not logged.

The following sections are a non-exhaustive list of code and functionality deprecated in 0.7.0 that may be removed in 0.8.0 or a later release:

Interceptors

Release 0.7.0 saw the introduction of the routes-from macro, a new and preferred way of supporting live code changes at the REPL.

Previously, it was possible to convert a function call into an interceptor; the point of this was to defer invoking the function until when the route specification was converted to a router (which can happen on every request when in development mode); however, this relied on the use of eval, and is of no real utility given the addition of development mode and live REPL reloading improvements, and so has been deprecated.

Normally, a function in an interceptor list is treated as a handler (rather than an interceptor). Alternately, a function with the :interceptor or :interceptorfn metadata would be invoked and expected to return an interceptor (or some other object that could be converted to an interceptor). This is termed a deferred interceptor and has also been deprecated.

Handler functions are not deprecated, and are quite useful.

Service

The io.pedestal.http.request.lazy and io.pedestal.http.request.zerocopy namespaces have been deprecated; neither is used by Pedestal.

Service Tools

The entire pedestal/pedestal.service-tools library has been deprecated.

Interceptor Chain

The execute-only function has been deprecated; it is not believed this function is used outside of Pedestal’s test suite. Removing it opens up some options for optimizing chain execution in a later release.

Likewise, the newly added queue function replaces accessing the interceptor execution queue using the :io.pedestal.interceptor.chain/queue key; this will also allow future optimizations to chain execution.

Tracing and Metrics

The namespace io.pedestal.interceptor.trace was deprecated along with many related functions and protocols in the io.pedestal.log namespace related to metrics and tracing; these have been replaced with a new library, pedestal.telemetry.

0.6.0

The entire io.pedestal.interceptor.helpers namespace was deprecated; this had been retained since 2016 for backwards compatibility.