Packages
vix
0.5.0
0.40.0
0.39.0
0.38.0
0.37.0
0.36.0
0.35.0
0.34.0
0.33.1
0.33.0
0.32.0
0.31.1
0.31.0
0.30.0
0.29.0
0.28.0
0.27.0
0.26.0
0.25.0
0.24.0
0.23.1
0.22.0
0.21.0
0.20.0
0.19.0
0.18.0
0.17.0
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.1
0.15.0
0.14.0
0.13.0
0.12.0
0.11.0
0.10.1
0.10.0
0.9.0
0.8.0
0.7.0
0.6.1
0.6.0
0.5.0
0.4.0
0.3.0
0.2.1
0.2.0
retired
0.1.0
NIF based bindings for libvips
Current section
Files
Jump to
Current section
Files
lib/vix/g_object/double.ex
defmodule Vix.GObject.Double do
alias Vix.Type
@moduledoc false
@behaviour Type
@impl Type
def typespec do
quote do
float()
end
end
@impl Type
def default({_min, _max, default}), do: default
@impl Type
def to_nif_term(value, data) do
case value do
value when is_number(value) ->
value = normalize(value)
validate_number_limits!(value, data)
value
value ->
raise ArgumentError, message: "expected integer or double. given: #{inspect(value)}"
end
end
@impl Type
def to_erl_term(value), do: value
def normalize(num) when is_float(num), do: num
def normalize(num) when is_integer(num), do: num * 1.0
defp validate_number_limits!(_value, nil), do: :ok
defp validate_number_limits!(value, {min, max, _default}) do
if max && value > max do
raise ArgumentError, "value must be <= #{max}"
end
if min && value < min do
raise ArgumentError, "value must be >= #{min}"
end
:ok
end
end