# rivet_utils v2.7.0 - Table of Contents

Bespoke utilities for the Elixir Rivet Framework

## Modules

- [Rivet.Utils.Callbacks](Rivet.Utils.Callbacks.md): Contributor: Brandon Gillespie

- [Rivet.Utils.Cli](Rivet.Utils.Cli.md): Common calls across mix tasks

- [Rivet.Utils.Cli.Print](Rivet.Utils.Cli.Print.md): Command-Line helpers for stdout/stderr I/O

- [Rivet.Utils.Codes](Rivet.Utils.Codes.md): Contributor: Brandon Gillespie

- [Rivet.Utils.Criteria](Rivet.Utils.Criteria.md): Criteria is used for cursor based pagination.
- [Rivet.Utils.DateTime](Rivet.Utils.DateTime.md)
- [Rivet.Utils.Dig](Rivet.Utils.Dig.md): Contributor: Brandon Gillespie

- [Rivet.Utils.Ecto.Atom](Rivet.Utils.Ecto.Atom.md): Custom Type to support `:atom`
defmodule Post do
  use Ecto.Schema
  schema "posts" do
    field :atom_field, Ecto.Atom
  end
end
- [Rivet.Utils.Ecto.AtomKeymap](Rivet.Utils.Ecto.AtomKeymap.md): Convert map keys from strings to atoms, recursively, when pulling in from the Db.
- [Rivet.Utils.Ecto.Changeset](Rivet.Utils.Ecto.Changeset.md): extensions for ecto change sets
- [Rivet.Utils.Ecto.Errors](Rivet.Utils.Ecto.Errors.md): Helper module for working with ok/error tuples
- [Rivet.Utils.Ecto.MapSet](Rivet.Utils.Ecto.MapSet.md): Custom Type to support MapSet
- [Rivet.Utils.Ecto.Virtual](Rivet.Utils.Ecto.Virtual.md): Custom Type to support any virtual data.  Always serializes to nil, so when
including it as a field add virtual: true.
- [Rivet.Utils.Enum](Rivet.Utils.Enum.md): Contributor: Brandon Gillespie

- [Rivet.Utils.Errors](Rivet.Utils.Errors.md): Helper module for working with ok/error tuples

- [Rivet.Utils.Hash](Rivet.Utils.Hash.md): Helper module for password hashes

- [Rivet.Utils.Interval](Rivet.Utils.Interval.md): Make sure only one of a method callback is ever running.
- [Rivet.Utils.Interval.Tick](Rivet.Utils.Interval.Tick.md): Similar to Interval, but tick-driven, where it has a tick frequency which is
more frequent than the interval frequency -- allowing for interruptions to
the interval and the subsequent intervals to start from there forward.
- [Rivet.Utils.Interval.TickHF](Rivet.Utils.Interval.TickHF.md): High frequency interval tick - forced process state matching the interval's
desired structure (optimal tuple instead of dict). Runs as an independent
GenServer process.  Send "state data" into GenServer.start_link(state_data)
- [Rivet.Utils.JsonConfigProvider](Rivet.Utils.JsonConfigProvider.md): Derived from toml-elixir/Toml.Provider https://github.com/bitwalker/toml-elixir/blob/master/lib/provider.ex
and https://hexdocs.pm/elixir/Config.Provider.html#module-sample-config-provider
- [Rivet.Utils.LazyCache](Rivet.Utils.LazyCache.md): Hat tip to https://hex.pm/packages/lazy_cache

- [Rivet.Utils.List](Rivet.Utils.List.md): Contributor: Brandon Gillespie

- [Rivet.Utils.Math](Rivet.Utils.Math.md)
- [Rivet.Utils.Module](Rivet.Utils.Module.md)
- [Rivet.Utils.Network](Rivet.Utils.Network.md): Helper module for common type handling needs
- [Rivet.Utils.Puid](Rivet.Utils.Puid.md): Puid.generate/0 is included with the `use` statement below.  It generates 18 random characters.

- [Rivet.Utils.Puid.Bits](Rivet.Utils.Puid.Bits.md)
- [Rivet.Utils.Puid.Decoder](Rivet.Utils.Puid.Decoder.md)
- [Rivet.Utils.Puid.Encoder](Rivet.Utils.Puid.Encoder.md)
- [Rivet.Utils.RandChars](Rivet.Utils.RandChars.md)
- [Rivet.Utils.Ranges](Rivet.Utils.Ranges.md)
- [Rivet.Utils.Redact](Rivet.Utils.Redact.md): redact text based on common patterns for insecure data
- [Rivet.Utils.Tabular](Rivet.Utils.Tabular.md): converts list of keywords into text-based table
- [Rivet.Utils.Time](Rivet.Utils.Time.md): Contributor: Brandon Gillespie

- [Rivet.Utils.Title](Rivet.Utils.Title.md)
- [Rivet.Utils.UniformLogFormat](Rivet.Utils.UniformLogFormat.md): Provide custom log formatting that is friendly for both reading and indexing
either via ELK or splunk.

