# 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/components.gni")
import("//build/config.gni")
import("//build/rust/rustc_binary.gni")
import("//build/rust/rustc_library.gni")
import("//build/rust/rustc_test.gni")
import("//build/testing/test_spec.gni")

group("diagnostics-bridge") {
  public_deps = [ ":lib" ]
}

group("tests") {
  testonly = true
  deps = [ ":remote-diagnostics-bridge-tests" ]
}

rustc_library("lib") {
  name = "diagnostics-bridge"
  edition = "2021"

  with_unit_tests = true

  deps = [
    "//sdk/fidl/fuchsia.developer.remotecontrol:fuchsia.developer.remotecontrol-rustc",
    "//sdk/fidl/fuchsia.diagnostics:fuchsia.diagnostics-rustc",
    "//sdk/fidl/fuchsia.logger:fuchsia.logger-rustc",
    "//sdk/fidl/fuchsia.overnet:fuchsia.overnet-rustc",
    "//sdk/fidl/fuchsia.overnet.protocol:fuchsia.overnet.protocol-rustc",
    "//src/connectivity/overnet/lib/hoist",
    "//src/diagnostics/iquery:lib",
    "//src/lib/diagnostics/data/rust",
    "//src/lib/diagnostics/reader/rust",
    "//src/lib/diagnostics/selectors",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/syslog/rust:syslog",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:assert_matches",
    "//third_party/rust_crates:async-trait",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:serde_json",
    "//third_party/rust_crates:thiserror",
    "//third_party/rust_crates:tracing",
  ]

  sources = [ "src/lib.rs" ]
}

fuchsia_unittest_package("remote-diagnostics-bridge-tests") {
  manifest = "meta/diagnostics_bridge_lib_test.cml"
  deps = [ ":lib_test" ]
}
