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

rustc_binary("bin") {
  name = "lowpanservice"
  with_unit_tests = true
  edition = "2018"
  deps = [
    "//sdk/fidl/fuchsia.factory.lowpan:fuchsia.factory.lowpan-rustc",
    "//sdk/fidl/fuchsia.lowpan:fuchsia.lowpan-rustc",
    "//sdk/fidl/fuchsia.lowpan.device:fuchsia.lowpan.device-rustc",
    "//sdk/fidl/fuchsia.lowpan.test:fuchsia.lowpan.test-rustc",
    "//sdk/fidl/fuchsia.net:fuchsia.net-rustc",
    "//src/connectivity/lowpan/lib/lowpan_driver_common",
    "//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:async-trait",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:lazy_static",
    "//third_party/rust_crates:log",
    "//third_party/rust_crates:parking_lot",
    "//third_party/rust_crates:rand",
    "//third_party/rust_crates:regex",
    "//third_party/rust_crates:slab",
    "//third_party/rust_crates:thiserror",
  ]

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

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

group("service") {
  deps = [ ":lowpanservice" ]
}

fuchsia_unittest_package("lowpanservice-test") {
  manifest = "meta/lowpanservice-test.cmx"
  deps = [ ":bin_test" ]
  test_specs = {
    log_settings = {
      max_severity = "ERROR"
    }
  }
}

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