// This file is generated by cargo_embargo.
// Do not modify this file because the changes will be overridden on upgrade.

package {
    default_applicable_licenses: ["external_rust_crates_futures-channel_license"],
    default_team: "trendy_team_android_rust",
}

license {
    name: "external_rust_crates_futures-channel_license",
    visibility: [":__subpackages__"],
    license_kinds: ["SPDX-license-identifier-Apache-2.0"],
    license_text: ["LICENSE"],
}

rust_test {
    name: "futures-channel_test_src_lib",
    host_supported: true,
    crate_name: "futures_channel",
    cargo_env_compat: true,
    cargo_pkg_version: "0.3.31",
    crate_root: "src/lib.rs",
    test_suites: ["general-tests"],
    auto_gen_config: true,
    test_options: {
        unit_test: true,
    },
    edition: "2018",
    features: [
        "alloc",
        "default",
        "futures-sink",
        "sink",
        "std",
    ],
    rustlibs: [
        "libfutures",
        "libfutures_core",
        "libfutures_sink",
        "libfutures_test",
    ],
}

rust_test {
    name: "futures-channel_test_tests_channel",
    host_supported: true,
    crate_name: "channel",
    cargo_env_compat: true,
    cargo_pkg_version: "0.3.31",
    crate_root: "tests/channel.rs",
    test_suites: ["general-tests"],
    auto_gen_config: true,
    test_options: {
        unit_test: true,
    },
    edition: "2018",
    features: [
        "alloc",
        "default",
        "futures-sink",
        "sink",
        "std",
    ],
    rustlibs: [
        "libfutures",
        "libfutures_channel",
        "libfutures_core",
        "libfutures_sink",
        "libfutures_test",
    ],
}

rust_test {
    name: "futures-channel_test_tests_mpsc",
    host_supported: true,
    crate_name: "mpsc",
    cargo_env_compat: true,
    cargo_pkg_version: "0.3.31",
    crate_root: "tests/mpsc.rs",
    test_suites: ["general-tests"],
    auto_gen_config: true,
    test_options: {
        unit_test: true,
    },
    edition: "2018",
    features: [
        "alloc",
        "default",
        "futures-sink",
        "sink",
        "std",
    ],
    rustlibs: [
        "libfutures",
        "libfutures_channel",
        "libfutures_core",
        "libfutures_sink",
        "libfutures_test",
    ],
}

rust_test {
    name: "futures-channel_test_tests_mpsc-close",
    host_supported: true,
    crate_name: "mpsc_close",
    cargo_env_compat: true,
    cargo_pkg_version: "0.3.31",
    crate_root: "tests/mpsc-close.rs",
    test_suites: ["general-tests"],
    auto_gen_config: true,
    test_options: {
        unit_test: true,
    },
    edition: "2018",
    features: [
        "alloc",
        "default",
        "futures-sink",
        "sink",
        "std",
    ],
    rustlibs: [
        "libfutures",
        "libfutures_channel",
        "libfutures_core",
        "libfutures_sink",
        "libfutures_test",
    ],
}

rust_test {
    name: "futures-channel_test_tests_mpsc-size_hint",
    host_supported: true,
    crate_name: "mpsc_size_hint",
    cargo_env_compat: true,
    cargo_pkg_version: "0.3.31",
    crate_root: "tests/mpsc-size_hint.rs",
    test_suites: ["general-tests"],
    auto_gen_config: true,
    test_options: {
        unit_test: true,
    },
    edition: "2018",
    features: [
        "alloc",
        "default",
        "futures-sink",
        "sink",
        "std",
    ],
    rustlibs: [
        "libfutures",
        "libfutures_channel",
        "libfutures_core",
        "libfutures_sink",
        "libfutures_test",
    ],
}

rust_test {
    name: "futures-channel_test_tests_oneshot",
    host_supported: true,
    crate_name: "oneshot",
    cargo_env_compat: true,
    cargo_pkg_version: "0.3.31",
    crate_root: "tests/oneshot.rs",
    test_suites: ["general-tests"],
    auto_gen_config: true,
    test_options: {
        unit_test: true,
    },
    edition: "2018",
    features: [
        "alloc",
        "default",
        "futures-sink",
        "sink",
        "std",
    ],
    rustlibs: [
        "libfutures",
        "libfutures_channel",
        "libfutures_core",
        "libfutures_sink",
        "libfutures_test",
    ],
}

rust_library {
    name: "libfutures_channel",
    host_supported: true,
    crate_name: "futures_channel",
    cargo_env_compat: true,
    cargo_pkg_version: "0.3.31",
    crate_root: "src/lib.rs",
    edition: "2018",
    features: [
        "alloc",
        "default",
        "futures-sink",
        "sink",
        "std",
    ],
    rustlibs: [
        "libfutures_core",
        "libfutures_sink",
    ],
    apex_available: [
        "//apex_available:platform",
        "//apex_available:anyapex",
    ],
    product_available: true,
    vendor_available: true,
    min_sdk_version: "29",
}
