# Copyright 2021 The Pigweed Authors
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.

import("//build_overrides/pigweed.gni")

import("$dir_pw_docgen/docs.gni")
import("$dir_pw_protobuf_compiler/proto.gni")
import("$dir_pw_unit_test/test.gni")

config("public_include_path") {
  include_dirs = [ "public" ]
  visibility = [ ":*" ]
}

pw_source_set("pw_transfer") {
  public_configs = [ ":public_include_path" ]
  public_deps = [
    ":proto.raw_rpc",
    "$dir_pw_containers:intrusive_list",
    dir_pw_assert,
    dir_pw_bytes,
    dir_pw_result,
    dir_pw_status,
    dir_pw_stream,
  ]
  deps = [
    ":proto.pwpb",
    dir_pw_log,
    dir_pw_varint,
  ]
  public = [
    "public/pw_transfer/handler.h",
    "public/pw_transfer/transfer.h",
  ]
  sources = [
    "chunk.cc",
    "context.cc",
    "public/pw_transfer/internal/context.h",
    "pw_transfer_private/chunk.h",
    "transfer.cc",
  ]
  friend = [ ":*" ]
}

pw_proto_library("proto") {
  sources = [ "transfer.proto" ]
  python_package = "py"
  prefix = "pw_transfer"
}

pw_test_group("tests") {
  tests = [
    ":handler_test",
    ":transfer_test",
  ]
}

pw_test("handler_test") {
  sources = [ "handler_test.cc" ]
  deps = [ ":pw_transfer" ]
}

pw_test("transfer_test") {
  sources = [ "transfer_test.cc" ]
  deps = [
    ":proto.pwpb",
    ":pw_transfer",
    "$dir_pw_rpc/raw:test_method_context",
  ]
}

pw_doc_group("docs") {
  sources = [ "docs.rst" ]
  inputs = [ "transfer.proto" ]
}

pw_executable("test_rpc_server") {
  sources = [ "test_rpc_server.cc" ]
  deps = [
    ":pw_transfer",
    "$dir_pw_rpc/system_server",
    "$dir_pw_rpc/system_server:socket",
    dir_pw_log,
  ]
}
