# 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")

  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 = [
      "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 = [ ":*" ]
  }
}

# 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/packet.h",
  ]
  friend = [ ":*" ]
  visibility = [ ":*" ]
}

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

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

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

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

config("test_config") {
  include_dirs = [ "test_public" ]
  visibility = [ ":test_method" ]
}

source_set("test_method") {
  public_configs = [ ":test_config" ]
  public = [ "test_public/pw_rpc/internal/method.h" ]
  public_deps = [ ":common" ]
  visibility = [ ":test_server" ]
}

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

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