Home | History | Annotate | Download | only in json_schema_compiler
      1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 API_UTIL_NAMESPACE = 'json_schema_compiler::util'
      6 
      7 class UtilCCHelper(object):
      8   """A util class that generates code that uses
      9   tools/json_schema_compiler/util.cc.
     10   """
     11   def __init__(self, type_manager):
     12     self._type_manager = type_manager
     13 
     14   def PopulateArrayFromDictionary(self, array_prop, src, name, dst):
     15     """Generates code to get an array from a src.name into dst.
     16 
     17     src: DictionaryValue*
     18     dst: std::vector or scoped_ptr<std::vector>
     19     """
     20     prop = array_prop.item_type
     21     sub = {
     22         'namespace': API_UTIL_NAMESPACE,
     23         'name': name,
     24         'src': src,
     25         'dst': dst,
     26     }
     27 
     28     sub['type'] = self._type_manager.GetCppType(prop),
     29     if array_prop.optional:
     30       val = ('%(namespace)s::PopulateOptionalArrayFromDictionary'
     31           '(*%(src)s, "%(name)s", &%(dst)s)')
     32     else:
     33       val = ('%(namespace)s::PopulateArrayFromDictionary'
     34           '(*%(src)s, "%(name)s", &%(dst)s)')
     35 
     36     return val % sub
     37 
     38   def PopulateArrayFromList(self, array_prop, src, dst, optional):
     39     """Generates code to get an array from src into dst.
     40 
     41     src: ListValue*
     42     dst: std::vector or scoped_ptr<std::vector>
     43     """
     44     prop = array_prop.item_type
     45     sub = {
     46         'namespace': API_UTIL_NAMESPACE,
     47         'src': src,
     48         'dst': dst,
     49         'type': self._type_manager.GetCppType(prop),
     50     }
     51 
     52     if optional:
     53       val = '%(namespace)s::PopulateOptionalArrayFromList(*%(src)s, &%(dst)s)'
     54     else:
     55       val = '%(namespace)s::PopulateArrayFromList(*%(src)s, &%(dst)s)'
     56 
     57     return val % sub
     58 
     59   def CreateValueFromArray(self, array_prop, src, optional):
     60     """Generates code to create a scoped_pt<Value> from the array at src.
     61 
     62     src: std::vector or scoped_ptr<std::vector>
     63     """
     64     prop = array_prop.item_type
     65     sub = {
     66         'namespace': API_UTIL_NAMESPACE,
     67         'src': src,
     68         'type': self._type_manager.GetCppType(prop),
     69     }
     70 
     71     if optional:
     72       val = '%(namespace)s::CreateValueFromOptionalArray(%(src)s)'
     73     else:
     74       val = '%(namespace)s::CreateValueFromArray(%(src)s)'
     75 
     76     return val % sub
     77 
     78   def GetIncludePath(self):
     79     return '#include "tools/json_schema_compiler/util.h"'
     80 
     81   def GetValueTypeString(self, value, is_ptr=False):
     82     call = '.GetType()'
     83     if is_ptr:
     84       call = '->GetType()'
     85     return 'json_schema_compiler::util::ValueTypeToString(%s%s)' % (value, call)
     86