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