# `GeoGenius.ReleaseArtifacts.Artifact`
[🔗](https://github.com/agoodway/geo_genius/blob/main/lib/geo_genius/release_artifacts.ex#L1)

One artifact a release composes, together with where it resolves to on this
machine.

`:path` is where the artifact belongs in the configured cache, whether or not
anything is there: `:present?` is what says a file is actually sitting at it.
Reporting the two separately is what lets a caller name the path an operator
has to place a licensed file at, rather than only reporting that something is
missing.

Every other field restates the catalog row the artifact was read from, so a
caller that has this struct never has to go back to the catalog for the
checksum it should verify against or the source release it came from.

# `t`

```elixir
@type t() :: %GeoGenius.ReleaseArtifacts.Artifact{
  artifact_id: Ecto.UUID.t(),
  cache_key: String.t(),
  collection_key: String.t(),
  expected_bytes: integer(),
  expected_sha256: String.t(),
  format: String.t(),
  logical_name: String.t(),
  metadata: map(),
  observed_bytes: integer() | nil,
  observed_sha256: String.t() | nil,
  operator_supplied: boolean(),
  path: Path.t(),
  present?: boolean(),
  release_id: Ecto.UUID.t(),
  source_key: String.t(),
  source_release_id: Ecto.UUID.t(),
  source_release_key: String.t(),
  url: String.t() | nil,
  validated_at: DateTime.t() | nil
}
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
