core.utilities

## Package core.utilities

### Types

ANSIProgressRenderer | `object ANSIProgressRenderer` Knows how to render a ProgressTracker to the terminal using coloured, emoji-fied output. Useful when writing small command line tools, demos, tests etc. Just set the progressTracker field and it will go ahead and start drawing if the terminal supports it. Otherwise it just prints out the name of the step whenever it changes.
AddOrRemove | `enum class AddOrRemove` Enum for when adding/removing something, for example adding or removing an entry in a directory.
AffinityExecutor | `interface AffinityExecutor : Executor` An extended executor interface that supports thread affinity assertions and short circuiting. This can be useful for ensuring code runs on the right thread, and also for unit testing.
BriefLogFormatter | `class BriefLogFormatter : Formatter` A Java logging formatter that writes more compact output than the default.
Emoji | `object Emoji` A simple wrapper class that contains icons and support for printing them only when were connected to a terminal.
JsonSupport | `object JsonSupport` Utilities and serialisers for working with JSON representations of basic types. This adds Jackson support for the java.time API, some core types, and Kotlin data classes.
ProgressTracker | `class ProgressTracker` A progress tracker helps surface information about the progress of an operation to a user interface or API of some kind. It lets you define a set of <emph>steps</emph> that represent an operation. A step is represented by an object (typically a singleton).
RecordingMap | `class RecordingMap<K, V> : MutableMap<K, V>` A RecordingMap wraps a regular Map<K, V> and records the sequence of gets and puts to it. This is useful in white box unit tests to ensure that code is accessing a data store as much as you expect.
UntrustworthyData | `class UntrustworthyData<T>` A small utility to approximate taint tracking: if a method gives you back one of these, it means the data came from a remote source that may be incentivised to pass us junk that violates basic assumptions and thus must be checked first. The wrapper helps you to avoid forgetting this vital step. Things you might want to check are:

### Functions

loggerFor | `fun <T : Any> loggerFor(): <ERROR CLASS>`
trace | `fun <ERROR CLASS>.trace(msg: () -> String): Unit`