# 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.

_API_UTIL_NAMESPACE = 'json_schema_compiler::util'


class UtilCCHelper(object):
  """A util class that generates code that uses
  tools/json_schema_compiler/util.cc.
  """
  def __init__(self, type_manager):
    self._type_manager = type_manager

  def PopulateArrayFromList(self, src, dst, optional):
    """Generates code to get an array from src into dst.

    src: ListValue*
    dst: std::vector or scoped_ptr<std::vector>
    """
    populate_list_fn = ('PopulateOptionalArrayFromList' if optional
                            else 'PopulateArrayFromList')
    return ('%s::%s(*%s, &%s)') % (_API_UTIL_NAMESPACE,
                                   populate_list_fn,
                                   src,
                                   dst)

  def CreateValueFromArray(self, src, optional):
    """Generates code to create a scoped_pt<Value> from the array at src.

    |src| The variable to convert, either a vector or scoped_ptr<vector>.
    |optional| Whether |type_| was optional. Optional types are pointers so
        must be treated differently.
    """
    if optional:
      name = 'CreateValueFromOptionalArray'
    else:
      name = 'CreateValueFromArray'
    return '%s::%s(%s)' % (_API_UTIL_NAMESPACE, name, src)

  def GetIncludePath(self):
    return '#include "tools/json_schema_compiler/util.h"'

  def GetValueTypeString(self, value, is_ptr=False):
    call = '.GetType()'
    if is_ptr:
      call = '->GetType()'
    return 'json_schema_compiler::util::ValueTypeToString(%s%s)' % (value, call)
