| """External repository for `generated_inputs` tests""" |
| |
| _BUILD_FILE_CONTENT = """ |
| load("@rules_rust//rust:defs.bzl", "rust_library") |
| load("@bazel_skylib//rules:write_file.bzl", "write_file") |
| |
| write_file( |
| name = "generate_src", |
| out = "src.rs", |
| content = ["pub fn forty_two() -> i32 { 42 }"], |
| ) |
| |
| rust_library( |
| name = "generated_inputs_external_repo", |
| srcs = [ |
| "lib.rs", |
| ":generate_src", |
| ], |
| edition = "2021", |
| visibility = ["//visibility:public"], |
| ) |
| """ |
| |
| _LIB_RS_CONTENT = """ |
| mod src; |
| |
| pub fn forty_two_from_generated_src() -> String { |
| format!("{}", src::forty_two()) |
| } |
| |
| #[cfg(test)] |
| mod test { |
| #[test] |
| fn test_forty_two_as_string() { |
| assert_eq!(super::forty_two_from_generated_src(), "42"); |
| } |
| } |
| """ |
| |
| def _generated_inputs_in_external_repo_impl(repository_ctx): |
| # Create repository files (not in the root directory) |
| repo_path = repository_ctx.path("lib") |
| repository_ctx.file( |
| "{}/BUILD.bazel".format(repo_path), |
| content = _BUILD_FILE_CONTENT, |
| ) |
| repository_ctx.file( |
| "{}/lib.rs".format(repo_path), |
| content = _LIB_RS_CONTENT, |
| ) |
| |
| _generated_inputs_in_external_repo = repository_rule( |
| implementation = _generated_inputs_in_external_repo_impl, |
| doc = ( |
| "A test repository rule providing a Rust library using generated sources" |
| ), |
| ) |
| |
| def generated_inputs_in_external_repo(): |
| """Define the a test repository with Rust library using generated sources""" |
| |
| _generated_inputs_in_external_repo( |
| name = "generated_inputs_in_external_repo", |
| ) |
| return [struct(repo = "generated_inputs_in_external_repo", is_dev_dep = True)] |