# 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/rust/rustc_binary.gni")
import("//build/rust/rustc_library.gni")
import("//third_party/cobalt/metrics_registry.gni")

group("tests") {
  testonly = true
  deps = [ ":emergency-tests" ]
}

rustc_binary("bin") {
  edition = "2021"
  name = "emergency"

  # Generates a GN target for unit-tests with the label `bin_test`, and
  # a binary named `emergency_bin_test`.
  with_unit_tests = true

  deps = [
    ":emergency_metrics_registry_rustlib",
    ":lib",
    "//sdk/fidl/fuchsia.location:fuchsia.location_rust",
    "//sdk/fidl/fuchsia.location.position:fuchsia.location.position_rust",
    "//sdk/fidl/fuchsia.location.sensor:fuchsia.location.sensor_rust",
    "//sdk/fidl/fuchsia.metrics:fuchsia.metrics_rust",
    "//sdk/fidl/fuchsia.net.http:fuchsia.net.http_rust",
    "//src/lib/cobalt/rust/builders",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fidl/rust/fidl-contrib",
    "//src/lib/fuchsia",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:tracing",
  ]

  test_deps = [
    "//sdk/fidl/fuchsia.wlan.policy:fuchsia.wlan.policy_rust",
    "//src/lib/fidl/rust/fidl",
    "//third_party/rust_crates:assert_matches",
    "//third_party/rust_crates:async-trait",
    "//third_party/rust_crates:test-case",
  ]

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

rustc_library("lib") {
  edition = "2021"
  name = "emergency_lib"

  # Generates a GN target for unit-tests with the label `lib_test`, and
  # a binary named `emergency_lib_lib_test`.
  with_unit_tests = true

  deps = [
    "//sdk/fidl/fuchsia.location.position:fuchsia.location.position_rust",
    "//sdk/fidl/fuchsia.mem:fuchsia.mem_rust",
    "//sdk/fidl/fuchsia.net.http:fuchsia.net.http_rust",
    "//sdk/fidl/fuchsia.wlan.policy:fuchsia.wlan.policy_rust",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:async-trait",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:itertools",
    "//third_party/rust_crates:serde_json",
    "//third_party/rust_crates:static_assertions",
    "//third_party/rust_crates:thiserror",
  ]

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

  sources = [
    "src/bss_cache.rs",
    "src/bss_resolver.rs",
    "src/lib.rs",
  ]
}

fuchsia_package_with_single_component("emergency") {
  deps = [ ":bin" ]
  manifest = "meta/emergency.cml"
}

fuchsia_unittest_component("emergency-test") {
  deps = [ ":bin_test" ]
}

fuchsia_unittest_component("emergency-lib-test") {
  deps = [ ":lib_test" ]
}

fuchsia_test_package("emergency-tests") {
  test_components = [
    ":emergency-test",
    ":emergency-lib-test",
  ]
}

metrics_registry("emergency_metrics_registry") {
  # This must match the ID of our Cobalt project as specified in:
  # //third_party/cobalt_config/projects.yaml
  project_id = 4
  generate_rust = true
}
