Skip to main content

lib/crawlberg/batch_scrape_results.ex

# This file is auto-generated by alef — DO NOT EDIT.
# alef:hash:06831f8166c6d860691af36ee02b72ae3246568eb2e5c67ed5d11da71d02afeb
# To regenerate: alef generate
# To verify freshness: alef verify --exit-code
defmodule Crawlberg.BatchScrapeResults do
  @moduledoc """
  Aggregate result of a batch scrape, exposing per-URL results plus precomputed counts.

  The counts are derived once at construction so every binding language can read them
  as plain integer fields without re-iterating the `results` vector.
  """

  @typedoc "Aggregate result of a batch scrape, exposing per-URL results plus precomputed counts."
  @type t :: %__MODULE__{
          results: [map()],
          total_count: non_neg_integer(),
          completed_count: non_neg_integer(),
          failed_count: non_neg_integer()
        }

  defstruct results: [],
            total_count: 0,
            completed_count: 0,
            failed_count: 0

  defimpl Jason.Encoder do
    @doc false
    def encode(value, opts) do
      value
      |> Map.from_struct()
      |> Enum.reject(fn {_k, v} -> v == nil end)
      |> Enum.into(%{})
      |> Jason.Encoder.encode(opts)
    end
  end
end