load("@rules_rust//rust:defs.bzl", "rust_library")
load(
    "//cc_bindings_from_rs/bazel_support:cc_bindings_from_rust_rule.bzl",
    "cc_bindings_from_rust",
)
load(
    "//cc_bindings_from_rs/test/golden:golden_test.bzl",
    rust_golden_test = "golden_test",
)
load("//common:crubit_wrapper_macros_oss.bzl", "crubit_cc_test", "crubit_rust_test")
load("//rs_bindings_from_cc/test:test_bindings.bzl", "crubit_test_cc_library")
# TODO(jeanpierreda): Uncomment this, see below.
# load(
#     "//rs_bindings_from_cc/test/golden:golden_test.bzl",
#     cc_golden_test = "golden_test",
# )

licenses(["notice"])

rust_library(
    name = "leaf_rs_lib",
    srcs = ["leaf_rs_lib.rs"],
    aspect_hints = ["//features:supported"],
)

rust_golden_test(
    name = "leaf_rs_lib_golden_test",
    basename = "leaf_rs_lib",
    golden_h = "leaf_rs_lib_cc_api.h",
    rust_library = "leaf_rs_lib",
)

cc_bindings_from_rust(
    name = "leaf_rs_lib_cc_api",
    crate = ":leaf_rs_lib",
)

crubit_test_cc_library(
    name = "middle_cc_lib",
    hdrs = ["middle_cc_lib.h"],
    aspect_hints = ["//features:supported"],
    deps = [
        ":leaf_rs_lib_cc_api",
    ],
)

# TODO(jeanpierreda): Currently puts bindings from deps in, causing leeks, and exposes temporary
# output paths.
#
# cc_golden_test(
#     name = "middle_cc_lib_golden_test",
#     basename = "middle_cc_lib",
#     cc_library = "middle_cc_lib",
#     golden_rs = "middle_cc_lib_rs_api.rs",
# )

crubit_rust_test(
    name = "rs_test",
    srcs = ["rs_test.rs"],
    cc_deps = [
        ":middle_cc_lib",
    ],
    deps = [
        ":leaf_rs_lib",
        "@crate_index//:googletest",
    ],
)

crubit_test_cc_library(
    name = "leaf_cc_lib",
    hdrs = ["leaf_cc_lib.h"],
    aspect_hints = ["//features:supported"],
)

rust_library(
    name = "middle_rs_lib",
    srcs = ["middle_rs_lib.rs"],
    aspect_hints = ["//features:supported"],
    cc_deps = [":leaf_cc_lib"],
)

cc_bindings_from_rust(
    name = "middle_rs_lib_cc_api",
    crate = ":middle_rs_lib",
)

crubit_cc_test(
    name = "cc_test",
    srcs = ["cc_test.cc"],
    deps = [
        ":leaf_cc_lib",
        ":middle_rs_lib_cc_api",
        "//testing/base/public:gunit_main",
    ],
)
