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

load("@rules_python//python:defs.bzl", "py_binary")

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

licenses(["notice"])

py_binary(
    name = "plugin",
    srcs = glob(
        ["pw_rpc/*.py"],
        exclude = [
            "pw_rpc/client.py",
            "pw_rpc/__init__.py",
        ],
    ),
    imports = ["."],
    main = "pw_rpc/plugin_raw.py",
    python_version = "PY3",
    deps = [
        "//pw_protobuf/py:plugin_library",
        "//pw_protobuf_compiler/py:pw_protobuf_compiler",
        "//pw_status/py:pw_status",
        "@com_google_protobuf//:protobuf_python",
    ],
)

py_library(
    name = "pw_rpc",
    srcs = [
        "pw_rpc/__init__.py",
        "pw_rpc/callback_client.py",
        "pw_rpc/client.py",
        "pw_rpc/codegen.py",
        "pw_rpc/codegen_nanopb.py",
        "pw_rpc/codegen_raw.py",
        "pw_rpc/console_tools/__init__.py",
        "pw_rpc/console_tools/console.py",
        "pw_rpc/console_tools/functions.py",
        "pw_rpc/console_tools/watchdog.py",
        "pw_rpc/descriptors.py",
        "pw_rpc/ids.py",
        "pw_rpc/packets.py",
        "pw_rpc/plugin.py",
        "pw_rpc/plugin_nanopb.py",
        "pw_rpc/plugin_raw.py",
    ],
    deps = [
        "//pw_protobuf/py:pw_protobuf",
        "//pw_protobuf_compiler/py:pw_protobuf_compiler",
        "//pw_status/py:pw_status",
    ],
)
