ExCredstash.Version (ExCredstash v0.1.1)

View Source

Version number handling for credstash secrets.

Credstash versions are stored as zero-padded strings in DynamoDB to ensure correct lexicographical sorting. Versions are padded to 19 characters (the length of the maximum 64-bit integer).

Summary

Functions

Get the next version number given the current highest version.

Pad an integer version to PAD_LEN (19) characters.

Returns the padding length constant.

Parse a padded version string back to an integer.

Parse a version string, raising on error.

Check if a string is a valid padded version.

Functions

next(current_version)

@spec next(non_neg_integer()) :: {non_neg_integer(), String.t()}

Get the next version number given the current highest version.

Examples

iex> ExCredstash.Version.next(0)
{1, "0000000000000000001"}

iex> ExCredstash.Version.next(5)
{6, "0000000000000000006"}

pad(version)

@spec pad(non_neg_integer()) :: String.t()

Pad an integer version to PAD_LEN (19) characters.

Examples

iex> ExCredstash.Version.pad(1)
"0000000000000000001"

iex> ExCredstash.Version.pad(42)
"0000000000000000042"

iex> ExCredstash.Version.pad(9223372036854775807)
"9223372036854775807"

pad_length()

@spec pad_length() :: pos_integer()

Returns the padding length constant.

Examples

iex> ExCredstash.Version.pad_length()
19

parse(version_string)

@spec parse(String.t()) :: {:ok, non_neg_integer()} | {:error, :invalid_version}

Parse a padded version string back to an integer.

Examples

iex> ExCredstash.Version.parse("0000000000000000001")
{:ok, 1}

iex> ExCredstash.Version.parse("0000000000000000042")
{:ok, 42}

iex> ExCredstash.Version.parse("invalid")
{:error, :invalid_version}

parse!(version_string)

@spec parse!(String.t()) :: non_neg_integer()

Parse a version string, raising on error.

Examples

iex> ExCredstash.Version.parse!("0000000000000000001")
1

valid?(version_string)

@spec valid?(String.t()) :: boolean()

Check if a string is a valid padded version.

Examples

iex> ExCredstash.Version.valid?("0000000000000000001")
true

iex> ExCredstash.Version.valid?("1")
false

iex> ExCredstash.Version.valid?("not a number")
false