# 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/config.gni")
import("//build/package.gni")
import("//build/rust/rustc_binary.gni")
import("//build/rust/rustc_library.gni")
import("//build/rust/rustc_test.gni")
import("//build/test/test_package.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 = "2018"

  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/lib/diagnostics/data/rust",
    "//src/lib/diagnostics/reader/rust",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/syslog/rust:syslog",
    "//third_party/rust_crates:anyhow",
    "//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" ]
}

test_package("remote-diagnostics-bridge-tests") {
  deps = [ ":lib_test" ]

  v2_tests = [
    {
      name = "diagnostics_bridge_lib_test"
      environments = basic_envs
    },
  ]
}
