# 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("all") {
  deps = [ ":input_session" ]
}

group("tests") {
  testonly = true
  deps = [
    ":input_session",
    ":input_session_tests",
  ]
}

rustc_binary("input_session_bin") {
  name = "input_session"
  with_unit_tests = true
  edition = "2018"

  deps = [
    "//src/lib/fuchsia-async",
    "//src/lib/syslog/rust:syslog",
    "//src/session/lib/input",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:async-trait",
  ]

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

package("input_session") {
  deps = [ ":input_session_bin" ]

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

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

package("input_session_tests") {
  testonly = true
  deps = [
    ":input_session_bin",
    ":input_session_bin_test",
  ]

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

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

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