ExCredstash.Version (ExCredstash v0.1.1)
View SourceVersion 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
@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"}
@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"
@spec pad_length() :: pos_integer()
Returns the padding length constant.
Examples
iex> ExCredstash.Version.pad_length()
19
@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}
@spec parse!(String.t()) :: non_neg_integer()
Parse a version string, raising on error.
Examples
iex> ExCredstash.Version.parse!("0000000000000000001")
1
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