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

group("stash") {
  testonly = true
  deps = [
    ":pkg",
    ":tests",
  ]
}

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

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

  deps = [
    "//sdk/fidl/fuchsia.mem:fuchsia.mem-rustc",
    "//sdk/fidl/fuchsia.stash:fuchsia.stash-rustc",
    "//sdk/fidl/fuchsia.stash:rust_measure_tape_for_key_value",
    "//sdk/fidl/fuchsia.stash:rust_measure_tape_for_list_item",
    "//src/lib/diagnostics/inspect/rust",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/syslog/rust:syslog",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//src/lib/zircon/rust:fuchsia-zircon-sys",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:byteorder",
    "//third_party/rust_crates:bytes",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:parking_lot",
    "//third_party/rust_crates:tempfile",
    "//third_party/rust_crates:thiserror",
  ]

  sources = [
    "src/accessor.rs",
    "src/instance.rs",
    "src/main.rs",
    "src/store.rs",
  ]
}

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

fuchsia_component("stash_secure_v2") {
  component_name = "stash_secure"
  deps = [ ":bin" ]
  manifest = "meta/stash_secure.cml"
}

fuchsia_component("stash_cmp") {
  component_name = "stash"
  deps = [ ":bin" ]
  manifest = "meta/stash.cmx"
}
fuchsia_component("stash_v2") {
  component_name = "stash"
  deps = [ ":bin" ]
  manifest = "meta/stash.cml"
}

fuchsia_component("stash2_cmp") {
  component_name = "stash2"
  deps = [ ":bin" ]
  manifest = "meta/stash2.cmx"
}
fuchsia_component("stash2_v2") {
  component_name = "stash2"
  deps = [ ":bin" ]
  manifest = "meta/stash2.cml"
}

fuchsia_package("pkg") {
  package_name = "stash"
  deps = [
    ":stash2_cmp",
    ":stash2_v2",
    ":stash_cmp",
    ":stash_secure",
    ":stash_secure_v2",
    ":stash_v2",
  ]
}

fuchsia_unittest_package("stash-tests") {
  manifest = "meta/stash_bin_test.cml"
  deps = [ ":bin_test" ]
}
