# 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-rustc",
    "//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"
}
