Fix post-Elixir 1.16 divergence in File.stream!

This commit is contained in:
Liam 2024-06-01 23:09:06 -04:00
parent 194b2686f6
commit abf983528f

View file

@ -1,11 +1,27 @@
defmodule Philomena.Sha512 do
@spec file(String.t()) :: String.t()
def file(file) do
@chunk_size 10_485_760
@spec file(Path.t()) :: String.t()
def file(path) do
hash_ref = :crypto.hash_init(:sha512)
File.stream!(file, [], 10_485_760)
path
|> stream_file()
|> Enum.reduce(hash_ref, &:crypto.hash_update(&2, &1))
|> :crypto.hash_final()
|> Base.encode16(case: :lower)
end
if Version.match?(System.version(), ">= 1.16.0") do
# `stream!/2` was added in Elixir 1.16 to accept a shortened form,
# where we only need to specify the size of each stream chunk
defp stream_file(file) do
File.stream!(file, @chunk_size)
end
else
# Use legacy stream/3 for older Elixir versions
defp stream_file(file) do
File.stream!(file, [], @chunk_size)
end
end
end