# Copyright 2016 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.

visibility = [ "//src/ledger/*" ]

source_set("impl") {
  sources = [
    "aggregator.cc",
    "aggregator.h",
    "batch_download.cc",
    "batch_download.h",
    "batch_upload.cc",
    "batch_upload.h",
    "constants.h",
    "ledger_sync_impl.cc",
    "ledger_sync_impl.h",
    "page_download.cc",
    "page_download.h",
    "page_sync_impl.cc",
    "page_sync_impl.h",
    "page_upload.cc",
    "page_upload.h",
    "user_sync_impl.cc",
    "user_sync_impl.h",
  ]

  public_deps = [
    "//garnet/public/lib/backoff",
    "//peridot/lib/commit_pack",
    "//sdk/fidl/fuchsia.ledger.cloud",
    "//src/ledger/bin/cloud_sync/public",
    "//src/ledger/bin/encryption/impl",
    "//src/ledger/bin/encryption/public",
    "//src/ledger/bin/environment",
    "//src/ledger/bin/fidl/include",
    "//src/ledger/bin/storage/public",
  ]

  deps = [
    "//garnet/public/lib/fsl",
    "//src/ledger/bin/encryption/primitives",
    "//zircon/public/lib/trace",
  ]

  configs += [ "//src/ledger:ledger_config" ]
}

source_set("unittests") {
  testonly = true

  sources = [
    "aggregator_unittest.cc",
    "batch_download_unittest.cc",
    "batch_upload_unittest.cc",
    "page_download_unittest.cc",
    "page_sync_impl_unittest.cc",
    "page_upload_unittest.cc",
    "user_sync_impl_unittest.cc",
  ]

  deps = [
    ":impl",
    "//garnet/public/lib/backoff/testing",
    "//garnet/public/lib/fsl",
    "//peridot/lib/scoped_tmpfs",
    "//src/ledger/bin/cloud_sync/impl/testing",
    "//src/ledger/bin/cloud_sync/testing",
    "//src/ledger/bin/encryption/fake",
    "//src/ledger/bin/storage/fake:lib",
    "//src/ledger/bin/storage/public",
    "//src/ledger/bin/storage/testing",
    "//src/ledger/bin/testing:lib",
    "//src/lib/fxl",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
  ]

  configs += [ "//src/ledger:ledger_config" ]
}
