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

load("//pw_build:pigweed.bzl", "pw_cc_library", "pw_cc_test")
load("//pw_protobuf_compiler:proto.bzl", "pw_proto_library")
load("@com_google_protobuf//:protobuf.bzl", "py_proto_library")
load("@rules_proto//proto:defs.bzl", "proto_library")

package(default_visibility = ["//visibility:public"])

licenses(["notice"])

pw_cc_library(
    name = "pw_transfer",
    srcs = [
        "client_connection.cc",
        "public/pw_transfer/internal/client_connection.h",
        "public/pw_transfer/internal/server_context.h",
        "server_context.cc",
        "transfer.cc",
    ],
    hdrs = [
        "public/pw_transfer/handler.h",
        "public/pw_transfer/transfer.h",
    ],
    includes = ["public"],
    deps = [
        ":common",
        "//pw_assert",
        "//pw_bytes",
        "//pw_containers:intrusive_list",
        "//pw_log",
        "//pw_protobuf",
        "//pw_result",
        "//pw_status",
        "//pw_stream",
        ":transfer_pwpb",
        "//pw_rpc:internal_packet_pwpb",
        # "//pw_rpc:server",
        "//pw_rpc/raw:method_union",
        # "//pw_rpc/raw:test_method_context",
        "//pw_rpc:internal_test_utils",
    ],
)

pw_cc_library(
    name = "client",
    srcs = [
        "client.cc",
        "client_context.cc",
        "public/pw_transfer/internal/client_context.h",
    ],
    hdrs = [
        "public/pw_transfer/client.h",
    ],
    includes = ["public"],
    deps = [
        ":common",
        "//pw_assert",
        "//pw_function",
        "//pw_log",
        "//pw_stream",
        "//pw_sync:lock_annotations",
        "//pw_sync:mutex",
        "//pw_work_queue",
    ],
)

pw_cc_library(
    name = "common",
    srcs = [
        "chunk.cc",
        "context.cc",
        "pw_transfer_private/chunk.h",
    ],
    hdrs = [
        "public/pw_transfer/internal/context.h",
    ],
    includes = ["public"],
    deps = [
        "//pw_bytes",
        "//pw_containers:intrusive_list",
        "//pw_protobuf",
        "//pw_result",
        "//pw_status",
        "//pw_varint",
    ],
)

pw_cc_test(
    name = "handler_test",
    srcs = ["handler_test.cc"],
    deps = [
        ":pw_transfer",
        "//pw_unit_test",
    ],
)

pw_cc_test(
    name = "transfer_test",
    srcs = ["transfer_test.cc"],
    deps = [
        ":pw_transfer",
        "//pw_rpc/raw:test_method_context",
        "//pw_unit_test",
    ],
)

pw_cc_test(
    name = "client_test",
    srcs = ["client_test.cc"],
    deps = [
        ":client",
        "//pw_unit_test",
    ],
)

cc_binary(
    name = "test_rpc_server",
    srcs = ["test_rpc_server.cc"],
    deps = [
        ":pw_transfer",
        "//pw_log",
        "//pw_rpc/system_server",
    ],
)

proto_library(
    name = "transfer_proto",
    srcs = [
        "transfer.proto",
    ],
)

pw_proto_library(
    name = "transfer_pwpb",
    deps = [":transfer_proto"],
)

py_proto_library(
    name = "transfer_proto_pb2",
    srcs = ["transfer.proto"],
)
