# 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/components.gni")
import("//build/icu/icu_rustc_library.gni")
import("//third_party/cobalt/metrics_registry.gni")

metrics_registry("metrics_registry") {
  # This must match the ID of our Cobalt project as specified in:
  # third_party/cobalt_config/projects.yaml
  project_id = 19
  generate_rust = true
}

icu_rustc_library("input_pipeline") {
  with_unit_tests = true
  edition = "2021"

  icu_deps = [
    "//src/lib/icu_data/rust/icu_data:icu_data",
    "//third_party/rust_crates:rust_icu_sys",
    "//third_party/rust_crates:rust_icu_unorm2",
  ]
  deps = [
    ":input_pipeline_includes",
    ":metrics_registry_rustlib",
    "//sdk/fidl/fuchsia.factory:fuchsia.factory_rust",
    "//sdk/fidl/fuchsia.input:fuchsia.input_rust",
    "//sdk/fidl/fuchsia.input.injection:fuchsia.input.injection_rust",
    "//sdk/fidl/fuchsia.input.interaction:fuchsia.input.interaction_rust",
    "//sdk/fidl/fuchsia.input.interaction.observation:fuchsia.input.interaction.observation_rust",
    "//sdk/fidl/fuchsia.input.report:fuchsia.input.report_rust",
    "//sdk/fidl/fuchsia.io:fuchsia.io_rust",
    "//sdk/fidl/fuchsia.lightsensor:fuchsia.lightsensor_rust",
    "//sdk/fidl/fuchsia.media:fuchsia.media_rust",
    "//sdk/fidl/fuchsia.media.sounds:fuchsia.media.sounds_rust",
    "//sdk/fidl/fuchsia.metrics:fuchsia.metrics_rust",
    "//sdk/fidl/fuchsia.recovery:fuchsia.recovery_rust",
    "//sdk/fidl/fuchsia.recovery.policy:fuchsia.recovery.policy_rust",
    "//sdk/fidl/fuchsia.recovery.ui:fuchsia.recovery.ui_rust",
    "//sdk/fidl/fuchsia.settings:fuchsia.settings_rust",
    "//sdk/fidl/fuchsia.ui.brightness:fuchsia.ui.brightness_rust",
    "//sdk/fidl/fuchsia.ui.composition.internal:fuchsia.ui.composition.internal_rust",
    "//sdk/fidl/fuchsia.ui.focus:fuchsia.ui.focus_rust",
    "//sdk/fidl/fuchsia.ui.input:fuchsia.ui.input_rust",
    "//sdk/fidl/fuchsia.ui.input3:fuchsia.ui.input3_rust",
    "//sdk/fidl/fuchsia.ui.keyboard.focus:fuchsia.ui.keyboard.focus_rust",
    "//sdk/fidl/fuchsia.ui.pointerinjector:fuchsia.ui.pointerinjector_rust",
    "//sdk/fidl/fuchsia.ui.pointerinjector.configuration:fuchsia.ui.pointerinjector.configuration_rust",
    "//sdk/fidl/fuchsia.ui.policy:fuchsia.ui.policy_rust",
    "//sdk/fidl/fuchsia.ui.views:fuchsia.ui.views_rust",
    "//src/lib/async-utils",
    "//src/lib/diagnostics/inspect/contrib/rust",
    "//src/lib/diagnostics/inspect/rust",
    "//src/lib/fdio/rust:fdio",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/fuchsia-fs",
    "//src/lib/trace/rust:trace",
    "//src/lib/ui/fuchsia-scenic",
    "//src/lib/ui/keymaps",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//src/ui/lib/focus_chain_provider:lib_without_includes",
    "//src/ui/lib/input-device-constants:lib",
    "//third_party/cobalt/src/lib/client/rust:cobalt-client",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:async-trait",
    "//third_party/rust_crates:derivative",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:glob",
    "//third_party/rust_crates:itertools",
    "//third_party/rust_crates:lazy_static",
    "//third_party/rust_crates:maplit",
    "//third_party/rust_crates:serde",
    "//third_party/rust_crates:tracing",
  ]

  test_deps = [
    "//src/intl:icudtl",
    "//src/lib/diagnostics/testing/diagnostics-assertions/rust:diagnostics-assertions",
    "//src/lib/fuchsia",
    "//src/lib/test_util",
    "//src/lib/ui/fidl_fuchsia_ui_focus_ext:lib",
    "//src/lib/ui/fidl_fuchsia_ui_views_ext:lib",
    "//src/storage/lib/vfs/rust:vfs",
    "//third_party/chromiumos-xorg-conf:mouse_database",
    "//third_party/rust_crates:assert_matches",
    "//third_party/rust_crates:nom",
    "//third_party/rust_crates:nom_locate",
    "//third_party/rust_crates:pretty_assertions",
    "//third_party/rust_crates:rand",
    "//third_party/rust_crates:regex",
    "//third_party/rust_crates:test-case",
    "//third_party/rust_crates:thiserror",
  ]

  sources = [
    "src/activity.rs",
    "src/autorepeater.rs",
    "src/chromebook_keyboard_handler.rs",
    "src/consumer_controls_binding.rs",
    "src/dead_keys_handler.rs",
    "src/display_ownership.rs",
    "src/factory_reset_handler.rs",
    "src/fake_input_device_binding.rs",
    "src/focus_listener.rs",
    "src/gestures/args.rs",
    "src/gestures/gesture_arena.rs",
    "src/gestures/mod.rs",
    "src/gestures/motion.rs",
    "src/gestures/one_finger_button.rs",
    "src/gestures/primary_tap.rs",
    "src/gestures/scroll.rs",
    "src/gestures/secondary_button.rs",
    "src/gestures/secondary_tap.rs",
    "src/gestures/tests/click.rs",
    "src/gestures/tests/mod.rs",
    "src/gestures/tests/motion.rs",
    "src/gestures/tests/one_finger_drag.rs",
    "src/gestures/tests/primary_tap.rs",
    "src/gestures/tests/scroll.rs",
    "src/gestures/tests/secondary_button.rs",
    "src/gestures/tests/secondary_tap.rs",
    "src/gestures/tests/utils.rs",
    "src/gestures/utils.rs",
    "src/ime_handler.rs",
    "src/input_device.rs",
    "src/input_handler.rs",
    "src/input_pipeline.rs",
    "src/inspect_handler.rs",
    "src/keyboard_binding.rs",
    "src/keymap_handler.rs",
    "src/lib.rs",
    "src/light_sensor.rs",
    "src/light_sensor/calibrator.rs",
    "src/light_sensor/calibrator/calibrator_tests.rs",
    "src/light_sensor/led_watcher.rs",
    "src/light_sensor/led_watcher/led_watcher_tests.rs",
    "src/light_sensor/light_sensor_binding.rs",
    "src/light_sensor/light_sensor_handler.rs",
    "src/light_sensor/light_sensor_handler/light_sensor_handler_tests.rs",
    "src/light_sensor/test_utils.rs",
    "src/light_sensor/types.rs",
    "src/light_sensor/types/types_tests.rs",
    "src/media_buttons_handler.rs",
    "src/metrics/mod.rs",
    "src/modifier_handler.rs",
    "src/mouse_binding.rs",
    "src/mouse_injector_handler.rs",
    "src/mouse_model_database/data.rs",
    "src/mouse_model_database/data_import_from_chromiumos.rs",
    "src/mouse_model_database/db.rs",
    "src/mouse_model_database/mod.rs",
    "src/mouse_model_database/xorg_conf_parser.rs",
    "src/observe_fake_events_input_handler.rs",
    "src/pointer_display_scale_handler.rs",
    "src/pointer_sensor_scale_handler.rs",
    "src/testing_utilities.rs",
    "src/text_settings_handler.rs",
    "src/touch_binding.rs",
    "src/touch_injector_handler.rs",
    "src/utils.rs",
  ]
}

expect_includes("input_pipeline_includes") {
  includes = [ "meta/client.shard.cml" ]
}

fuchsia_unittest_package("input_pipeline_lib_tests") {
  deps = [ ":input_pipeline_test" ]
  test_specs = {
    log_settings = {
      max_severity = "ERROR"
    }
  }
}

group("tests") {
  testonly = true
  deps = [ ":input_pipeline_lib_tests" ]
}
