# Copyright 2023 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("@rules_proto//proto:defs.bzl", "proto_library")
load(
    "//pw_protobuf_compiler:pw_proto_library.bzl",
    "pw_proto_filegroup",
    "pwpb_proto_library",
    "pwpb_rpc_proto_library",
)
load(
    "//pw_build:selects.bzl",
    "TARGET_COMPATIBLE_WITH_HOST_SELECT",
)

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

licenses(["notice"])

pw_cc_library(
    name = "rpc_transport",
    hdrs = ["public/pw_rpc_transport/rpc_transport.h"],
    includes = ["public"],
    deps = [
        "//pw_bytes",
        "//pw_function",
        "//pw_status",
    ],
)

pw_cc_library(
    name = "service_registry",
    hdrs = ["public/pw_rpc_transport/service_registry.h"],
    includes = ["public"],
    deps = [
        ":rpc_transport",
        "//pw_rpc:client_server",
        "//pw_span",
        "//pw_status",
    ],
)

pw_cc_library(
    name = "packet_buffer_queue",
    hdrs = ["public/pw_rpc_transport/internal/packet_buffer_queue.h"],
    includes = ["public"],
    deps = [
        "//pw_assert",
        "//pw_bytes",
        "//pw_containers",
        "//pw_log",
        "//pw_result",
        "//pw_status",
        "//pw_sync:lock_annotations",
        "//pw_sync:mutex",
    ],
)

pw_cc_test(
    name = "packet_buffer_queue_test",
    srcs = [
        "internal/packet_buffer_queue_test.cc",
    ],
    deps = [
        ":packet_buffer_queue",
        "//pw_bytes",
        "//pw_containers",
        "//pw_result",
        "//pw_status",
        "//pw_sync:lock_annotations",
        "//pw_sync:mutex",
    ],
)

pw_cc_library(
    name = "local_rpc_egress",
    srcs = ["local_rpc_egress.cc"],
    hdrs = ["public/pw_rpc_transport/local_rpc_egress.h"],
    includes = ["public"],
    deps = [
        ":packet_buffer_queue",
        ":rpc_transport",
        ":test_protos_pwpb_rpc",
        "//pw_bytes",
        "//pw_log",
        "//pw_result",
        "//pw_rpc:client_server",
        "//pw_status",
        "//pw_sync:thread_notification",
        "//pw_thread:thread_core",
    ],
)

pw_cc_test(
    name = "local_rpc_egress_test",
    srcs = [
        "local_rpc_egress_test.cc",
    ],
    deps = [
        ":local_rpc_egress",
        ":rpc_transport",
        ":service_registry",
        ":test_protos_pwpb_rpc",
        "//pw_bytes",
        "//pw_chrono:system_clock",
        "//pw_rpc:client_server",
        "//pw_status",
        "//pw_sync:counting_semaphore",
        "//pw_sync:thread_notification",
        "//pw_thread:sleep",
        "//pw_thread:thread",
    ],
)

pw_cc_library(
    name = "hdlc_framing",
    hdrs = [
        "public/pw_rpc_transport/hdlc_framing.h",
    ],
    deps = [
        ":rpc_transport",
        "//pw_bytes",
        "//pw_hdlc",
        "//pw_result",
        "//pw_status",
        "//pw_stream",
    ],
)

pw_cc_test(
    name = "hdlc_framing_test",
    srcs = [
        "hdlc_framing_test.cc",
    ],
    deps = [
        ":hdlc_framing",
        "//pw_bytes",
        "//pw_status",
    ],
)

pw_cc_library(
    name = "simple_framing",
    srcs = [
        "simple_framing.cc",
    ],
    hdrs = ["public/pw_rpc_transport/simple_framing.h"],
    deps = [
        ":rpc_transport",
        "//pw_assert",
        "//pw_bytes",
        "//pw_log",
        "//pw_status",
    ],
)

pw_cc_test(
    name = "simple_framing_test",
    srcs = ["simple_framing_test.cc"],
    deps = [
        ":simple_framing",
        "//pw_bytes",
        "//pw_log",
        "//pw_status",
    ],
)

pw_cc_library(
    name = "egress_ingress",
    srcs = [
        "egress_ingress.cc",
    ],
    hdrs = ["public/pw_rpc_transport/egress_ingress.h"],
    deps = [
        ":hdlc_framing",
        ":rpc_transport",
        ":simple_framing",
        "//pw_bytes",
        "//pw_log",
        "//pw_metric:metric",
        "//pw_rpc:client_server",
        "//pw_status",
    ],
)

pw_cc_test(
    name = "egress_ingress_test",
    srcs = ["egress_ingress_test.cc"],
    deps = [
        ":egress_ingress",
        ":service_registry",
        ":test_protos_pwpb_rpc",
        "//pw_bytes",
        "//pw_metric:metric",
        "//pw_status",
        "//pw_sync:thread_notification",
    ],
)

pw_cc_library(
    name = "socket_rpc_transport",
    srcs = ["socket_rpc_transport.cc"],
    hdrs = ["public/pw_rpc_transport/socket_rpc_transport.h"],
    target_compatible_with = select(TARGET_COMPATIBLE_WITH_HOST_SELECT),
    deps = [
        ":rpc_transport",
        "//pw_assert",
        "//pw_chrono:system_clock",
        "//pw_log",
        "//pw_status",
        "//pw_stream",
        "//pw_stream:socket_stream",
        "//pw_sync:lock_annotations",
        "//pw_sync:mutex",
        "//pw_sync:thread_notification",
        "//pw_sync_stl:condition_variable",
        "//pw_thread:sleep",
        "//pw_thread:thread_core",
    ],
)

pw_cc_test(
    name = "socket_rpc_transport_test",
    srcs = ["socket_rpc_transport_test.cc"],
    target_compatible_with = select(TARGET_COMPATIBLE_WITH_HOST_SELECT),
    deps = [
        ":socket_rpc_transport",
        "//pw_bytes",
        "//pw_log",
        "//pw_status",
        "//pw_sync:thread_notification",
        "//pw_thread:sleep",
        "//pw_thread:thread",
    ],
)

pw_cc_test(
    name = "rpc_integration_test",
    srcs = ["rpc_integration_test.cc"],
    target_compatible_with = select(TARGET_COMPATIBLE_WITH_HOST_SELECT),
    deps = [
        ":egress_ingress",
        ":local_rpc_egress",
        ":service_registry",
        ":socket_rpc_transport",
        ":test_protos_pwpb_rpc",
        "//pw_chrono:system_clock",
        "//pw_log",
        "//pw_rpc:client_server",
        "//pw_rpc:synchronous_client_api",
        "//pw_string",
        "//pw_thread:thread",
    ],
)

pw_proto_filegroup(
    name = "test_protos_and_options",
    srcs = ["internal/test.proto"],
    options_files = ["internal/test.options"],
)

proto_library(
    name = "test_protos",
    srcs = [":test_protos_and_options"],
)

pwpb_proto_library(
    name = "test_protos_pwpb",
    deps = [":test_protos"],
)

pwpb_rpc_proto_library(
    name = "test_protos_pwpb_rpc",
    pwpb_proto_library_deps = [":test_protos_pwpb"],
    deps = [":test_protos"],
)
