summaryrefslogtreecommitdiffstats
path: root/third_party/python/glean_parser/glean_parser/templates/swift.jinja2
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--third_party/python/glean_parser/glean_parser/templates/swift.jinja249
1 files changed, 47 insertions, 2 deletions
diff --git a/third_party/python/glean_parser/glean_parser/templates/swift.jinja2 b/third_party/python/glean_parser/glean_parser/templates/swift.jinja2
index 714bf20ec2..fe51a078bc 100644
--- a/third_party/python/glean_parser/glean_parser/templates/swift.jinja2
+++ b/third_party/python/glean_parser/glean_parser/templates/swift.jinja2
@@ -11,7 +11,7 @@ Jinja2 template is not. Please file bugs! #}
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-{% macro obj_declaration(obj, suffix='', access='') %}
+{%- macro obj_declaration(obj, suffix='', access='') %}
{{ access }}static let {{ obj.name|camelize|variable_name }}{{ suffix }} = {{ obj|type_name }}( // generated from {{ obj.identifier() }}
CommonMetricData(
{% for arg_name in common_metric_args if obj[arg_name] is defined %}
@@ -24,7 +24,7 @@ Jinja2 template is not. Please file bugs! #}
)
{% endmacro %}
-{% macro struct_decl(obj, name, suffix) %}
+{%- macro struct_decl(obj, name, suffix) %}
struct {{ obj.name|Camelize }}{{ suffix }}: EventExtras {
{% for item, typ in obj|attr(name) %}
var {{ item|camelize|variable_name }}: {{typ|extra_type_name}}?
@@ -44,6 +44,46 @@ struct {{ obj.name|Camelize }}{{ suffix }}: EventExtras {
}
{% endmacro %}
+{%- macro generate_structure(name, struct) %}
+{%- if struct.type == "array" -%}
+ typealias {{ name }} = [{{ name }}Item]
+
+ {{ generate_structure(name ~ "Item", struct["items"]) }}
+
+{%- elif struct.type == "object" -%}
+ struct {{ name }}: Codable, Equatable, ObjectSerialize {
+ {% for itemname, val in struct.properties.items() %}
+ {% if val.type == "object" %}
+ var {{itemname|camelize|variable_name}}: {{ name ~ "Item" ~ itemname|Camelize ~ "Object" }}?
+ {% elif val.type == "array" %}
+ var {{itemname|camelize|variable_name}}: {{ name ~ "Item" ~ itemname|Camelize }}
+ {% else %}
+ var {{itemname|camelize|variable_name}}: {{val.type|structure_type_name}}?
+ {% endif %}
+ {% endfor %}
+
+ func intoSerializedObject() -> String {
+ let jsonEncoder = JSONEncoder()
+ let jsonData = try! jsonEncoder.encode(self)
+ let json = String(data: jsonData, encoding: String.Encoding.utf8)!
+ return json
+ }
+ }
+
+ {% for itemname, val in struct.properties.items() %}
+ {% if val.type == "array" %}
+ {% set nested_name = name ~ "Item" ~ itemname|Camelize %}
+ {{ generate_structure(nested_name, val) }}
+ {% elif val.type == "object" %}
+ {% set nested_name = name ~ "Item" ~ itemname|Camelize ~ "Object" %}
+ {{ generate_structure(nested_name, val) }}
+ {% endif %}
+ {% endfor %}
+
+{%- endif -%}
+
+{% endmacro %}
+
{% if not allow_reserved %}
import {{ glean_namespace }}
@@ -97,6 +137,8 @@ extension {{ namespace }} {
sendIfEmpty: {{obj.send_if_empty|swift}},
preciseTimestamps: {{obj.precise_timestamps|swift}},
includeInfoSections: {{obj.include_info_sections|swift}},
+ enabled: {{obj.enabled|swift}},
+ schedulesPings: {{obj.schedules_pings|swift}},
reasonCodes: {{obj.reason_codes|swift}}
)
@@ -106,6 +148,9 @@ extension {{ namespace }} {
{% else %}
enum {{ category.name|Camelize }} {
{% for obj in category.objs.values() %}
+ {% if obj|attr("_generate_structure") %}
+ {{ generate_structure(obj.name|Camelize ~ "Object", obj._generate_structure) }}
+ {%- endif %}
{% if obj|attr("_generate_enums") %}
{% for name, suffix in obj["_generate_enums"] %}
{% if obj|attr(name)|length %}