OLD | NEW |
1 {% from "enum_macros.tmpl" import enum_decl -%} | 1 {% from "enum_macros.tmpl" import enum_decl -%} |
2 class {{struct.name}} { | 2 class {{struct.name}} { |
3 public: | 3 public: |
4 using Data_ = internal::{{struct.name}}_Data; | 4 using Data_ = internal::{{struct.name}}_Data; |
5 | 5 |
6 {#--- Enums #} | 6 {#--- Enums #} |
7 {%- for enum in struct.enums -%} | 7 {%- for enum in struct.enums -%} |
8 {{enum_decl(enum, is_static=true)|indent(2)}} | 8 {{enum_decl(enum, is_static=true)|indent(2)}} |
9 {%- endfor %} | 9 {%- endfor %} |
10 | 10 |
(...skipping 26 matching lines...) Expand all Loading... |
37 | 37 |
38 // Returns true on successful serialization. On failure, part of the data may | 38 // Returns true on successful serialization. On failure, part of the data may |
39 // be serialized, until the point of failure. This API does not support | 39 // be serialized, until the point of failure. This API does not support |
40 // serializing handles. | 40 // serializing handles. |
41 // | 41 // |
42 // TODO(vardhan): For now, we return true for success. Should we define a | 42 // TODO(vardhan): For now, we return true for success. Should we define a |
43 // public error type for serialization? (we shouldn't reuse | 43 // public error type for serialization? (we shouldn't reuse |
44 // internal::ValidationError). | 44 // internal::ValidationError). |
45 bool Serialize(void* buf, size_t buf_size); | 45 bool Serialize(void* buf, size_t buf_size); |
46 | 46 |
47 // Deserializes the given |buf| representing a serialized version of this | 47 // Deserializes the given |buf| of given size |buf_size| representing a |
48 // struct. Assumes that the serialized |buf| is valid. | 48 // serialized version of this struct. The buffer is validated before |
| 49 // it is deserialized. Returns true on successful deserialization. |
49 // | 50 // |
50 // TODO(vardhan): | 51 // TODO(vardhan): Recover the validation error if there is one? |
51 // - Should we pass in how big |buf| is and validate that it is | 52 bool Deserialize(void* buf, size_t buf_size); |
52 // <= GetSerializedSize()? If so, should this validation happen all the | |
53 // time? | |
54 // - Deserialize() will CHECK-fail if you try to deserialize something with | |
55 // a bad offset, etc. For IPC, we |Validate()| before running | |
56 // deserialization if we want safety, but we probably want a recoverable | |
57 // error for this API. | |
58 // - What's the validation story? | |
59 void Deserialize(void* buf); | |
60 | 53 |
61 {% if struct|is_cloneable_kind %} | 54 {% if struct|is_cloneable_kind %} |
62 {{struct.name}}Ptr Clone() const; | 55 {{struct.name}}Ptr Clone() const; |
63 {%- endif %} | 56 {%- endif %} |
64 bool Equals(const {{struct.name}}& other) const; | 57 bool Equals(const {{struct.name}}& other) const; |
65 | 58 |
66 {#--- Struct members #} | 59 {#--- Struct members #} |
67 {% for field in struct.fields %} | 60 {% for field in struct.fields %} |
68 {%- set type = field.kind|cpp_wrapper_type %} | 61 {%- set type = field.kind|cpp_wrapper_type %} |
69 {%- set name = field.name %} | 62 {%- set name = field.name %} |
70 {{type}} {{name}}; | 63 {{type}} {{name}}; |
71 {%- endfor %} | 64 {%- endfor %} |
72 }; | 65 }; |
73 | 66 |
74 {#--- Enum Operators #} | 67 {#--- Enum Operators #} |
75 {% from "enum_macros.tmpl" import global_enum_operators_decl -%} | 68 {% from "enum_macros.tmpl" import global_enum_operators_decl -%} |
76 {%- for enum in struct.enums %} | 69 {%- for enum in struct.enums %} |
77 {{global_enum_operators_decl(enum, class_name=struct.name)}} | 70 {{global_enum_operators_decl(enum, class_name=struct.name)}} |
78 {%- endfor %} | 71 {%- endfor %} |
OLD | NEW |