# Copyright 2019 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")

if (is_host) {
  rustc_library("lib") {
    name = "ffx_daemon"
    version = "0.1.0"
    edition = "2021"
    with_unit_tests = true

    deps = [
      "//sdk/fidl/fuchsia.developer.ffx:fuchsia.developer.ffx-rustc",
      "//sdk/fidl/fuchsia.developer.remotecontrol:fuchsia.developer.remotecontrol-rustc",
      "//sdk/fidl/fuchsia.diagnostics:fuchsia.diagnostics-rustc",
      "//sdk/fidl/fuchsia.hardware.power.statecontrol:fuchsia.hardware.power.statecontrol-rustc",
      "//sdk/fidl/fuchsia.logger:fuchsia.logger-rustc",
      "//sdk/fidl/fuchsia.net:fuchsia.net-rustc",
      "//sdk/fidl/fuchsia.overnet:fuchsia.overnet-rustc",
      "//sdk/fidl/fuchsia.overnet.protocol:fuchsia.overnet.protocol-rustc",
      "//src/connectivity/overnet/lib/ascendd",
      "//src/connectivity/overnet/lib/hoist",
      "//src/developer/ffx:ffx_lib_args",
      "//src/developer/ffx/config:lib",
      "//src/developer/ffx/daemon/core:lib",
      "//src/developer/ffx/daemon/events:lib",
      "//src/developer/ffx/daemon/protocols:ffx_daemon_protocols_lib",
      "//src/developer/ffx/daemon/target:lib",
      "//src/developer/ffx/lib/addr:lib",
      "//src/developer/ffx/lib/daemonize:lib",
      "//src/developer/ffx/lib/diagnostics:lib",
      "//src/developer/ffx/lib/errors:lib",
      "//src/developer/ffx/lib/metrics:lib",
      "//src/developer/ffx/lib/protocols:lib",
      "//src/developer/ffx/lib/rcs:lib",
      "//src/developer/ffx/lib/stream_util:lib",
      "//src/developer/ffx/lib/version:lib",
      "//src/lib/analytics/rust:lib",
      "//src/lib/async-utils",
      "//src/lib/diagnostics/data/rust",
      "//src/lib/diagnostics/selectors",
      "//src/lib/fidl/rust/fidl",
      "//src/lib/fuchsia-async",
      "//third_party/rust_crates:anyhow",
      "//third_party/rust_crates:argh",
      "//third_party/rust_crates:async-lock",
      "//third_party/rust_crates:async-trait",
      "//third_party/rust_crates:blocking",
      "//third_party/rust_crates:chrono",
      "//third_party/rust_crates:futures",
      "//third_party/rust_crates:futures-lite",
      "//third_party/rust_crates:libc",
      "//third_party/rust_crates:log",
      "//third_party/rust_crates:serde_json",
      "//third_party/rust_crates:tempfile",
      "//third_party/rust_crates:thiserror",
      "//third_party/rust_crates:tracing",
    ]

    test_deps = [ "//third_party/rust_crates:assert_matches" ]

    sources = [
      "src/constants.rs",
      "src/daemon.rs",
      "src/lib.rs",
    ]
    inputs = [ "data/config.json" ]
  }
}

group("tests") {
  testonly = true
  deps = [
    ":lib_test($host_toolchain)",
    "core:tests($host_toolchain)",
    "events:tests($host_toolchain)",
    "protocols:tests($host_toolchain)",
    "target:tests($host_toolchain)",
  ]
}
