# 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_result,
    dir_pw_status,
    dir_pw_stream,
  ]
  deps = [
    ":context",
    ":proto.pwpb",
    dir_pw_log,
  ]
  public = [
    "public/pw_transfer/handler.h",
    "public/pw_transfer/transfer.h",
  ]
  sources = [
    "client_connection.cc",
    "public/pw_transfer/internal/client_connection.h",
    "public/pw_transfer/internal/server_context.h",
    "server_context.cc",
    "transfer.cc",
  ]
}

pw_source_set("client") {
  public_configs = [ ":public_include_path" ]
  public_deps = [
    ":proto.raw_rpc",
    "$dir_pw_sync:lock_annotations",
    "$dir_pw_sync:mutex",
    dir_pw_assert,
    dir_pw_function,
    dir_pw_stream,
    dir_pw_work_queue,
  ]
  deps = [
    ":context",
    ":proto.pwpb",
    dir_pw_log,
  ]
  public = [ "public/pw_transfer/client.h" ]
  sources = [
    "client.cc",
    "client_context.cc",
    "public/pw_transfer/internal/client_context.h",
  ]
}

pw_source_set("context") {
  public_configs = [ ":public_include_path" ]
  public_deps = [
    dir_pw_bytes,
    dir_pw_result,
    dir_pw_status,
    dir_pw_stream,
  ]
  deps = [
    ":proto.pwpb",
    dir_pw_protobuf,
    dir_pw_varint,
  ]
  sources = [
    "chunk.cc",
    "chunk_data_buffer.cc",
    "context.cc",
    "public/pw_transfer/internal/chunk.h",
    "public/pw_transfer/internal/chunk_data_buffer.h",
    "public/pw_transfer/internal/context.h",
  ]
  friend = [ ":*" ]
}

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

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

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

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

pw_test("client_test") {
  sources = [ "client_test.cc" ]
  deps = [ ":client" ]
}

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

pw_proto_library("test_server_proto") {
  sources = [ "test_server.proto" ]
  prefix = "pw_transfer_test"
  deps = [ "$dir_pw_protobuf:common_protos" ]
}

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