# Copyright 2018 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/compiled_action.gni")
import("//build/fidl/toolchain.gni")
import("//build/rust/toolchain.gni")

# Generates some Rust bindings for a FIDL library.
#
# The parameters for this template are defined in //build/fidl/fidl.gni. The
# relevant parameters in this template are:
#   - name.

template("fidl_rust") {
  assert(current_toolchain == rust_toolchain,
      "This template can only be used in $rust_toolchain.")

  not_needed(invoker, [
    "sdk_category",
    "sources"
  ])

  main_target_name = target_name
  generation_target_name = "${target_name}_rust_generate"

  library_name = target_name
  if (defined(invoker.name)) {
    library_name = invoker.name
  }

  underscore_name = exec_script(
        "//build/rust/fidl_crate_from_library.py",
        [
          "--name",
          library_name,
        ],
        "trim string"
  )

  fidl_target_gen_dir = get_label_info(":bogus($fidl_toolchain)", "target_gen_dir")
  file_stem = "$fidl_target_gen_dir/$underscore_name"
  json_representation = "$fidl_target_gen_dir/$target_name.fidl.json"

  compiled_action(generation_target_name) {
    forward_variables_from(invoker, [ "testonly" ])

    visibility = [
      ":*",
    ]

    tool = "//garnet/go/src/fidl:fidlgen"

    inputs = [
      json_representation,
    ]

    outputs = [
      "$file_stem.rs",
    ]

    args = [
      "--json",
      rebase_path(json_representation, root_build_dir),
      "--output-base",
      rebase_path(file_stem, root_build_dir),
      "--include-base",
      rebase_path(root_gen_dir, root_build_dir),
      "--generators",
      "rust",
    ]

    deps = [
      ":$main_target_name($fidl_toolchain)",
    ]
  }

  group(main_target_name) {
    forward_variables_from(invoker, [
      "public_deps",
      "testonly",
      "visibility",
    ])

    deps = [
      ":$generation_target_name",
    ]

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