{%- 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); };