resx v0.1.0 Resx.Resource.Reference.Integrity

The integrity of a resource.

%Resx.Resource.Reference.Integrity{
    checksum: { :crc32, 3829359344 },
    timestamp: DateTime.utc_now
}

Link to this section Summary

Functions

Compare two integrities

Link to this section Types

Link to this type algo()
algo() :: atom()
Link to this type checksum()
checksum() :: {algo(), any()}
Link to this type t()
t() :: %Resx.Resource.Reference.Integrity{
  checksum: nil | checksum(),
  timestamp: DateTime.t()
}

Link to this section Functions

Link to this function compare(integrity1, integrity2)
compare(t(), t()) ::
  {checksum :: nil | boolean(), timestamp :: :lt | :eq | :gt}

Compare two integrities.

The result is a tuple with the first element being the result of the comparison between the two checksums. If the checksums are equal then it will be true, if the checksum algorithms are the same but the hashes are not equal it will be false, otherwise if the checksums cannot be compared it will be nil. The second element will be the result of a DateTime.compare/2 on the two timestamps.

iex> Resx.Resource.Reference.Integrity.compare(%Resx.Resource.Reference.Integrity{ timestamp: DateTime.from_unix!(0) }, %Resx.Resource.Reference.Integrity{ timestamp: DateTime.from_unix!(0) })
{ nil, :eq }

iex> Resx.Resource.Reference.Integrity.compare(%Resx.Resource.Reference.Integrity{ checksum: { :foo, 1 }, timestamp: DateTime.from_unix!(1) }, %Resx.Resource.Reference.Integrity{ checksum: { :foo, 1 }, timestamp: DateTime.from_unix!(0) })
{ true, :gt }

iex> Resx.Resource.Reference.Integrity.compare(%Resx.Resource.Reference.Integrity{ checksum: { :foo, 2 }, timestamp: DateTime.from_unix!(0) }, %Resx.Resource.Reference.Integrity{ checksum: { :foo, 1 }, timestamp: DateTime.from_unix!(1) })
{ false, :lt }

iex> Resx.Resource.Reference.Integrity.compare(%Resx.Resource.Reference.Integrity{ checksum: { :bar, 1 }, timestamp: DateTime.from_unix!(0) }, %Resx.Resource.Reference.Integrity{ checksum: { :foo, 1 }, timestamp: DateTime.from_unix!(0) })
{ nil, :eq }