module Pagy::HeadersExtra

def pagy_headers(pagy)

Generate a hash of RFC-8288 compliant http headers
def pagy_headers(pagy)
  pagy_headers_hash(pagy).tap do |hash|
    hash['link'] = hash['link'].map { |rel, link| %(<#{link}>; rel="#{rel}") }.join(', ')
  end
end

def pagy_headers_hash(pagy)

Generates a hash structure of the headers
def pagy_headers_hash(pagy)
  countless             = defined?(Countless) && pagy.is_a?(Countless)
  rel                   = { 'first' => 1, 'prev' => pagy.prev, 'next' => pagy.next }
  rel['last']           = pagy.last unless countless
  url_str               = pagy_url_for(pagy, PAGE_TOKEN, absolute: true)
  link                  = rel.filter_map do |r, num|
                            next unless num # rubocop:disable Layout/EmptyLineAfterGuardClause
                            [r, url_str.sub(PAGE_TOKEN, num.to_s)]
                          end.compact.to_h
  hash                  = { 'link' => link }
  headers               = pagy.vars[:headers]
  hash[headers[:page]]  = pagy.page.to_s if headers[:page]
  if headers[:items] && !(defined?(Calendar) && pagy.is_a?(Calendar))  # items is not for Calendar
    hash[headers[:items]] = pagy.vars[:items].to_s
  end
  unless countless
    hash[headers[:pages]] = pagy.pages.to_s if headers[:pages]
    hash[headers[:count]] = pagy.count.to_s if pagy.count && headers[:count] # count may be nil with Calendar
  end
  hash
end

def pagy_headers_merge(pagy)

Merge the pagy headers into the response.headers
def pagy_headers_merge(pagy)
  response.headers.merge!(pagy_headers(pagy))
end