# Copyright 2021 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/rust/rustc_library.gni")
import("//build/rust/rustc_macro.gni")
import("//src/developer/ffx/build/protocols.gni")

template("ffx_protocols") {
  output_name = target_name
  if (defined(invoker.name)) {
    output_name = invoker.name
  }

  protocol_version = "0.1.0"
  if (defined(invoker.version)) {
    protocol_version = invoker.version
  }

  protocol_deps = []
  if (defined(invoker.deps)) {
    protocol_deps += invoker.deps
  }

  protocol_sources = []
  if (defined(invoker.sources)) {
    protocol_sources += invoker.sources
  }

  protocols_gen = output_name + "_gen"
  protocols(protocols_gen) {
    output_name = "macros.rs"
    deps = protocol_deps
  }

  protocol_deps += [ ":" + protocols_gen ]

  protocols_macro_lib = output_name + "_macros"
  rustc_macro(protocols_macro_lib) {
    output_name = protocols_macro_lib
    version = protocol_version
    edition = "2018"
    source_root = "$target_gen_dir/macros.rs"
    sources = [ "$target_gen_dir/macros.rs" ]
    deps = protocol_deps + [
             "//src/developer/ffx/lib/protocols:lib",
             "//src/developer/ffx/lib/protocols/dependencies:lib",
             "//src/lib/fidl/rust/fidl",
             "//third_party/rust_crates:quote",
           ]
  }

  rustc_library(output_name + "_lib") {
    name = output_name
    version = protocol_version
    edition = "2018"
    with_unit_tests = true
    deps = protocol_deps + [ ":" + protocols_macro_lib ] + [
             "//src/developer/ffx/lib/protocols:lib",
             "//src/lib/fidl/rust/fidl",
           ]

    sources = protocol_sources
  }
}
