summaryrefslogtreecommitdiffstats
path: root/toolkit/components/glean/build_scripts/glean_parser_ext/templates/gifft_events.jinja2
blob: f32640fc19d4cd6c06dcca206c497ff32805346e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// -*- 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