Source code

Revision control

Copy as Markdown

Other Tools

// -*- mode: C++ -*-
/* This file is auto-generated by run_glean_parser.py.
It is only for internal use by types in
toolkit/components/glean/bindings/private */
{# The rendered source is autogenerated, but this
Jinja2 template is not. Pleas file bugs! #}
#include "mozilla/glean/bindings/Event.h"
#include "mozilla/glean/GleanMetrics.h"
namespace mozilla::glean {
template <>
/*static*/ const nsCString impl::EventMetric<NoExtraKeys>::ExtraStringForKey(uint32_t aKey) {
MOZ_ASSERT_UNREACHABLE("What are you doing here? No extra keys!");
return ""_ns;
}
{% for category_name, objs in all_objs.items() %}
{% for obj in objs.values() %}
{% if obj|attr("_generate_enums") %}
{# we always use the `extra` suffix, because we only expose the new event API #}
{% set suffix = "Extra" %}
{% for name, _ in obj["_generate_enums"] %}
{% if obj|attr(name)|length %}
{% set ns %}{{ category_name|snake_case }}{% endset %}
{% set type %}{{ obj.name|Camelize }}{{ suffix }}{% endset %}
template <>
/*static*/ const nsCString impl::EventMetric<{{ ns }}::{{ type }}>::ExtraStringForKey(uint32_t aKey) {
using {{ ns }}::{{ type }};
switch (aKey) {
{% if obj|attr("telemetry_mirror") %}{# Optimization: Do not generate switch if not mirrored #}
{% for key, _ in obj|attr(name) %}
case {{loop.index-1}}: {
return "{{ key }}"_ns;
}
{% endfor %}
{% endif %}
default: {
MOZ_ASSERT_UNREACHABLE("Impossible event key reached.");
return ""_ns;
}
}
}
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}
{% endfor %}
}; // namespace mozilla::glean