# 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/config.gni")
import("//build/rust/rustc_library.gni")
import("//src/sys/build/components.gni")
import("//src/sys/build/fuchsia_test_package.gni")

rustc_library("fuchsia-hyper") {
  name = "fuchsia_hyper"
  edition = "2018"
  version = "0.1.0"
  with_unit_tests = true
  deps = [
    "//src/lib/fuchsia-async",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:hex",
    "//third_party/rust_crates:http",
    "//third_party/rust_crates:hyper",
    "//third_party/rust_crates:hyper-rustls",
    "//third_party/rust_crates:log",
    "//third_party/rust_crates:lru-cache-v0_1_2",
    "//third_party/rust_crates:parking_lot",
    "//third_party/rust_crates:pin-project",
    "//third_party/rust_crates:rustls",
    "//third_party/rust_crates:tokio",
  ]
  test_deps = [
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:matches",
    "//third_party/rust_crates:rand",
    "//third_party/rust_crates:webpki",
  ]
  if (is_host) {
    deps += [
      "//third_party/rust_crates:async-net",
      "//third_party/rust_crates:rustls-native-certs-v0_3_0",
      "//third_party/rust_crates:tower-service-v0_3_0",
    ]
  } else {
    deps += [
      "//garnet/lib/rust/webpki-roots-fuchsia",
      "//sdk/fidl/fuchsia.net:fuchsia.net-rustc",
      "//sdk/fidl/fuchsia.posix.socket:fuchsia.posix.socket-rustc",
      "//src/lib/fuchsia-component",
      "//src/lib/network/fidl_fuchsia_net_ext",
      "//src/lib/zircon/rust:fuchsia-zircon",
      "//src/sys/lib/fidl-connector",
      "//third_party/rust_crates:itertools",
      "//third_party/rust_crates:libc",
      "//third_party/rust_crates:socket2",
    ]
    test_deps += [
      "//sdk/fidl/fuchsia.net.interfaces:fuchsia.net.interfaces-rustc",
      "//sdk/fidl/fuchsia.netstack:fuchsia.netstack-rustc",
      "//src/lib/fidl/rust/fidl",
      "//src/lib/fuchsia",
      "//third_party/rust_crates:test-case",
    ]
  }

  sources = [
    "src/lib.rs",
    "src/session_cache.rs",
  ]
  if (is_host) {
    sources += [ "src/not_fuchsia.rs" ]
  } else {
    sources += [
      "src/fuchsia.rs",
      "src/happy_eyeballs.rs",
    ]
  }
}

fuchsia_component("fuchsia-hyper-lib-test") {
  testonly = true
  manifest = "meta/fuchsia_hyper_lib_test.cmx"
  deps = [ ":fuchsia-hyper_test" ]
}

fuchsia_test_package("fuchsia-hyper-tests") {
  test_components = [ ":fuchsia-hyper-lib-test" ]
}

group("tests") {
  testonly = true
  deps = [
    ":fuchsia-hyper-tests",
    ":fuchsia-hyper_test($host_toolchain)",
  ]
}
