| OLD | NEW | 
|   1 size_t GetSerializedSize_(const {{struct.name}}Ptr& input); |   1 size_t GetSerializedSize_(const {{struct.name}}Ptr& input); | 
|   2 void Serialize_({{struct.name}}Ptr input, mojo::internal::Buffer* buffer, |   2 void Serialize_({{struct.name}}Ptr input, mojo::internal::Buffer* buffer, | 
|   3                 internal::{{struct.name}}_Data** output); |   3                 internal::{{struct.name}}_Data** output); | 
|   4 bool Deserialize_(internal::{{struct.name}}_Data* input, |   4 bool Deserialize_(internal::{{struct.name}}_Data* input, | 
|   5                   {{struct.name}}Ptr* output, |   5                   {{struct.name}}Ptr* output, | 
|   6                   mojo::internal::SerializationContext* context); |   6                   mojo::internal::SerializationContext* context); | 
 |   7  | 
 |   8 {%- if not variant %} | 
 |   9  | 
 |  10 {# NOTE: Generated Reader instances are intentionally cheap to copy and devoid | 
 |  11    of heap allocations. They should stay this way. #} | 
 |  12 class {{struct.name}}_Reader { | 
 |  13  public: | 
 |  14   {{struct.name}}_Reader(internal::{{struct.name}}_Data* data, | 
 |  15                          mojo::internal::SerializationContext* context); | 
 |  16  | 
 |  17 {%-   for pf in struct.packed.packed_fields_in_ordinal_order %} | 
 |  18 {%-     set kind = pf.field.kind -%} | 
 |  19 {%-     set name = pf.field.name -%} | 
 |  20 {%-     if kind|is_struct_kind %} | 
 |  21   {{kind|get_name_for_kind}}::Reader {{name}}() const; | 
 |  22 {%-     elif kind|is_union_kind %} | 
 |  23   // TODO(rockot): Support reading unions. ({{name}}() omitted) | 
 |  24 {%-     elif kind|is_object_kind %} | 
 |  25   // TODO(rockot): Support reading other object kinds. ({{name}}() omitted) | 
 |  26 {%-     elif kind|is_any_handle_kind %} | 
 |  27   // TODO(rockot): Support reading handles. ({{name}}() omitted) | 
 |  28 {%-     elif kind|is_interface_kind %} | 
 |  29   // TODO(rockot): Support reading interfaces. ({{name}}() omitted) | 
 |  30 {%-     elif kind|is_interface_request_kind %} | 
 |  31   // TODO(rockot): Support reading interface requests. ({{name}}() omitted) | 
 |  32 {%-     elif kind|is_associated_kind %} | 
 |  33   // TODO(rockot): Support reading associated kinds. ({{name}}() omitted) | 
 |  34 {%-     elif kind|is_enum_kind %} | 
 |  35   {{kind|cpp_result_type}} {{name}}() const { | 
 |  36     return static_cast<{{kind|cpp_result_type}}>(data_->{{name}}); | 
 |  37   } | 
 |  38 {%-     else %} | 
 |  39   {{kind|cpp_result_type}} {{name}}() const { return data_->{{name}}; } | 
 |  40 {%-     endif %} | 
 |  41 {%-   endfor %} | 
 |  42  | 
 |  43  private: | 
 |  44   internal::{{struct.name}}_Data* data_; | 
 |  45   mojo::internal::SerializationContext* context_; | 
 |  46 }; | 
 |  47  | 
 |  48 template <typename NativeType> | 
 |  49 struct {{struct.name}}_SerializerTraits_ { | 
 |  50   static size_t GetSize(const NativeType& input) { | 
 |  51     size_t size = sizeof(internal::{{struct.name}}_Data); | 
 |  52 {%- for pf in struct.packed.packed_fields_in_ordinal_order %} | 
 |  53 {%-   if pf.field.kind|is_object_kind %} | 
 |  54     NOTREACHED() << "Mojom struct traits only support POD fields at this time. " | 
 |  55         << "Cannot determine the size of field {{pf.field.name}}"; | 
 |  56 {%-   endif %} | 
 |  57 {%- endfor %} | 
 |  58     return size; | 
 |  59   } | 
 |  60  | 
 |  61   static void Serialize(const NativeType& input, | 
 |  62                         mojo::internal::Buffer* buffer, | 
 |  63                         internal::{{struct.name}}_Data** output) { | 
 |  64     internal::{{struct.name}}_Data* result = | 
 |  65         internal::{{struct.name}}_Data::New(buffer); | 
 |  66 {%- for pf in struct.packed.packed_fields_in_ordinal_order %} | 
 |  67 {%-   set name = pf.field.name -%} | 
 |  68 {%-   set kind = pf.field.kind %} | 
 |  69     result->{{name}} = mojo::StructTraits<{{struct.name}}, NativeType> | 
 |  70         ::{{name}}(input); | 
 |  71 {%- endfor %} | 
 |  72     *output = result; | 
 |  73   } | 
 |  74  | 
 |  75   static bool Deserialize(internal::{{struct.name}}_Data* input, | 
 |  76                           NativeType* output, | 
 |  77                           mojo::internal::SerializationContext* context) { | 
 |  78     return mojo::StructTraits<{{struct.name}}, NativeType>::Read( | 
 |  79         {{struct.name}}_Reader(input, context), output); | 
 |  80   } | 
 |  81 }; | 
 |  82  | 
 |  83 {%- endif %}  {# not variant #} | 
| OLD | NEW |