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

group("isolated_cache") {
  deps = [ ":isolated_cache_example" ]
}

group("tests") {
  testonly = true

  deps = [ ":isolated_cache_example_tests" ]
}

rustc_binary("bin") {
  name = "isolated_cache_example"
  with_unit_tests = true
  edition = "2018"

  deps = [
    "//sdk/fidl/fuchsia.sys.test:fuchsia.sys.test-rustc",
    "//src/lib/fuchsia",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//third_party/rust_crates:anyhow",
  ]

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

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

fuchsia_unittest_package("isolated_cache_example_tests") {
  manifest = "meta/isolated_cache_example_tests.cmx"
  deps = [ ":bin_test" ]
}
