Packages
evision
0.1.29
1.0.1-rc.0
1.0.0
1.0.0-rc.0
0.2.17
0.2.17-rc2
0.2.17-rc1
0.2.16
0.2.16-pre.2
0.2.16-pre
0.2.15
0.2.14
0.2.13
0.2.12
0.2.11
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.2-rc2
0.2.1
0.2.0
0.1.39
0.1.38
0.1.37
0.1.36
0.1.35
0.1.34
0.1.33
0.1.32
retired
0.1.31
0.1.30
0.1.29
0.1.28
0.1.27
0.1.26
0.1.26-rc3
0.1.26-rc2
0.1.26-rc1
0.1.26-rc0
0.1.25
0.1.24
0.1.23
0.1.22
0.1.21
0.1.20
0.1.19
0.1.18
0.1.17
0.1.16
0.1.15
0.1.14
0.1.13
0.1.12
0.1.11
0.1.10
0.1.9
0.1.8
0.1.7
OpenCV-Erlang/Elixir binding.
Current section
Files
Jump to
Current section
Files
lib/smartcell/evision_smartcell_helper.ex
defmodule Evision.SmartCell.Helper do
@moduledoc false
def quoted_var(nil), do: nil
def quoted_var(string), do: {String.to_atom(string), [], nil}
def to_update(value, type, opts \\ [])
def to_update(value, :string, opts) do
must_in = opts[:must_in] || [value]
if Enum.member?(must_in, value) do
value
else
nil
end
end
def to_update(value, :boolean, _opts) do
if is_binary(value) do
case value do
"true" -> true
"false" -> false
_ -> nil
end
else
if is_boolean(value) do
value
else
nil
end
end
end
def to_update(value, :integer, opts) do
minimum = opts[:minimum]
maximum = opts[:maximum]
case Integer.parse(value) do
{n, ""} ->
n =
if minimum != nil and n < minimum do
minimum
else
n
end
if maximum != nil and n > maximum do
maximum
else
n
end
_ ->
nil
end
end
def to_update(value, :number, opts) do
minimum = opts[:minimum]
maximum = opts[:maximum]
case Float.parse(value) do
{n, ""} ->
n =
if minimum != nil and n < minimum do
minimum
else
n
end
if maximum != nil and n > maximum do
maximum
else
n
end
_ ->
nil
end
end
@evision_types [:f32, :f64, :u8, :u16, :s8, :s16, :s32]
def to_update(value, :type, opts) do
allowed_types = opts[:allowed_types] || @evision_types
if Enum.member?(allowed_types, String.to_atom(value)) do
value
else
nil
end
end
def update_key_with_module(fields, key, module, conflicit \\ :loaded, on_condition) do
if on_condition.(fields, key) do
fill_or_merge_defaults(fields, key, module, conflicit)
else
fields
end
end
def fill_or_merge_defaults(fields, key, module, conflicit \\ :loaded) do
if fields[key] == nil do
Map.put(fields, key, module.defaults())
else
merge_properties(fields[key], module.defaults(), conflicit)
end
end
def to_inner_updates(inner_name, inner_module, field, value, ctx) do
inner_fields = ctx.assigns.fields[inner_name]
updated_fields = inner_module.to_updates(inner_fields, field, value)
%{inner_name => Map.merge(inner_fields, updated_fields)}
end
def merge_properties(loaded, default, conflicit \\ :loaded) do
Map.merge(loaded, default, fn _key, loaded_value, default_specs ->
case conflicit do
:loaded ->
if loaded_value != nil do
loaded_value
else
default_specs[:default]
end
:default ->
default_specs[:default]
end
end)
end
end