lib/live_view_native_swift_ui/types/shape_style/gradient/stop.ex

defmodule LiveViewNativeSwiftUi.Types.Gradient.Stop do
  @derive Jason.Encoder
  defstruct [:color, :location]

  use LiveViewNativePlatform.Modifier.Type
  def type, do: :map

  alias LiveViewNativeSwiftUi.Types.Color

  def cast(value) when is_map(value) or is_list(value), do: cast({value[:color], value[:location]})

  def cast({color, location}) do
    case Color.cast(color) do
      {:ok, cast_color} ->
        {:ok, %__MODULE__{color: cast_color, location: location}}

      _ ->
        :error
    end
  end

  def cast(_), do: :error
end