In former versions of mount-lite the API gave you more fine-grained influence on what states are started or stopped when calling
stop. You could tell mount to
only start/stop certain states, or start/stop all states
except some. You could tell mount to determine the dependencies of a state more accurately by building a dependency graph using the tools.namespace library.
These features have been removed from the API, for various reasons. However, an extension point is available, in case you want these or other features that influence what is started or stopped. Future versions of mount-lite may even provide implementations for these, using the extension point discussed below. In any case, the core API and implementation is not affected by these features and can be kept simple and lite.
The root binding of the dynamic
*states* var is used by the internals of mount-lite to keep track of what global
defstates have been defined, and in what order. The root binding is an atom of namespaced keywords, which can be resolved back to the
defstate vars. These keywords are automatically pruned, in case some
defstate may have been unmapped.
stop functions read from the atom in the
*states* var, to determine what states are available for starting or stopping. By binding the
*states* var to an atom of your own, holding a different set of namespaced keywords, you effectively influence the
stop function in this regard.
Do not fiddle with the root binding of the
*states* var directly!
For example, if you’d really need the
only option back, you could do the following:
(defmacro with-only [states & body] `(binding [*states* (atom (map var->keyword ~states))] ~@body))