Spectre.Projection behaviour (Spectre v0.3.0)

Copy Markdown View Source

Deterministic projection interface for canonical Definitions.

Projection identity binds the Definition Ref, generator ID/version, optional evidence digest, and generated content. A generator change is therefore observable even when two generator implementations emit equal content.

Summary

Functions

Generates the exact Audit projection.

Generates a projection with the supplied deterministic generator.

Generates a projection with explicit generator options.

Verifies the digest and Definition binding of an existing projection.

Types

t()

@type t() :: %Spectre.Projection{
  content: term(),
  definition_ref: Spectre.Definition.Ref.t(),
  digest: String.t(),
  generator_id: String.t(),
  generator_version: pos_integer(),
  input_evidence_digest: String.t() | nil
}

Callbacks

id()

@callback id() :: String.t()

project(t, keyword)

@callback project(
  Spectre.Definition.Canonical.t(),
  keyword()
) :: {:ok, term()} | {:error, term()}

version()

@callback version() :: pos_integer()

Functions

generate(canonical)

@spec generate(Spectre.Definition.Canonical.t()) :: {:ok, t()} | {:error, term()}

Generates the exact Audit projection.

generate(canonical, generator)

@spec generate(Spectre.Definition.Canonical.t(), module()) ::
  {:ok, t()} | {:error, term()}

Generates a projection with the supplied deterministic generator.

generate(canonical, generator, opts)

@spec generate(Spectre.Definition.Canonical.t(), module(), keyword()) ::
  {:ok, t()} | {:error, term()}

Generates a projection with explicit generator options.

verify(projection, canonical)

@spec verify(t(), Spectre.Definition.Canonical.t()) :: :ok | {:error, term()}

Verifies the digest and Definition binding of an existing projection.