| Index: mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl | 
| diff --git a/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl | 
| index 0a54e1d5a58a0901887af92d6af019ec84ae4d62..70e1b848b70091c816d05aa7d3da74d3959a421c 100644 | 
| --- a/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl | 
| +++ b/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl | 
| @@ -14,6 +14,8 @@ | 
| #include "mojo/public/cpp/bindings/interface_ptr.h" | 
| #include "mojo/public/cpp/bindings/message_filter.h" | 
| #include "mojo/public/cpp/bindings/no_interface.h" | 
| +#include "mojo/public/cpp/bindings/string.h" | 
| +#include "mojo/public/cpp/bindings/struct_ptr.h" | 
| #include "{{module.path}}-internal.h" | 
| {%- for import in imports %} | 
| #include "{{import.module.path}}.h" | 
| @@ -39,9 +41,31 @@ class {{interface.name}}; | 
| typedef mojo::InterfacePtr<{{interface.name}}> {{interface.name}}Ptr; | 
| {%  endfor %} | 
|  | 
| -{#--- Structs #} | 
| +{#--- Struct Forward Declarations -#} | 
| {%  for struct in structs %} | 
| -{%    include "wrapper_class_declaration.tmpl" %} | 
| +class {{struct.name}}; | 
| +{%    if struct|should_inline %} | 
| +typedef mojo::InlinedStructPtr<{{struct.name}}> {{struct.name}}Ptr; | 
| +{%    else %} | 
| +typedef mojo::StructPtr<{{struct.name}}> {{struct.name}}Ptr; | 
| +{%    endif %} | 
| +{%  endfor %} | 
| + | 
| +{#--- NOTE: Non-inlined structs may have pointers to inlined structs, so we  #} | 
| +{#---       need to fully define inlined structs ahead of the others.        #} | 
| + | 
| +{#--- Inlined structs #} | 
| +{%  for struct in structs %} | 
| +{%    if struct|should_inline %} | 
| +{%      include "wrapper_class_declaration.tmpl" %} | 
| +{%    endif %} | 
| +{%- endfor %} | 
| + | 
| +{#--- Non-inlined structs #} | 
| +{%  for struct in structs %} | 
| +{%    if not struct|should_inline %} | 
| +{%      include "wrapper_class_declaration.tmpl" %} | 
| +{%    endif %} | 
| {%- endfor %} | 
|  | 
| {#--- Interfaces -#} | 
| @@ -69,19 +93,15 @@ typedef mojo::InterfacePtr<{{interface.name}}> {{interface.name}}Ptr; | 
| {%    include "interface_response_validator_declaration.tmpl" %} | 
| {%- endfor %} | 
|  | 
| +{#--- Struct Serialization Helpers -#} | 
| +{%  if structs %} | 
| +{%    for struct in structs %} | 
| +{%      include "struct_serialization_declaration.tmpl" %} | 
| +{%-   endfor %} | 
| +{%- endif %} | 
| + | 
| {%- for namespace in namespaces_as_array|reverse %} | 
| }  // namespace {{namespace}} | 
| {%- endfor %} | 
|  | 
| -{#--- Enum TypeTraits Specializations #} | 
| -{%  if enums %} | 
| -namespace mojo { | 
| -namespace internal { | 
| -{%    for enum in enums %} | 
| -{%      include "enum_traits.tmpl" %} | 
| -{%-   endfor %} | 
| -}  // namespace internal | 
| -}  // namespace mojo | 
| -{%- endif %} | 
| - | 
| #endif  // {{header_guard}} | 
|  |