Packages

Provides types for file sizes that you can use in your Ecto schemata.

Current section

Files

Jump to
file_size_ecto lib file_size ecto utils.ex
Raw

lib/file_size/ecto/utils.ex

defmodule FileSize.Ecto.Utils do
@moduledoc false
alias FileSize.Units
@spec assert_value(value) :: {:ok, value} | :error
when value: number | Decimal.t()
def assert_value(%Decimal{} = value), do: {:ok, value}
def assert_value(value) when is_number(value), do: {:ok, value}
def assert_value(_), do: :error
@spec parse_unit_for_type(FileSize.unit() | String.t(), module) ::
{:ok, FileSize.unit()} | :error
def parse_unit_for_type(unit, mod) do
case parse_unit(unit) do
{:ok, %{mod: ^mod, name: name}} ->
{:ok, name}
_ ->
:error
end
end
defp parse_unit(unit_str) when is_binary(unit_str) do
unit_str
|> String.to_existing_atom()
|> Units.fetch()
rescue
ArgumentError -> :error
end
defp parse_unit(unit), do: Units.fetch(unit)
@spec serialize_unit(FileSize.unit() | String.t()) :: String.t()
def serialize_unit(unit), do: to_string(unit)
end