# 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(
    "//pw_build:pigweed.bzl",
    "pw_cc_test",
)

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

licenses(["notice"])

cc_library(
    name = "pw_stream",
    srcs = [
        "memory_stream.cc",
    ],
    hdrs = [
        "public/pw_stream/memory_stream.h",
        "public/pw_stream/null_stream.h",
        "public/pw_stream/seek.h",
        "public/pw_stream/stream.h",
    ],
    includes = ["public"],
    deps = [
        "//pw_assert",
        "//pw_bytes",
        "//pw_polyfill",
        "//pw_result",
        "//pw_span",
        "//pw_status",
        "//pw_toolchain:sibling_cast",
    ],
)

cc_library(
    name = "socket_stream",
    srcs = ["socket_stream.cc"],
    hdrs = ["public/pw_stream/socket_stream.h"],
    deps = [
        ":pw_stream",
        "//pw_log",
        "//pw_string",
        "//pw_sync:mutex",
        "//pw_sys_io",
    ],
)

cc_library(
    name = "sys_io_stream",
    hdrs = ["public/pw_stream/sys_io_stream.h"],
    deps = [
        "//pw_stream",
        "//pw_sys_io",
    ],
)

cc_library(
    name = "std_file_stream",
    srcs = ["std_file_stream.cc"],
    hdrs = ["public/pw_stream/std_file_stream.h"],
    deps = [
        ":pw_stream",
        "//pw_assert",
    ],
)

cc_library(
    name = "interval_reader",
    srcs = ["interval_reader.cc"],
    hdrs = ["public/pw_stream/interval_reader.h"],
    deps = [":pw_stream"],
)

cc_library(
    name = "mpsc_stream",
    srcs = ["mpsc_stream.cc"],
    hdrs = ["public/pw_stream/mpsc_stream.h"],
    deps = [
        ":pw_stream",
        "//pw_assert",
        "//pw_bytes",
        "//pw_chrono:system_clock_facade",
        "//pw_containers:intrusive_list",
        "//pw_function",
        "//pw_status",
        "//pw_sync:lock_annotations",
        "//pw_sync:mutex",
        "//pw_sync:timed_thread_notification",
    ],
)

pw_cc_test(
    name = "memory_stream_test",
    srcs = ["memory_stream_test.cc"],
    deps = [
        ":pw_stream",
        "//pw_assert",
        "//pw_status",
        "//pw_unit_test",
    ],
)

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

pw_cc_test(
    name = "std_file_stream_test",
    srcs = ["std_file_stream_test.cc"],
    deps = [
        ":std_file_stream",
        "//pw_assert",
        "//pw_bytes",
        "//pw_containers",
        "//pw_random",
        "//pw_result",
        "//pw_status",
        "//pw_string",
        "//pw_unit_test",
    ],
)

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

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

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

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

pw_cc_test(
    name = "mpsc_stream_test",
    srcs = ["mpsc_stream_test.cc"],
    deps = [
        ":mpsc_stream",
        "//pw_containers:vector",
        "//pw_fuzzer:fuzztest",
        "//pw_random",
        "//pw_thread:test_thread_context",
        "//pw_thread:thread",
        "//pw_unit_test",
    ],
)
