Behaviour for calling applications to implement in order to use Proton.
error() :: any()
path() :: any()
spec() :: map()
check(spec()) :: {:ok, spec()} | {:error, error()}
filter(spec()) :: {:ok, spec()} | {:error, error()}
find!(path()) :: spec()