Current section

Files

Jump to
image lib image options shape.ex
Raw

lib/image/options/shape.ex

defmodule Image.Options.Shape do
@moduledoc false
import Image.Options.Text
def default_polygon_options do
[
opacity: 0.7,
fill_color: "none",
stroke_color: "white",
stroke_width: 1
]
end
def validate_polygon_options(options) do
validate_options(options, default_polygon_options())
end
@doc """
Validate the options for `Image.Shape functions`.
"""
def validate_options(options, default_options) do
options =
Keyword.merge(default_options, options)
options =
case Enum.reduce_while(options, options, &validate_option(&1, &2)) do
{:error, value} ->
{:error, value}
options ->
{:ok, options}
end
case options do
{:ok, options} ->
options
|> Map.new()
|> wrap(:ok)
other -> other
end
end
defp validate_option({:height, height}, options) when is_integer(height) and height > 0 do
{:cont, options}
end
defp validate_option({:width, width}, options) when is_integer(width) and width > 0 do
{:cont, options}
end
defp validate_option({:fill_color = option, color}, options) do
validate_color(option, color, options)
end
defp validate_option({:stroke_color = option, color}, options) do
validate_color(option, color, options)
end
defp validate_option({:stroke_width = option, width}, options) do
validate_stroke_width(option, width, options)
end
defp validate_option({:opacity = option, opacity}, options) do
validate_opacity(option, opacity, options)
end
defp validate_option(option, _options) do
{:halt, {:error, invalid_option(option)}}
end
end