# 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("//peridot/build/executable_package.gni")

group("all") {
  public_deps = [
    ":affinity_ranking_feature",
    ":annoyance_ranking_feature",
    ":dead_story_ranking_feature",
    ":interrupting_ranking_feature",
    ":kronk_ranking_feature",
    ":mod_pair_ranking_feature",
    ":proposal_hint_ranking_feature",
    ":query_match_ranking_feature",
    ":ranking_feature",
  ]
}

source_set("ranking_feature") {
  sources = [
    "ranking_feature.cc",
    "ranking_feature.h",
  ]

  deps = [
    "//garnet/public/lib/fidl/cpp",
    "//garnet/public/lib/fxl",
  ]

  public_deps = [
    "//peridot/bin/suggestion_engine:models",
    "//peridot/public/fidl/fuchsia.modular",
    "//third_party/rapidjson",
  ]
}

source_set("annoyance_ranking_feature") {
  sources = [
    "annoyance_ranking_feature.cc",
    "annoyance_ranking_feature.h",
  ]

  public_deps = [
    ":ranking_feature",
    "//peridot/public/fidl/fuchsia.modular",
  ]
}

executable("annoyance_ranking_feature_unittest") {
  testonly = true

  sources = [
    "annoyance_ranking_feature_unittest.cc",
  ]

  deps = [
    ":annoyance_ranking_feature",
    "//garnet/public/lib/gtest",
    "//third_party/googletest:gtest_main",
  ]
}

source_set("affinity_ranking_feature") {
  sources = [
    "affinity_ranking_feature.cc",
    "affinity_ranking_feature.h",
  ]

  public_deps = [
    ":ranking_feature",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/fxl",
    "//peridot/public/fidl/fuchsia.modular",
  ]
}

executable("affinity_ranking_feature_unittest") {
  testonly = true

  sources = [
    "affinity_ranking_feature_unittest.cc",
  ]

  deps = [
    ":affinity_ranking_feature",
    "//garnet/public/lib/gtest",
    "//third_party/googletest:gtest_main",
  ]
}

source_set("interrupting_ranking_feature") {
  sources = [
    "interrupting_ranking_feature.cc",
    "interrupting_ranking_feature.h",
  ]

  public_deps = [
    ":ranking_feature",
    "//peridot/public/fidl/fuchsia.modular",
  ]
}

executable("interrupting_ranking_feature_unittest") {
  testonly = true

  sources = [
    "interrupting_ranking_feature_unittest.cc",
  ]

  deps = [
    ":interrupting_ranking_feature",
    "//garnet/public/lib/gtest",
    "//third_party/googletest:gtest_main",
  ]
}

source_set("kronk_ranking_feature") {
  sources = [
    "kronk_ranking_feature.cc",
    "kronk_ranking_feature.h",
  ]

  public_deps = [
    ":ranking_feature",
    "//peridot/public/fidl/fuchsia.modular",
  ]
}

executable("kronk_ranking_feature_unittest") {
  testonly = true

  sources = [
    "kronk_ranking_feature_unittest.cc",
  ]

  deps = [
    ":kronk_ranking_feature",
    "//garnet/public/lib/gtest",
    "//third_party/googletest:gtest_main",
  ]
}

source_set("mod_pair_ranking_feature") {
  sources = [
    "mod_pair_ranking_feature.cc",
    "mod_pair_ranking_feature.h",
  ]

  public_deps = [
    ":ranking_feature",
    "//peridot/public/fidl/fuchsia.modular",
  ]

  deps = [
    "//garnet/public/lib/fxl",
    "//peridot/public/lib/context/cpp:context_helper",
    "//third_party/rapidjson",
  ]
}

executable("mod_pair_ranking_feature_unittest") {
  testonly = true

  sources = [
    "mod_pair_ranking_feature_unittest.cc",
  ]

  deps = [
    ":mod_pair_ranking_feature",
    "//garnet/public/lib/gtest",
    "//third_party/googletest:gtest_main",
  ]
}

source_set("proposal_hint_ranking_feature") {
  sources = [
    "proposal_hint_ranking_feature.cc",
    "proposal_hint_ranking_feature.h",
  ]

  public_deps = [
    ":ranking_feature",
    "//peridot/public/fidl/fuchsia.modular",
  ]
}

executable("proposal_hint_ranking_feature_unittest") {
  testonly = true

  sources = [
    "proposal_hint_ranking_feature_unittest.cc",
  ]

  deps = [
    ":proposal_hint_ranking_feature",
    "//garnet/public/lib/gtest",
    "//third_party/googletest:gtest_main",
  ]
}

source_set("query_match_ranking_feature") {
  sources = [
    "query_match_ranking_feature.cc",
    "query_match_ranking_feature.h",
  ]

  public_deps = [
    ":ranking_feature",
    "//peridot/public/fidl/fuchsia.modular",
  ]
}

executable("query_match_ranking_feature_unittest") {
  testonly = true

  sources = [
    "query_match_ranking_feature_unittest.cc",
  ]

  deps = [
    ":query_match_ranking_feature",
    "//garnet/public/lib/gtest",
    "//third_party/googletest:gtest_main",
  ]
}

source_set("dead_story_ranking_feature") {
  sources = [
    "dead_story_ranking_feature.cc",
    "dead_story_ranking_feature.h",
  ]

  public_deps = [
    ":ranking_feature",
    "//peridot/public/fidl/fuchsia.modular",
  ]
}

executable("dead_story_ranking_feature_unittest") {
  testonly = true

  sources = [
    "dead_story_ranking_feature_unittest.cc",
  ]

  deps = [
    ":dead_story_ranking_feature",
    "//garnet/public/lib/gtest",
    "//third_party/googletest:gtest_main",
  ]
}
