# Copyright 2020 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/go/go_binary.gni")
import("//build/go/go_library.gni")
import("//build/go/go_test.gni")
import("//build/host.gni")
import("//build/testing/host_test_data.gni")

go_library("gopkg") {
  name = "go.fuchsia.dev/fuchsia/tools/fidl/fidlgen_rust/..."
  deps = [
    "//garnet/go/src/fidl/compiler/backend/common",
    "//garnet/go/src/fidl/compiler/backend/types",
  ]
}

go_binary("fidlgen_rust") {
  gopackage = "go.fuchsia.dev/fuchsia/tools/fidl/fidlgen_rust"

  sdk_category = "partner"
  deps = [ ":gopkg" ]
}

install_host_tools("host") {
  deps = [ ":fidlgen_rust" ]
  outputs = [ "fidlgen_rust" ]
}

if (is_host) {
  go_test("fidlgen_rust_test") {
    gopackages = [ "go.fuchsia.dev/fuchsia/tools/fidl/fidlgen_rust/codegen" ]
    args = [
      "--test_data_dir",
      rebase_path("$root_out_dir/test_data/fidlgen", root_build_dir),
      "--rustfmt",
      rebase_path("$root_out_dir/test_data/fidlgen_rust", root_build_dir),
      "--rustfmt-toml",
      rebase_path("$root_out_dir/test_data/fidlgen_rust/rustfmt.toml",
                  root_build_dir),
    ]
    deps = [
      ":gopkg",
      "//garnet/go/src/fidl/compiler/backend/typestest",
    ]
    non_go_deps = [ ":rustfmt" ]
  }

  host_test_data("rustfmt") {
    sources = [
      "//prebuilt/third_party/rust_tools/$host_platform/bin/rustfmt",
      "//rustfmt.toml",
    ]
    outputs = [ "$root_out_dir/test_data/fidlgen_rust/{{source_file_part}}" ]
  }
}
