defmodule Crc32c do @moduledoc """ the crc32c algorithm. It uses a rust nif. """ alias Crc32c.Impl @doc """ Calculate the CRC. Expect binary data. #### Examples iex> Crc32c.calc(<<1, 2, 3, 4>>) {:ok, 691047668} iex> Crc32c.calc(5) {:error, :not_binary_data} """ @spec calc(binary()) :: {:ok, integer()} | {:error, :not_binary_data} def calc(data) when is_binary(data), do: {:ok, Impl.calc(data)} def calc(_data) do {:error, :not_binary_data} end @doc """ Calculate the CRC. It raises an Argument error if data is not binary Expect binary data. #### Examples iex> Crc32c.calc!(<<1, 2, 3, 4>>) 691047668 """ @spec calc!(binary()) :: integer() | no_return() def calc!(data), do: Impl.calc(data) end