# Copyright 2021 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/fidl/fidl.gni")
import("//build/rust/rustc_binary.gni")

fidl("fidl") {
  testonly = true
  name = "fuchsia.netemul.test"
  sources = [ "counter.test.fidl" ]
  public_deps = [
    "//sdk/fidl/fuchsia.component",
    "//sdk/fidl/fuchsia.io",
    "//zircon/vdso/zx",
  ]
}

rustc_binary("bin") {
  testonly = true
  name = "counter"
  edition = "2021"
  deps = [
    ":fidl_rust",
    "//src/lib/diagnostics/inspect/runtime/rust",
    "//src/lib/diagnostics/inspect/rust",
    "//src/lib/fdio/rust:fdio",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia",
    "//src/lib/fuchsia-component",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:argh",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:tracing",
  ]
  sources = [ "src/main.rs" ]
  configs -= [ "//build/config/rust/lints:allow_unused_results" ]
}

fuchsia_component("counter") {
  testonly = true
  manifest = "meta/counter.cml"
  deps = [ ":bin" ]
}

fuchsia_component("devfs-subdir-user") {
  testonly = true
  manifest = "meta/devfs-subdir-user.cml"
  deps = [ ":bin" ]
}

fuchsia_component("counter-without-program") {
  testonly = true
  manifest = "meta/counter-without-program.cml"
  deps = [ ":bin" ]
}
