| Index: tools/json_to_struct/struct_generator.py | 
| diff --git a/tools/json_to_struct/struct_generator.py b/tools/json_to_struct/struct_generator.py | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..501cb577e52d38eb6c01febb1ecc23b54c636e40 | 
| --- /dev/null | 
| +++ b/tools/json_to_struct/struct_generator.py | 
| @@ -0,0 +1,43 @@ | 
| +# Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
| +# Use of this source code is governed by a BSD-style license that can be | 
| +# found in the LICENSE file. | 
| + | 
| +def _GenerateArrayField(field_info): | 
| +  """Generate a string defining an array field in a C structure. | 
| +  """ | 
| +  contents = field_info['contents'] | 
| +  contents['field'] = '* ' + field_info['field'] | 
| +  if contents['type'] == 'array': | 
| +    raise RuntimeError('Nested arrays are not supported.') | 
| +  return (GenerateField(contents) + ';\n' + | 
| +          '  const size_t %s_size') % field_info['field']; | 
| + | 
| +def GenerateField(field_info): | 
| +  """Generate a string defining a field of the type specified by | 
| +  field_info['type'] in a C structure. | 
| +  """ | 
| +  field = field_info['field'] | 
| +  type = field_info['type'] | 
| +  if type == 'int': | 
| +    return 'const int %s' % field | 
| +  elif type == 'string': | 
| +    return 'const char* const %s' % field | 
| +  elif type == 'string16': | 
| +    return 'const wchar_t* const %s' % field | 
| +  elif type == 'enum': | 
| +    return 'const %s %s' % (field_info['ctype'], field) | 
| +  elif type == 'array': | 
| +    return _GenerateArrayField(field_info) | 
| +  else: | 
| +    raise RuntimeError('Unknown field type "%s"' % type) | 
| + | 
| +def GenerateStruct(type_name, schema): | 
| +  """Generate a string defining a structure containing the fields specified in | 
| +  the schema list. | 
| +  """ | 
| +  lines = []; | 
| +  lines.append('struct %s {' % type_name) | 
| +  for field_info in schema: | 
| +    lines.append('  ' + GenerateField(field_info) + ';') | 
| +  lines.append('};'); | 
| +  return '\n'.join(lines) + '\n'; | 
|  |