# Copyright 2014 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Converts a .json file to a C++ struct.
#
# Variables:
#
#   source (required)
#       Single file name of source .json file.
#
#   schema_file (required)
#       Single file name of the .json file that defines the schema.
#
#   namespace (required)
#       Namespace name to put result in.
#
#   visibility (optional)
#       Normal meaning.
template("json_to_struct") {
  assert(defined(invoker.source), "source required in $target_name")
  assert(defined(invoker.schema_file), "schema_file required in $target_name")
  assert(defined(invoker.namespace), "namespace required in $target_name")

  action_name = target_name + "_action"
  source_set_name = target_name

  action(action_name) {
    visibility = [ ":$source_set_name" ]
    script = "//tools/json_to_struct/json_to_struct.py"

    inputs = [
      "//tools/json_to_struct/element_generator.py",
      "//tools/json_to_struct/struct_generator.py",
      invoker.source,
      invoker.schema_file,
    ]

    out_dir = get_path_info(invoker.source, "gen_dir")
    out_name = get_path_info(invoker.source, "name")
    outputs = [
      "$out_dir/$out_name.cc",
      "$out_dir/$out_name.h",
    ]

    args = [
      rebase_path(invoker.source, root_build_dir),
      "--destbase=" + rebase_path(out_dir, root_build_dir),
      "--namespace=" + invoker.namespace,
      "--schema=" + rebase_path(invoker.schema_file, root_build_dir),
    ]
  }

  source_set(source_set_name) {
    if (defined(invoker.visibility)) {
      visibility = invoker.visibility
    }

    sources = get_target_outputs(":$action_name")

    deps = [ ":$action_name" ]

    if (defined(invoker.deps)) {
      deps += invoker.deps
    }
  }
}
