{%- set mojom_type = struct|get_qualified_name_for_kind %}
template <>
struct {{export_attribute}} StructTraits<{{mojom_type}}::DataView,
{{mojom_type}}Ptr> {
static bool IsNull(const {{mojom_type}}Ptr& input) { return !input; }
static void SetToNull({{mojom_type}}Ptr* output) { output->reset(); }
{%- for field in struct.fields %}
{%- set return_ref = field.kind|is_object_kind or
field.kind|is_any_handle_or_interface_kind %}
{# We want the field accessor to be const whenever possible to allow
structs to be used as map keys.
TODO(tibell): Make this check more precise to deal with e.g.
custom types which don't contain handles but require non-const
reference for serialization. #}
{%- set maybe_const = "" if field.kind|contains_handles_or_interfaces else "const" %}
{%- if return_ref %}
static {{maybe_const}} decltype({{mojom_type}}::{{field.name}})& {{field.name}}(
{{maybe_const}} {{mojom_type}}Ptr& input) {
return input->{{field.name}};
}
{%- else %}
static decltype({{mojom_type}}::{{field.name}}) {{field.name}}(
const {{mojom_type}}Ptr& input) {
return input->{{field.name}};
}
{%- endif %}
{%- endfor %}
static bool Read({{mojom_type}}::DataView input, {{mojom_type}}Ptr* output);
};