# Copyright 2017 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/package.gni")
import("//build/rust/rustc_binary.gni")
import("//build/test/test_package.gni")
import("//build/testing/environments.gni")

group("device_settings") {
  testonly = true
  deps = [
    ":bin",
    ":device_settings_manager",
    ":device_settings_manager_tests",
  ]
}

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

  deps = [
    "//sdk/fidl/fuchsia.devicesettings:fuchsia.devicesettings-rustc",
    "//src/lib/fdio/rust:fdio",
    "//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:bytes",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:parking_lot",
    "//third_party/rust_crates:tempfile",
    "//third_party/rust_crates:thiserror",
  ]
}

package("device_settings_manager") {
  deps = [ ":bin" ]

  binary = "device_settings_manager"

  meta = [
    {
      path = rebase_path("meta/device_settings_manager.cmx")
      dest = "device_settings_manager.cmx"
    },
  ]
}

test_package("device_settings_manager_tests") {
  deps = [ ":bin_test" ]

  tests = [
    {
      name = "device_settings_manager_bin_test"
      environments = basic_envs
    },
  ]
}

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