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

package("token_manager_factory") {
  deprecated_bare_package_url = "//build"

  deps = [
    "//garnet/bin/auth/token_manager_factory:token_manager_factory",
  ]

  binary = "rust_crates/token_manager_factory"

  meta = [
    {
      path = rebase_path("meta/token_manager_factory.cmx")
      dest = "token_manager_factory.cmx"
    },
  ]
}

package("account_manager") {
  deprecated_bare_package_url = "//build"

  deps = [
    "//garnet/bin/auth/account_manager:account_manager",
  ]

  binary = "rust_crates/account_manager"

  meta = [
    {
      path = rebase_path("meta/account_manager.cmx")
      dest = "account_manager.cmx"
    },
  ]
}

package("account_handler") {
  deprecated_bare_package_url = "//build"

  deps = [
    "//garnet/bin/auth/account_handler:account_handler",
  ]

  binary = "rust_crates/account_handler"

  meta = [
    {
      path = rebase_path("meta/account_handler.cmx")
      dest = "account_handler.cmx"
    },
  ]
}


package("auth_bin_unittests") {
  testonly = true

  deps = [
    "account_manager:account_manager",
    "account_handler:account_handler",
    "testing/dev_auth_provider:dev_auth_provider",
    "testing/dev_auth_provider_iotid:dev_auth_provider_iotid",
  ]

  tests = [
    { name = "account_manager_bin_test" },
    { name = "account_handler_bin_test" },
    { name = "dev_auth_provider_bin_test"},
    { name = "dev_auth_provider_iotid_bin_test"},
  ]
}
