Packages
vix
0.10.1
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/type.ex
defmodule Vix.Type do
@moduledoc false
alias Vix.{Vips, GObject}
@callback typespec() :: term()
@callback default(term) :: term()
@callback to_nif_term(term, term) :: term()
@callback to_erl_term(term) :: term()
def typespec(type) do
impl(type).typespec()
end
def default(type, data) do
impl(type).default(data)
end
def to_nif_term(type, value, data) do
impl(type).to_nif_term(value, data)
end
def to_erl_term(type, value) do
case impl(type) do
:unsupported -> value
module -> module.to_erl_term(value)
end
end
def supported?(type), do: impl(type) != :unsupported
defp impl(type) do
case type do
# TODO: we check if enum_type is enum or not just by the name
{:enum, enum_type} ->
# TODO: convert type in nif itself, see `get_enum_as_atom`
Module.concat(Vix.Vips.Enum, String.to_atom(enum_type))
{:flags, flag_type} ->
# TODO: convert type in nif itself, see `get_flags_as_atoms`
Module.concat(Vix.Vips.Flag, String.to_atom(flag_type))
{:vips_array, nested_type} when nested_type in ~w(Int Double Image Enum.VipsBlendMode) ->
Module.concat(Vix.Vips.Array, String.to_atom(nested_type))
{_spec_type, _value_type} ->
:unsupported
"gint" ->
GObject.Int
"guint64" ->
GObject.UInt64
"gdouble" ->
GObject.Double
"gboolean" ->
GObject.Boolean
"gchararray" ->
GObject.String
"VipsRefString" ->
Vips.RefString
"VipsBlob" ->
Vips.Blob
"VipsImage" ->
Vips.Image
"VipsSource" ->
Vips.Source
"VipsTarget" ->
Vips.Target
"VipsInterpolate" ->
Vips.Interpolate
_type ->
:unsupported
end
end
end