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