| OLD | NEW |
| 1 {% import 'struct_macros.tmpl' as struct_macros without context %} |
| 1 size_t GetSerializedSize_(const {{union.name}}Ptr& input, bool inlined) { | 2 size_t GetSerializedSize_(const {{union.name}}Ptr& input, bool inlined) { |
| 2 size_t size = 0U; | 3 size_t size = 0U; |
| 3 if (!inlined) { | 4 if (!inlined) { |
| 4 size += sizeof(internal::{{union.name}}_Data); | 5 size += sizeof(internal::{{union.name}}_Data); |
| 5 } | 6 } |
| 6 | 7 |
| 7 if (!input) | 8 if (!input) |
| 8 return size; | 9 return size; |
| 9 | 10 |
| 10 mojo::internal::UnionAccessor<{{union.name}}> input_acc(input.get()); | 11 mojo::internal::UnionAccessor<{{union.name}}> input_acc(input.get()); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 {% endif %} | 22 {% endif %} |
| 22 break; | 23 break; |
| 23 {%- endif %} | 24 {%- endif %} |
| 24 {%- endfor %} | 25 {%- endfor %} |
| 25 default: | 26 default: |
| 26 break; | 27 break; |
| 27 } | 28 } |
| 28 return size; | 29 return size; |
| 29 } | 30 } |
| 30 | 31 |
| 31 void SerializeUnion_({{union.name}}* input, mojo::internal::Buffer* buf, | 32 mojo::internal::ValidationError SerializeUnion_( |
| 32 internal::{{union.name}}_Data** output, bool inlined) { | 33 {{union.name}}* input, |
| 34 mojo::internal::Buffer* buf, |
| 35 internal::{{union.name}}_Data** output, |
| 36 bool inlined) { |
| 33 internal::{{union.name}}_Data* result = *output; | 37 internal::{{union.name}}_Data* result = *output; |
| 34 if (input) { | 38 if (input) { |
| 35 if (!inlined) { | 39 if (!inlined) { |
| 36 result = internal::{{union.name}}_Data::New(buf); | 40 result = internal::{{union.name}}_Data::New(buf); |
| 37 } | 41 } |
| 38 mojo::internal::UnionAccessor<{{union.name}}> input_acc(input); | 42 mojo::internal::UnionAccessor<{{union.name}}> input_acc(input); |
| 39 // TODO(azani): Handle unknown and objects. | 43 // TODO(azani): Handle unknown and objects. |
| 40 // Set the not-null flag. | 44 // Set the not-null flag. |
| 41 result->size = 16; | 45 result->size = 16; |
| 42 result->tag = input->which(); | 46 result->tag = input->which(); |
| 43 switch (input->which()) { | 47 switch (input->which()) { |
| 44 {% for field in union.fields %} | 48 {% for field in union.fields %} |
| 45 case {{union.name}}::Tag::{{field.name|upper}}: { | 49 case {{union.name}}::Tag::{{field.name|upper}}: { |
| 46 {% if field.kind|is_object_kind %} | 50 {% if field.kind|is_object_kind %} |
| 47 {% if field.kind|is_string_kind %} | 51 {% if field.kind|is_string_kind %} |
| 48 SerializeString_( | 52 SerializeString_( |
| 49 *input_acc.data()->{{field.name}}, | 53 *input_acc.data()->{{field.name}}, |
| 50 buf, &result->data.f_{{field.name}}.ptr); | 54 buf, &result->data.f_{{field.name}}.ptr); |
| 51 {% elif field.kind|is_struct_kind %} | 55 {% elif field.kind|is_struct_kind %} |
| 52 Serialize_( | 56 {{struct_macros.call_serialize_struct( |
| 53 input_acc.data()->{{field.name}}->get(), | 57 input = "input_acc.data()->%s->get()"|format(field.name), |
| 54 buf, &result->data.f_{{field.name}}.ptr); | 58 buffer = "buf", |
| 59 output = "&result->data.f_%s.ptr"|format(field.name), |
| 60 should_return_errors = true)|indent(6)}} |
| 55 {% elif field.kind|is_union_kind %} | 61 {% elif field.kind|is_union_kind %} |
| 56 SerializeUnion_( | 62 {{struct_macros.call_serialize_union( |
| 57 input_acc.data()->{{field.name}}->get(), | 63 input = "input_acc.data()->%s->get()"|format(field.name), |
| 58 buf, &result->data.f_{{field.name}}.ptr, false); | 64 buffer = "buf", |
| 65 output = "&result->data.f_%s.ptr"|format(field.name), |
| 66 inlined = "false", |
| 67 should_return_errors = true)|indent(6)}} |
| 59 {% elif field.kind|is_array_kind %} | 68 {% elif field.kind|is_array_kind %} |
| 60 const mojo::internal::ArrayValidateParams {{field.name}}_validate_params
( | 69 {{struct_macros.call_serialize_array( |
| 61 {{field.kind|get_array_validate_params_ctor_args|indent(16)}}); | 70 name = field.name, |
| 62 SerializeArray_( | 71 kind = field.kind, |
| 63 input_acc.data()->{{field.name}}, | 72 input = "input_acc.data()->%s"|format(field.name), |
| 64 buf, &result->data.f_{{field.name}}.ptr, &{{field.name}}_validate_pa
rams); | 73 buffer = "buf", |
| 74 output = "&result->data.f_%s.ptr"|format(field.name), |
| 75 should_return_errors = true, |
| 76 indent_size = 16)|indent(6)}} |
| 65 {% elif field.kind|is_map_kind %} | 77 {% elif field.kind|is_map_kind %} |
| 66 const mojo::internal::ArrayValidateParams {{field.name}}_validate_params
( | 78 {{struct_macros.call_serialize_map( |
| 67 {{field.kind.value_kind|get_map_validate_params_ctor_args|indent(16)
}}); | 79 name = field.name, |
| 68 SerializeMap_( | 80 kind = field.kind, |
| 69 input_acc.data()->{{field.name}}, | 81 input = "input_acc.data()->%s"|format(field.name), |
| 70 buf, &result->data.f_{{field.name}}.ptr, &{{field.name}}_validate_pa
rams); | 82 buffer = "buf", |
| 83 output = "&result->data.f_%s.ptr"|format(field.name), |
| 84 should_return_errors = true, |
| 85 indent_size = 16)|indent(6)}} |
| 71 {%- endif %} | 86 {%- endif %} |
| 72 {% elif field.kind|is_any_handle_kind %} | 87 {% elif field.kind|is_any_handle_kind %} |
| 73 result->data.f_{{field.name}} = | 88 result->data.f_{{field.name}} = |
| 74 input_acc.data()->{{field.name}}->release().value(); | 89 input_acc.data()->{{field.name}}->release().value(); |
| 75 {% elif field.kind|is_interface_kind %} | 90 {% elif field.kind|is_interface_kind %} |
| 76 mojo::internal::Interface_Data* {{field.name}} = | 91 mojo::internal::Interface_Data* {{field.name}} = |
| 77 reinterpret_cast<mojo::internal::Interface_Data*>( | 92 reinterpret_cast<mojo::internal::Interface_Data*>( |
| 78 &result->data.f_{{field.name}}); | 93 &result->data.f_{{field.name}}); |
| 79 mojo::internal::InterfacePointerToData( | 94 mojo::internal::InterfacePointerToData( |
| 80 input_acc.data()->{{field.name}}->Pass(), {{field.name}}); | 95 input_acc.data()->{{field.name}}->Pass(), {{field.name}}); |
| 81 {% elif field.kind|is_enum_kind %} | 96 {% elif field.kind|is_enum_kind %} |
| 82 result->data.f_{{field.name}} = | 97 result->data.f_{{field.name}} = |
| 83 static_cast<int32_t>(input_acc.data()->{{field.name}}); | 98 static_cast<int32_t>(input_acc.data()->{{field.name}}); |
| 84 {% else %} | 99 {% else %} |
| 85 result->data.f_{{field.name}} = input_acc.data()->{{field.name}}; | 100 result->data.f_{{field.name}} = input_acc.data()->{{field.name}}; |
| 86 {%- endif %} | 101 {%- endif %} |
| 87 break; | 102 break; |
| 88 } | 103 } |
| 89 {%- endfor %} | 104 {%- endfor %} |
| 90 default: | 105 default: |
| 106 // TODO(vardhan): Should this return an error code instead? |
| 91 MOJO_CHECK(false) << "No sane way to serialize a union with an unknown t
ag."; | 107 MOJO_CHECK(false) << "No sane way to serialize a union with an unknown t
ag."; |
| 92 break; | 108 break; |
| 93 } | 109 } |
| 94 } else if (inlined) { | 110 } else if (inlined) { |
| 95 result->set_null(); | 111 result->set_null(); |
| 96 } else { | 112 } else { |
| 97 result = nullptr; | 113 result = nullptr; |
| 98 } | 114 } |
| 99 *output = result; | 115 *output = result; |
| 116 return mojo::internal::ValidationError::VALIDATION_ERROR_NONE; |
| 100 } | 117 } |
| 101 | 118 |
| 102 void Deserialize_(internal::{{union.name}}_Data* input, | 119 void Deserialize_(internal::{{union.name}}_Data* input, |
| 103 {{union.name}}* output) { | 120 {{union.name}}* output) { |
| 104 if (input && !input->is_null()) { | 121 if (input && !input->is_null()) { |
| 105 mojo::internal::UnionAccessor<{{union.name}}> result_acc(output); | 122 mojo::internal::UnionAccessor<{{union.name}}> result_acc(output); |
| 106 switch (input->tag) { | 123 switch (input->tag) { |
| 107 {#- TODO(vardhan): There is a lot of overlap with struct_macros.deserialize() | 124 {#- TODO(vardhan): There is a lot of overlap with struct_macros.deserialize() |
| 108 here, is it possible to merge? (currently looks very hairy) #} | 125 here, is it possible to merge? (currently looks very hairy) #} |
| 109 {% for field in union.fields %} | 126 {% for field in union.fields %} |
| (...skipping 28 matching lines...) Expand all Loading... |
| 138 break; | 155 break; |
| 139 } | 156 } |
| 140 {%- endfor %} | 157 {%- endfor %} |
| 141 default: | 158 default: |
| 142 MOJO_LOG(WARNING) << "Deserializing {{union.name}} with unknown tag!"; | 159 MOJO_LOG(WARNING) << "Deserializing {{union.name}} with unknown tag!"; |
| 143 // No way to deserialize the data when we encounter an unknown tag. | 160 // No way to deserialize the data when we encounter an unknown tag. |
| 144 break; | 161 break; |
| 145 } | 162 } |
| 146 } | 163 } |
| 147 } | 164 } |
| OLD | NEW |