# 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/package.gni")
import("//build/rust/rustc_binary.gni")

rustc_binary("echo_server_rust_bin") {
  name = "echo_server_rust"
  edition = "2018"

  deps = [
    "//garnet/examples/fidl/services:echo-rustc",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/fuchsia-runtime",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:thiserror",
  ]
}

deprecated_fuchsia_component("echo_server_rust_component") {
  manifest = rebase_path("../meta/echo_server.cmx")
  manifest_dest = "meta/echo_server_rust.cmx"
  deps = [ ":echo_server_rust_bin" ]

  binary = "echo_server_rust"
  binary_dest = "bin/echo_server"
}

package("echo_server_rust") {
  components = [ ":echo_server_rust_component" ]
}
