lib/ex_json_schema/validator/min_items.ex

defmodule ExJsonSchema.Validator.MinItems do
  @moduledoc """
  `ExJsonSchema.Validator` implementation for `"minItems"` attributes.

  See:

  """

  alias ExJsonSchema.Validator.Error

  @behaviour ExJsonSchema.Validator

  @impl ExJsonSchema.Validator
  def validate(_, _, {"minItems", min_items}, data, _) do
    do_validate(min_items, data)
  end

  def validate(_, _, _, _, _) do
    []
  end

  defp do_validate(min_items, items) when is_list(items) do
    count = Enum.count(items)

    if count >= min_items do
      []
    else
      [%Error{error: %Error.MinItems{expected: min_items, actual: count}}]
    end
  end

  defp do_validate(_, _) do
    []
  end
end