# Copyright 2022 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.

# This file was generated by the `fx create` command. The template
# is located at `//tools/create/templates/component-default/BUILD.gn.tmpl-rust`.

import("//build/components.gni")
import("//build/config.gni")
import("//build/rust/rustc_binary.gni")
import("//src/sys/core/build/core_shard.gni")

group("progress-sender") {
  deps = [ ":package" ]
}

rustc_binary("bin") {
  output_name = "progress-sender"

  with_unit_tests = false

  deps = [
    "//sdk/fidl/fuchsia.recovery.ui:fuchsia.recovery.ui_rust",
    "//src/lib/fuchsia",
    "//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:futures",
    "//third_party/rust_crates:rand",
  ]

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

fuchsia_component("component") {
  component_name = "progress-sender"
  manifest = "meta/progress-sender.cml"
  deps = [ ":bin" ]
}

fuchsia_package("package") {
  package_name = "progress-sender"
  deps = [ ":component" ]
}

# The core realm shard to be used by example users
core_shard("progress-sender-core-shard") {
  shard_file = "meta/progress-sender.core_shard.cml"
}
