#pragma once
#include "action_mapper.hpp"
#include "attribute_collector.hpp"
#include "clock.hpp"
#include "memory_resource.hpp"
#include "obfuscator.hpp"
#include "object.hpp"
#include "pointer.hpp"
#include "rule.hpp"
#include <utility>
#include <vector>
namespace ddwaf {
struct result_components {
borrowed_object events;
borrowed_object actions;
borrowed_object duration;
borrowed_object timeout;
borrowed_object attributes;
borrowed_object keep;
borrowed_object evaluated;
};
class result_serializer {
public:
explicit result_serializer(const match_obfuscator *obfuscator, const action_mapper &actions,
nonnull_ptr<memory::memory_resource> alloc = memory::get_default_resource())
: obfuscator_(obfuscator), actions_(actions), alloc_(alloc)
{}
void serialize(std::vector<rule_result> &results, attribute_collector &collector,
const timer &deadline, result_components output);
std::pair<owned_object, result_components> initialise_result_object();
protected:
const match_obfuscator *obfuscator_;
const action_mapper &actions_;
nonnull_ptr<memory::memory_resource> alloc_;
};
}