# Copyright 2014 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.
"""Helper functions useful when writing scripts that are run from GN's
exec_script function."""


class GNException(Exception):
    pass


def ToGNString(value, allow_dicts=True):
    """Prints the given value to stdout.

  allow_dicts indicates if this function will allow converting dictionaries
  to GN scopes. This is only possible at the top level, you can't nest a
  GN scope in a list, so this should be set to False for recursive calls."""
    if isinstance(value, str):
        if value.find('\n') >= 0:
            raise GNException("Trying to print a string with a newline in it.")
        return '"' + value.replace('"', '\\"') + '"'

    if isinstance(value, list):
        return '[ %s ]' % ', '.join(ToGNString(v) for v in value)

    if isinstance(value, dict):
        if not allow_dicts:
            raise GNException("Attempting to recursively print a dictionary.")
        result = ""
        for key in value:
            if not isinstance(key, str):
                raise GNException("Dictionary key is not a string.")
            result += "%s = %s\n" % (key, ToGNString(value[key], False))
        return result

    if isinstance(value, int):
        return str(value)

    raise GNException("Unsupported type when printing to GN.")
