load("@fbsource//tools/build_defs:rust_binary.bzl", "rust_binary")
load("@fbsource//tools/build_defs/dirsync:fb_dirsync_cpp_library.bzl", "fb_dirsync_cpp_library")
load("@fbsource//tools/build_defs/dirsync:fb_dirsync_rule.bzl", "fb_dirsync_rule")
load("@fbsource//tools/build_defs/dirsync:fb_dirsync_rust_library.bzl", "fb_dirsync_rust_library")

oncall("rust_libraries")

fb_dirsync_rust_library(
    name = "request_context",
    srcs = ["request_context.rs"],
    cpp_deps = [":request_context_bridge"],
    cxx_bridge = "request_context.rs",
    deps = [
        "fbsource//third-party/rust:cxx",
    ],
)

fb_dirsync_rust_library(
    name = "request_context_future",
    srcs = ["request_context_future.rs"],
    deps = [
        "fbsource//third-party/rust:futures-core",
        "fbsource//third-party/rust:pin-project",
        ":request_context",
    ],
)

fb_dirsync_rust_library(
    name = "request_context_tokio",
    srcs = ["request_context_tokio.rs"],
    modifiers = ["ovr_config//build_mode:asan_ubsan_dev_sanitizer_flags[enabled]"],
    test_deps = [
        "fbsource//third-party/rust:tokio",
        ":request_context_future",
    ],
    deps = [
        "fbsource//third-party/rust:papaya",
        "fbsource//third-party/rust:rustc-hash",
        "fbsource//third-party/rust:tokio",
        ":request_context",
    ],
)

fb_dirsync_rule(
    name = "request_context_tokio_bench",
    srcs = ["benches/request_context_tokio_bench.rs"],
    fbcode_rule = rust_binary,
    pin_crate = True,
    unittests = False,
    deps = [
        "fbsource//third-party/rust:criterion",
        "fbsource//third-party/rust:futures",
        "fbsource//third-party/rust:tokio",
        ":request_context",
        ":request_context_tokio",
    ],
)

fb_dirsync_cpp_library(
    name = "request_context_bridge",
    srcs = ["request_context.cpp"],
    headers = ["request_context.h"],
    visibility = ["PUBLIC"],
    deps = [
        ":request_context@header",
    ],
    exported_deps = [
        "fbsource//third-party/rust:cxx-core",
        "//folly/io/async:request_context",
    ],
)
