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

group("ledger_client") {
  deps = [
    ":constants",
    ":operations",
    ":page_client",
    ":storage",
    ":types",
  ]
}

source_set("constants") {
  sources = [
    "constants.h",
  ]
}

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

  deps = [
    ":page_client",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/fxl",
    "//peridot/lib/fidl:array_to_string",
    "//peridot/lib/fidl:json_xdr",
    "//peridot/public/lib/async/cpp:operation",
    "//peridot/public/lib/ledger/fidl",
  ]
}

source_set("page_client") {
  sources = [
    "ledger_client.cc",
    "ledger_client.h",
    "page_client.cc",
    "page_client.h",
    "page_id.cc",
    "page_id.h",
  ]

  deps = [
    ":status",
    ":types",
    "//garnet/public/lib/fidl/cpp",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/fxl",
    "//peridot/bin/ledger/fidl",
    "//peridot/lib/base64url",
    "//peridot/lib/fidl:array_to_string",
    "//peridot/lib/fidl:clone",
    "//peridot/public/lib/async/cpp:operation",
    "//peridot/public/lib/ledger/fidl",
  ]
}

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

  deps = [
    "//garnet/public/lib/fxl",
    "//peridot/public/lib/ledger/fidl",
  ]
}

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

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

  public_deps = [
    "//peridot/public/lib:fidl",
    "//peridot/public/lib:fidl_private",
  ]
}

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

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

group("unittests") {
  testonly = true

  deps = [
    ":page_client_unittest",
    ":storage_unittest",
  ]
}

source_set("page_client_unittest") {
  testonly = true

  sources = [
    "page_client_unittest.cc",
  ]

  deps = [
    ":page_client",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/fxl",
    "//peridot/lib/fidl:array_to_string",
    "//peridot/lib/testing:test_with_ledger",
    "//peridot/public/lib/async/cpp:operation",
    "//third_party/googletest:gtest",
  ]
}

source_set("storage_unittest") {
  testonly = true

  sources = [
    "storage_unittest.cc",
  ]

  deps = [
    ":storage",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/fxl",
    "//third_party/googletest:gtest",
  ]
}
