<commit_before>#pragma once

#include <x0/http/HttpHeader.h>
#include <x0/Tokenizer.h>
#include <x0/Api.h>
#include <memory>
#include <vector>
#include <string>

namespace x0 {

class HttpRequest;

enum class VaryMatch {
	None,
	ValuesDiffer,
	Equals,
};

class X0_API Vary
{
public:
	explicit Vary(size_t count);
	~Vary();

	size_t size() const;

	const std::vector<BufferRef>& names() const;
	const std::vector<BufferRef>& values() const;

	VaryMatch match(const x0::HttpRequest* r) const;
	VaryMatch match(const Vary& other) const;

	/**<commit_msg>http: marks Vary API as non-copyable<commit_after>#pragma once

#include <x0/http/HttpHeader.h>
#include <x0/Tokenizer.h>
#include <x0/Api.h>
#include <memory>
#include <vector>
#include <string>

namespace x0 {

class HttpRequest;

enum class VaryMatch {
	None,
	ValuesDiffer,
	Equals,
};

class X0_API Vary
{
public:
	explicit Vary(size_t count);
	~Vary();

    Vary(const Vary&) = delete;
    Vary& operator=(const Vary&) = delete;

	size_t size() const;

	const std::vector<BufferRef>& names() const;
	const std::vector<BufferRef>& values() const;

	VaryMatch match(const x0::HttpRequest* r) const;
	VaryMatch match(const Vary& other) const;

	/**
{'fraction_non_alphanumeric': 0.14131338320864506, 'fraction_numerical': 0.00997506234413965, 'mean_word_length': 5.174358974358975, 'pattern_counts': {'":': 0, '<': 19, '<?xml version=': 0, '>': 19, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3269679', 'n_tokens_mistral': 464, 'n_tokens_neox': 454, 'n_words': 118}