# Copyright 2020 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("$dir_pw_docgen/docs.gni")
import("$dir_pw_protobuf_compiler/proto.gni")
import("$dir_pw_unit_test/test.gni")

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

# pw_rpc servers depend on the protobuf library used to encode and decode
# requests and responses when invoking methods. This template is used to create
# instances of the pw_rpc server library with different implementations.
#
# The implementation parameter must refer to a library that provides the
# definition of the Method class in pw_rpc/internal/method.h. The Method class
# provides the Invoke function, which handles the server use to call into the
# RPC functions themselves.
template("_pw_rpc_server_library") {
  assert(defined(invoker.implementation),
         "_pw_rpc_server_library requires an implementation to be set")
  _target_name = target_name

  source_set(_target_name) {
    forward_variables_from(invoker, "*")

    public_configs = [ ":default_config" ]
    public_deps = [
      ":common",
      dir_pw_span,
      dir_pw_status,
      implementation,
    ]
    deps = [
      dir_pw_assert,
      dir_pw_log,
    ]
    public = [
      "public/pw_rpc/server.h",
      "public/pw_rpc/server_context.h",
    ]
    sources = [
      "base_server_writer.cc",
      "public/pw_rpc/internal/base_server_writer.h",
      "public/pw_rpc/internal/service.h",
      "public/pw_rpc/internal/service_registry.h",
      "server.cc",
      "service.cc",
      "service_registry.cc",
    ]
    allow_circular_includes_from = [ implementation ]
    friend = [ "./*" ]
  }

  source_set("test_utils_$_target_name") {
    public = [ "pw_rpc_private/test_utils.h" ]
    public_configs = [ ":private_includes" ]
    public_deps = [
      ":$_target_name",
      ":common",
      dir_pw_span,
    ]
    visibility = [ "./*" ]
  }
}

# Classes with no dependencies on the protobuf library for method invocations.
source_set("common") {
  public_configs = [ ":default_config" ]
  public_deps = [
    ":protos_pwpb",
    dir_pw_assert,
    dir_pw_span,
    dir_pw_status,
  ]
  public = [ "public/pw_rpc/channel.h" ]
  sources = [
    "channel.cc",
    "packet.cc",
    "public/pw_rpc/internal/base_method.h",
    "public/pw_rpc/internal/call.h",
    "public/pw_rpc/internal/packet.h",
  ]
  friend = [ "./*" ]
  visibility = [ "./*" ]
}

# RPC server that uses Nanopb to encode and decode protobufs. RPCs use Nanopb
# structs as their requests and responses.
_pw_rpc_server_library("nanopb_server") {
  implementation = "nanopb"
}

config("private_includes") {
  include_dirs = [ "." ]
  visibility = [ ":*" ]
}

pw_proto_library("protos") {
  sources = [ "pw_rpc_protos/packet.proto" ]
}

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

pw_test_group("tests") {
  tests = [
    ":base_server_writer_test",
    "nanopb:method_test",
    ":packet_test",
    ":server_test",
  ]
}

# RPC server for tests only. A mock method implementation is used.
_pw_rpc_server_library("test_server") {
  implementation = "test_impl"
  visibility = [ ":*" ]
}

pw_proto_library("test_protos") {
  sources = [ "pw_rpc_test_protos/test.proto" ]
  visibility = [ "./*" ]
}

pw_test("base_server_writer_test") {
  deps = [
    ":test_server",
    ":test_utils_test_server",
  ]
  sources = [ "base_server_writer_test.cc" ]
}

pw_test("packet_test") {
  deps = [
    ":common",
    dir_pw_protobuf,
  ]
  sources = [ "packet_test.cc" ]
}

pw_test("server_test") {
  deps = [
    ":protos_pwpb",
    ":test_server",
    ":test_utils_test_server",
    dir_pw_assert,
  ]
  sources = [ "server_test.cc" ]
}
