Packages
vix
0.25.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/vips/enum.ex
defmodule Vix.Vips.EnumHelper do
@moduledoc false
def __before_compile__(env) do
for {name, enum} <- Vix.Nif.nif_vips_enum_list() do
def_vips_enum(name, enum, env)
end
quote do
end
end
def def_vips_enum(name, enum, env) do
module_name = Module.concat(Vix.Vips.Enum, name)
{enum_str_list, _} = Enum.unzip(enum)
spec = Enum.reduce(enum_str_list, &{:|, [], [&1, &2]})
contents =
quote do
# Internal module
@moduledoc false
@type t() :: unquote(spec)
alias Vix.Type
@behaviour Type
@impl Type
def typespec do
quote do
unquote(__MODULE__).t()
end
end
@impl Type
def default(default), do: default
unquote(
Enum.map(enum, fn {name, value} ->
quote do
@impl Type
def to_nif_term(unquote(name), _data), do: unquote(value)
@impl Type
def to_erl_term(unquote(value)), do: unquote(name)
end
end)
)
end
Module.create(module_name, contents, line: env.line, file: env.file)
end
end
defmodule Vix.Vips.Enum do
@moduledoc false
@before_compile Vix.Vips.EnumHelper
end