# 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",
    ":promise",
    ":types",
  ]
}

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

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

  public_deps = [
    ":page_client",
    "//sdk/fidl/fuchsia.ledger",
    "//src/lib/fsl",
    "//src/lib/fxl",
    "//src/modular/lib/async/cpp:operation",
    "//src/modular/lib/fidl:array_to_string",
    "//src/modular/lib/fidl:json_xdr",
  ]
}

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

  deps = [
    ":types",
    "//sdk/lib/fidl/cpp",
    "//src/ledger/bin/fidl",
    "//src/lib/fsl",
    "//src/lib/fxl",
    "//src/modular/lib/fidl:array_to_string",
    "//src/modular/lib/fidl:clone",
  ]

  public_deps = [
    "//sdk/fidl/fuchsia.ledger",
    "//src/ledger/bin/fidl",
    "//src/modular/lib/async/cpp:operation",
  ]
}

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

  public_deps = [
    "//sdk/fidl/fuchsia.ledger",
    "//src/modular/lib/fidl:array_to_string",
  ]
}

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

  deps = [
    "//sdk/lib/fidl/cpp",
  ]
}

group("unittests") {
  testonly = true

  deps = [
    ":page_client_unittest",
  ]
}

source_set("page_client_unittest") {
  testonly = true

  sources = [
    "page_client_unittest.cc",
  ]

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