// Copyright 2021 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_METRICS_STRUCTURED_EVENT_VALIDATOR_H_ #define COMPONENTS_METRICS_STRUCTURED_EVENT_VALIDATOR_H_ #include #include #include "components/metrics/structured/enums.h" #include "components/metrics/structured/event.h" #include "third_party/abseil-cpp/absl/types/optional.h" namespace metrics { namespace structured { // Interface to be implemented by codegen for every event to validate // messages received by the structured metric service. class EventValidator { public: // Metadata about a registered metric. struct MetricMetadata { Event::MetricType metric_type; uint64_t metric_name_hash; }; // Should not be copied or moved. EventValidator(const EventValidator&) = delete; EventValidator& operator=(const EventValidator& other) = delete; virtual ~EventValidator(); // Returns the event validator if |metric_name| is a valid metric for this // event. This method is virtual because a static constexpr map will be // defined within each event validator implementation. virtual absl::optional GetMetricMetadata( const std::string& metric_name) const = 0; uint64_t event_hash() const; protected: // Should not be constructed directly. explicit EventValidator(uint64_t event_hash); private: uint64_t event_hash_; }; } // namespace structured } // namespace metrics #endif // COMPONENTS_METRICS_STRUCTURED_EVENT_VALIDATOR_H_