# 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/rust/rustc_library.gni")
import("//src/sys/build/components.gni")

config_data("enable-report-filing") {
  for_pkg = "triage-detect"
  sources = [ "configs/enable-filing.json" ]
  outputs = [ "config.json" ]
}

rustc_library("lib") {
  name = "detect"
  edition = "2018"
  with_unit_tests = true

  deps = [
    "//sdk/fidl/fuchsia.diagnostics:fuchsia.diagnostics-rustc",
    "//sdk/fidl/fuchsia.feedback:fuchsia.feedback-rustc",
    "//sdk/fidl/fuchsia.logger:fuchsia.logger-rustc",
    "//src/diagnostics/control:controller-rustc",
    "//src/diagnostics/lib/triage",
    "//src/diagnostics/lib/util/injectable-time",
    "//src/lib/diagnostics/inspect/derive",
    "//src/lib/diagnostics/inspect/rust",
    "//src/lib/diagnostics/reader/rust",
    "//src/lib/fdio/rust:fdio",
    "//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:argh",
    "//third_party/rust_crates:async-trait",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:glob",
    "//third_party/rust_crates:log",
    "//third_party/rust_crates:maplit",
    "//third_party/rust_crates:matches",
    "//third_party/rust_crates:serde",
    "//third_party/rust_crates:serde_derive",
    "//third_party/rust_crates:serde_json5",
    "//third_party/rust_crates:thiserror",
  ]

  sources = [
    "src/delay_tracker.rs",
    "src/diagnostics.rs",
    "src/lib.rs",
    "src/snapshot.rs",
    "src/triage_shim.rs",
  ]

  test_deps = []
}

fuchsia_component("triage-detect-component") {
  component_name = "triage-detect"
  deps = [
    "//src/diagnostics/config/triage:triage-detect",
    "//src/diagnostics/launcher:bin",
  ]
  manifest = "meta/triage-detect.cml"
}

fuchsia_package("triage-detect") {
  deps = [ ":triage-detect-component" ]
}

fuchsia_unittest_package("triage-detect-tests") {
  manifest = "meta/triage-detect-tests.cmx"
  deps = [ ":lib_test" ]
}

group("tests") {
  testonly = true
  deps = [
    ":triage-detect-tests",
    "//src/diagnostics/detect/integration",
  ]
}
