#pragma once
#include <memory>
#include <string>
#include <string_view>
#include <utility>
#include "configuration/common/configuration.hpp"
#include "indexer.hpp"
#include "processor/base.hpp"
#include "scanner.hpp"
namespace ddwaf {
class processor_builder {
public:
processor_builder(std::string id, processor_spec spec)
: id_(std::move(id)), spec_(std::move(spec))
{}
std::unique_ptr<base_processor> build(const indexer<const scanner> &scanners);
bool apply_override(const processor_override_spec &ovrd)
{
if (spec_.type != processor_type::extract_schema) {
return false;
}
auto &[include, exclude] = spec_.scanners;
include.insert(include.end(), ovrd.scanners.include.begin(), ovrd.scanners.include.end());
exclude.insert(exclude.end(), ovrd.scanners.exclude.begin(), ovrd.scanners.exclude.end());
return true;
}
[[nodiscard]] std::string_view get_id() const { return id_; }
protected:
std::string id_;
processor_spec spec_;
};
}