Packages
vix
0.17.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/interpolate.ex
defmodule Vix.Vips.Interpolate do
alias Vix.Type
defstruct [:ref]
alias __MODULE__
@moduledoc """
Make interpolators for operators like `affine` and `mapim`.
"""
alias Vix.Nif
alias Vix.Type
@behaviour Type
@typedoc """
Represents an instance of VipsInterpolate
"""
@type t() :: %Interpolate{ref: reference()}
@impl Type
def typespec do
quote do
unquote(__MODULE__).t()
end
end
@impl Type
def default(nil), do: :unsupported
@impl Type
def to_nif_term(interpolate, _data) do
case interpolate do
%Interpolate{ref: ref} ->
ref
value ->
raise ArgumentError, message: "expected Vix.Vips.Interpolate. given: #{inspect(value)}"
end
end
@impl Type
def to_erl_term(ref), do: %Interpolate{ref: ref}
@doc """
Make a new interpolator by name.
Make a new interpolator from the libvips class nickname. For example:
```elixir
{:ok, interpolate} = Interpolate.new("bilindear")
```
You can get a list of all supported interpolators from the command-line with:
```shell
$ vips -l interpolate
```
See for example `affine`.
"""
@spec new(String.t()) :: {:ok, __MODULE__.t()} | {:error, term()}
def new(name) do
if String.valid?(name) do
Nif.nif_interpolate_new(name)
|> wrap_type()
else
{:error, "expected UTF-8 binary string"}
end
end
@doc """
Make a new interpolator by name.
Make a new interpolator from the libvips class nickname. For example:
```elixir
interpolate = Interpolate.new!("bilindear")
```
You can get a list of all supported interpolators from the command-line with:
```shell
$ vips -l interpolate
```
See for example `affine`.
"""
@spec new!(String.t()) :: __MODULE__.t()
def new!(name) do
case new(name) do
{:ok, interpolate} ->
interpolate
{:error, error} ->
raise error
end
end
defp wrap_type({:ok, ref}), do: {:ok, %Interpolate{ref: ref}}
defp wrap_type(value), do: value
end