// 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_anyhow_license"],
    default_team: "trendy_team_android_rust",
}

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

rust_test {
    name: "anyhow_test_src_lib",
    host_supported: true,
    crate_name: "anyhow",
    cargo_env_compat: true,
    cargo_pkg_version: "1.0.95",
    crate_root: "src/lib.rs",
    test_suites: ["general-tests"],
    auto_gen_config: true,
    test_options: {
        unit_test: true,
    },
    edition: "2018",
    features: [
        "default",
        "std",
    ],
    rustlibs: [
        "libfutures",
        "libthiserror",
    ],
}

rust_test {
    name: "anyhow_test_tests_test_autotrait",
    host_supported: true,
    crate_name: "test_autotrait",
    cargo_env_compat: true,
    cargo_pkg_version: "1.0.95",
    crate_root: "tests/test_autotrait.rs",
    test_suites: ["general-tests"],
    auto_gen_config: true,
    test_options: {
        unit_test: true,
    },
    edition: "2018",
    features: [
        "default",
        "std",
    ],
    rustlibs: [
        "libanyhow",
        "libfutures",
        "libthiserror",
    ],
}

rust_test {
    name: "anyhow_test_tests_test_boxed",
    host_supported: true,
    crate_name: "test_boxed",
    cargo_env_compat: true,
    cargo_pkg_version: "1.0.95",
    crate_root: "tests/test_boxed.rs",
    test_suites: ["general-tests"],
    auto_gen_config: true,
    test_options: {
        unit_test: true,
    },
    edition: "2018",
    features: [
        "default",
        "std",
    ],
    rustlibs: [
        "libanyhow",
        "libfutures",
        "libthiserror",
    ],
}

rust_test {
    name: "anyhow_test_tests_test_chain",
    host_supported: true,
    crate_name: "test_chain",
    cargo_env_compat: true,
    cargo_pkg_version: "1.0.95",
    crate_root: "tests/test_chain.rs",
    test_suites: ["general-tests"],
    auto_gen_config: true,
    test_options: {
        unit_test: true,
    },
    edition: "2018",
    features: [
        "default",
        "std",
    ],
    rustlibs: [
        "libanyhow",
        "libfutures",
        "libthiserror",
    ],
}

rust_test {
    name: "anyhow_test_tests_test_context",
    host_supported: true,
    crate_name: "test_context",
    cargo_env_compat: true,
    cargo_pkg_version: "1.0.95",
    crate_root: "tests/test_context.rs",
    test_suites: ["general-tests"],
    auto_gen_config: true,
    test_options: {
        unit_test: true,
    },
    edition: "2018",
    features: [
        "default",
        "std",
    ],
    rustlibs: [
        "libanyhow",
        "libfutures",
        "libthiserror",
    ],
}

rust_test {
    name: "anyhow_test_tests_test_convert",
    host_supported: true,
    crate_name: "test_convert",
    cargo_env_compat: true,
    cargo_pkg_version: "1.0.95",
    crate_root: "tests/test_convert.rs",
    test_suites: ["general-tests"],
    auto_gen_config: true,
    test_options: {
        unit_test: true,
    },
    edition: "2018",
    features: [
        "default",
        "std",
    ],
    rustlibs: [
        "libanyhow",
        "libfutures",
        "libthiserror",
    ],
}

rust_test {
    name: "anyhow_test_tests_test_downcast",
    host_supported: true,
    crate_name: "test_downcast",
    cargo_env_compat: true,
    cargo_pkg_version: "1.0.95",
    crate_root: "tests/test_downcast.rs",
    test_suites: ["general-tests"],
    auto_gen_config: true,
    test_options: {
        unit_test: true,
    },
    edition: "2018",
    features: [
        "default",
        "std",
    ],
    rustlibs: [
        "libanyhow",
        "libfutures",
        "libthiserror",
    ],
}

rust_test {
    name: "anyhow_test_tests_test_fmt",
    host_supported: true,
    crate_name: "test_fmt",
    cargo_env_compat: true,
    cargo_pkg_version: "1.0.95",
    crate_root: "tests/test_fmt.rs",
    test_suites: ["general-tests"],
    auto_gen_config: true,
    test_options: {
        unit_test: true,
    },
    edition: "2018",
    features: [
        "default",
        "std",
    ],
    rustlibs: [
        "libanyhow",
        "libfutures",
        "libthiserror",
    ],
}

rust_test {
    name: "anyhow_test_tests_test_macros",
    host_supported: true,
    crate_name: "test_macros",
    cargo_env_compat: true,
    cargo_pkg_version: "1.0.95",
    crate_root: "tests/test_macros.rs",
    test_suites: ["general-tests"],
    auto_gen_config: true,
    test_options: {
        unit_test: true,
    },
    edition: "2018",
    features: [
        "default",
        "std",
    ],
    rustlibs: [
        "libanyhow",
        "libfutures",
        "libthiserror",
    ],
}

rust_test {
    name: "anyhow_test_tests_test_repr",
    host_supported: true,
    crate_name: "test_repr",
    cargo_env_compat: true,
    cargo_pkg_version: "1.0.95",
    crate_root: "tests/test_repr.rs",
    test_suites: ["general-tests"],
    auto_gen_config: true,
    test_options: {
        unit_test: true,
    },
    edition: "2018",
    features: [
        "default",
        "std",
    ],
    rustlibs: [
        "libanyhow",
        "libfutures",
        "libthiserror",
    ],
}

rust_test {
    name: "anyhow_test_tests_test_source",
    host_supported: true,
    crate_name: "test_source",
    cargo_env_compat: true,
    cargo_pkg_version: "1.0.95",
    crate_root: "tests/test_source.rs",
    test_suites: ["general-tests"],
    auto_gen_config: true,
    test_options: {
        unit_test: true,
    },
    edition: "2018",
    features: [
        "default",
        "std",
    ],
    rustlibs: [
        "libanyhow",
        "libfutures",
        "libthiserror",
    ],
}

rust_library {
    name: "libanyhow",
    host_supported: true,
    crate_name: "anyhow",
    cargo_env_compat: true,
    cargo_pkg_version: "1.0.95",
    crate_root: "src/lib.rs",
    edition: "2018",
    features: [
        "default",
        "std",
    ],
    apex_available: [
        "//apex_available:platform",
        "//apex_available:anyapex",
    ],
    product_available: true,
    vendor_available: true,
    min_sdk_version: "29",
}
