# Copyright 2020 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/config.gni")
import("//build/rust/rustc_library.gni")

rustc_library("lib") {
  name = "persistence"
  edition = "2021"
  with_unit_tests = true

  visibility = [
    "//src/diagnostics/launcher/*",
    "//src/diagnostics/persistence/*",
  ]

  deps = [
    ":persistence-component-config",
    "//sdk/fidl/fuchsia.diagnostics:fuchsia.diagnostics_rust",
    "//src/diagnostics/lib/persistence:lib",
    "//src/diagnostics/persistence/fidl:persist_rust",
    "//src/lib/diagnostics/data/rust",
    "//src/lib/diagnostics/inspect/runtime/rust",
    "//src/lib/diagnostics/inspect/rust",
    "//src/lib/diagnostics/reader/rust",
    "//src/lib/diagnostics/selectors",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/fuchsia-sync",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:argh",
    "//third_party/rust_crates:chrono",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:glob",
    "//third_party/rust_crates:serde",
    "//third_party/rust_crates:serde_json",
    "//third_party/rust_crates:tracing",
  ]

  sources = [
    "src/constants.rs",
    "src/fetcher.rs",
    "src/file_handler.rs",
    "src/inspect_server.rs",
    "src/lib.rs",
    "src/persist_server.rs",
    "src/scheduler.rs",
  ]

  test_deps = [
    "//src/lib/diagnostics/hierarchy/rust",
    "//src/lib/diagnostics/testing/diagnostics-assertions/rust:diagnostics-assertions",
    "//src/lib/fuchsia",
    "//third_party/rust_crates:pretty_assertions",
    "//third_party/rust_crates:serde_json5",
  ]
}

# Rules defining the Persistence component.
fuchsia_component_manifest("persistence-manifest") {
  component_name = "diagnostics-persistence"
  manifest = "meta/persistence-for-production.cml"
}

fuchsia_structured_config_rust_lib("persistence-component-config") {
  cm_label = ":persistence-manifest"
}

fuchsia_component("diagnostics-persistence-component") {
  cm_label = ":persistence-manifest"
  deps = [
    "//src/diagnostics/config/persistence",
    "//src/diagnostics/launcher:bin",
  ]
}

fuchsia_structured_config_values("production-structured-config") {
  values_source = "structured-config/production.json5"
  cm_label = ":persistence-manifest"
}

fuchsia_package("diagnostics-persistence") {
  deps = [
    ":diagnostics-persistence-component",
    ":production-structured-config",
  ]
}

fuchsia_unittest_package("diagnostics-persistence-unittests") {
  manifest = "meta/diagnostics-persistence-unittests.cml"
  deps = [ ":lib_test" ]
}

group("tests") {
  testonly = true
  deps = [
    ":diagnostics-persistence-unittests",
    "tests:tests",
  ]
}
