# Copyright 2025 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/bind/bind.gni")
import("//build/components.gni")
import("//build/drivers.gni")
import("//build/test.gni")

driver_bind_rules("bind") {
  rules = "meta/rust-driver.bind"
  bind_output = "rust.bindbc"
  deps = [ "//examples/drivers/bind/bindlib:gizmo.example" ]
}

fuchsia_rust_driver("driver") {
  edition = "2024"

  output_name = "power_rust_driver"
  sources = [ "src/lib.rs" ]
  deps = [
    "//sdk/fidl/fuchsia.driver.framework:fuchsia.driver.framework_rust",
    "//sdk/lib/driver/component/rust",
    "//sdk/lib/driver/power/rust",
    "//sdk/lib/driver/runtime/rust",
    "//sdk/rust/zx",
    "//src/devices/bind/fuchsia.test:fuchsia.test_rust",
    "//src/lib/fidl/rust/fidl",
    "//third_party/rust_crates:log",
  ]
}

fuchsia_driver_component("component") {
  component_name = "power_rust_driver"
  manifest = "meta/rust-driver.cml"
  deps = [
    ":bind",
    ":driver",
  ]
  info = "meta/component-info.json"
}

fuchsia_driver_package("pkg") {
  package_name = "power_rust_driver"
  driver_components = [ ":component" ]
}

rustc_test("realm-test") {
  output_name = "power-rust-driver-realm-test"
  edition = "2024"
  testonly = true
  source_root = "realm_test.rs"
  sources = [ "realm_test.rs" ]
  deps = [
    "//sdk/fidl/fuchsia.driver.test:fuchsia.driver.test_rust",
    "//sdk/fidl/fuchsia.power.system:fuchsia.power.system_rust",
    "//sdk/lib/driver_test_realm/realm_builder/rust",
    "//sdk/rust/zx",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/fuchsia-component-test",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:futures",
  ]
}

fuchsia_unittest_package("realm-test-pkg") {
  package_name = "power-rust-driver-realm-test"
  deps = [
    # Test component
    ":realm-test",

    # The driver
    ":component",
  ]

  # There's expected error logs that happen due to races in driver enumeration.
  test_specs = {
    log_settings = {
      max_severity = "ERROR"
    }
  }
}

group("hermetic_tests") {
  testonly = true
  deps = [ ":realm-test-pkg" ]
}
