# Copyright 2019 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")

group("tests") {
  testonly = true
  deps = [
    ":element_session",
    ":element_session_tests",
  ]
}

rustc_binary("element_session_bin") {
  name = "element_session"
  with_unit_tests = true
  edition = "2018"

  deps = [
    "//sdk/fidl/fuchsia.session:fuchsia.session-rustc",
    "//sdk/fidl/fuchsia.sys2:fuchsia.sys2-rustc",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//src/session/fidl:session_examples-rustc",
    "//src/session/lib/element_management",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:rand",
    "//third_party/rust_crates:thiserror",
  ]
}

package("element_session") {
  deps = [ ":element_session_bin" ]

  meta = [
    {
      path = rebase_path("meta/element_session.cml")
      dest = "element_session.cm"
    },
  ]

  binaries = [
    {
      name = "element_session"
    },
  ]
}

package("element_session_tests") {
  testonly = true
  deps = [
    ":element_session_bin",
    ":element_session_bin_test",
  ]

  meta = [
    {
      path = "meta/element_session_bin_test.cml"
      dest = "element_session_bin_test.cm"
    },
  ]

  binaries = [
    {
      name = "element_session"
    },
  ]

  tests = [
    {
      name = "element_session_bin_test"
    },
  ]
}
