diff --git a/.gitignore b/.gitignore index a58b053..fe9b08f 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ databuild.iml examples/podcast_reviews/data .bazelbsp .aider* +.venv diff --git a/CLAUDE.md b/CLAUDE.md index 37c8e52..a5ab040 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -13,6 +13,8 @@ DataBuild is a bazel-based data build system. Key files: # Remote testing ./scripts/bb_remote_test_all + +# Do not try to `bazel test //examples/basic_graph/...`, as this will not work. ``` ## Project Structure @@ -23,4 +25,65 @@ DataBuild is a bazel-based data build system. Key files: ## Key Components - Graph analysis/execution in Rust - Bazel rules for job orchestration -- Java/Python examples for different use cases \ No newline at end of file +- Java/Python examples for different use cases + +## DataBuild Job Architecture + +### Job Target Structure +Each DataBuild job creates three Bazel targets: +- `job_name.cfg` - Configuration target (calls binary with "config" subcommand) +- `job_name.exec` - Execution target (calls binary with "exec" subcommand) +- `job_name` - Main job target (pipes config output to exec input) + +### Unified Job Binary Pattern +Jobs use a single binary with subcommands: +```python +def main(): + command = sys.argv[1] # "config" or "exec" + if command == "config": + handle_config(sys.argv[2:]) # Output job configuration JSON + elif command == "exec": + handle_exec(sys.argv[2:]) # Perform actual work +``` + +### Job Configuration Requirements +**CRITICAL**: Job configs must include non-empty `args` for execution to work: +```python +config = { + "configs": [{ + "outputs": [{"str": partition_ref}], + "inputs": [...], + "args": ["some_arg"], # REQUIRED: Cannot be empty [] + "env": {"PARTITION_REF": partition_ref} + }] +} +``` + +Jobs with `"args": []` will only have their config function called during execution, not exec. + +### DataBuild Execution Flow +1. **Planning Phase**: DataBuild calls `.cfg` targets to get job configurations +2. **Execution Phase**: DataBuild calls main job targets which pipe config to exec +3. **Job Resolution**: Job lookup returns base job names (e.g., `//:job_name`), not `.cfg` variants + +### Graph Configuration +```python +databuild_graph( + name = "my_graph", + jobs = [":job1", ":job2"], # Reference base job targets + lookup = ":job_lookup", # Binary that routes partition refs to jobs +) +``` + +### Job Lookup Pattern +```python +def lookup_job_for_partition(partition_ref: str) -> str: + if pattern.match(partition_ref): + return "//:job_name" # Return base job target + raise ValueError(f"No job found for: {partition_ref}") +``` + +### Common Pitfalls +- **Empty args**: Jobs with `"args": []` won't execute properly +- **Wrong target refs**: Job lookup must return base targets, not `.cfg` variants +- **Missing partition refs**: All outputs must be addressable via partition references \ No newline at end of file diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 0cf76d1..78d6eb1 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -187,7 +187,7 @@ }, "@@pybind11_bazel+//:python_configure.bzl%extension": { "general": { - "bzlTransitiveDigest": "d4N/SZrl3ONcmzE98rcV0Fsro0iUbjNQFTIiLiGuH+k=", + "bzlTransitiveDigest": "OMjJ8aOAn337bDg7jdyvF/juIrC2PpUcX6Dnf+nhcF0=", "usagesDigest": "fycyB39YnXIJkfWCIXLUKJMZzANcuLy9ZE73hRucjFk=", "recordedFileInputs": { "@@pybind11_bazel+//MODULE.bazel": "88af1c246226d87e65be78ed49ecd1e6f5e98648558c14ce99176da041dc378e" @@ -221,7 +221,7 @@ }, "@@rules_fuzzing+//fuzzing/private:extensions.bzl%non_module_dependencies": { "general": { - "bzlTransitiveDigest": "mGiTB79hRNjmeDTQdzkpCHyzXhErMbufeAmySBt7s5s=", + "bzlTransitiveDigest": "lxvzPQyluk241QRYY81nZHOcv5Id/5U2y6dp42qibis=", "usagesDigest": "wy6ISK6UOcBEjj/mvJ/S3WeXoO67X+1llb9yPyFtPgc=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, @@ -525,7 +525,7 @@ }, "@@rules_python+//python/private/pypi:pip.bzl%pip_internal": { "general": { - "bzlTransitiveDigest": "sCGUUdVOVATRPlKd1IJea1kfLmtsYsAZdVI5HkdAUQo=", + "bzlTransitiveDigest": "bKQjDjomeeeh547JZoDNozPUkVrO368PlWs0shDGtJU=", "usagesDigest": "OLoIStnzNObNalKEMRq99FqenhPGLFZ5utVLV4sz7OI=", "recordedFileInputs": { "@@rules_python+//tools/publish/requirements_darwin.txt": "2994136eab7e57b083c3de76faf46f70fad130bc8e7360a7fed2b288b69e79dc", @@ -4171,7 +4171,7 @@ }, "@@rules_rust+//crate_universe/private:internal_extensions.bzl%cu_nr": { "general": { - "bzlTransitiveDigest": "7DC2ciVAva/LfjqxrbJs5WDxaCDqDaPY4HXXZriW120=", + "bzlTransitiveDigest": "mDJ0pT/rBCHMm7FzlOzh9Qng+sXi1kyQXEU8TahWqRc=", "usagesDigest": "Pr9/2PR9/ujuo94SXikpx+fg31V4bDKobC10YJu+z5I=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, diff --git a/databuild/graph/analyze.rs b/databuild/graph/analyze.rs index b1aa192..3b8c41b 100644 --- a/databuild/graph/analyze.rs +++ b/databuild/graph/analyze.rs @@ -42,11 +42,12 @@ fn configure(job_label: &str, output_refs: &[String]) -> Result, Strin // Parse the job configurations let stdout = String::from_utf8_lossy(&output.stdout); - let job_configs: Vec = serde_json::from_str(&stdout) + let job_configure_response: JobConfigureResponse = serde_json::from_str(&stdout) .map_err(|e| { error!("Error parsing job configs for {}: {}. `{}`", job_label, e, stdout); format!("Failed to parse job configs: {}", e) })?; + let job_configs = job_configure_response.configs; // Create tasks let tasks: Vec = job_configs.into_iter() @@ -232,11 +233,11 @@ fn plan(output_refs: &[String]) -> Result { let mut new_unhandled_count = 0; for task in &new_nodes { for input in &task.config.inputs { - if input.dep_type == DataDepType::Materialize { - if !unhandled_refs.contains(&input.reference) { + if input.dep_type == 1 { // MATERIALIZE = 1 + if !unhandled_refs.contains(&input.partition_ref.str) { new_unhandled_count += 1; } - unhandled_refs.insert(input.reference.clone()); + unhandled_refs.insert(input.partition_ref.str.clone()); } } } @@ -276,18 +277,19 @@ fn generate_mermaid_diagram(graph: &JobGraph) -> String { // Process each task in the graph for task in &graph.nodes { // Create a unique ID for this job+outputs combination - let outputs_key = task.config.outputs.join("_"); + let outputs_strs: Vec = task.config.outputs.iter().map(|o| o.str.clone()).collect(); + let outputs_key = outputs_strs.join("_"); let mut job_node_id = format!("job_{}", task.job_label.replace("//", "_")); - job_node_id = job_node_id.replace(":", "_"); - job_node_id = format!("{}_{}", job_node_id, outputs_key.replace("/", "_")); + job_node_id = job_node_id.replace(":", "_").replace("=", "_").replace("?", "_").replace(" ", "_"); + job_node_id = format!("{}_{}", job_node_id, outputs_key.replace("/", "_").replace("=", "_")); // Create a descriptive label that includes both job label and outputs let job_label = &task.job_label; let outputs_label = if !task.config.outputs.is_empty() { if task.config.outputs.len() == 1 { - format!(" [{}]", task.config.outputs[0]) + format!(" [{}]", task.config.outputs[0].str) } else { - format!(" [{}, ...]", task.config.outputs[0]) + format!(" [{}, ...]", task.config.outputs[0].str) } } else { String::new() @@ -307,11 +309,11 @@ fn generate_mermaid_diagram(graph: &JobGraph) -> String { // Process inputs (dependencies) for input in &task.config.inputs { - let ref_node_id = format!("ref_{}", input.reference.replace("/", "_")); + let ref_node_id = format!("ref_{}", input.partition_ref.str.replace("/", "_").replace("=", "_")); // Add the partition ref node if not already added if !added_refs.contains(&ref_node_id) { - let node_class = if is_output_ref.contains(&input.reference) { + let node_class = if is_output_ref.contains(&input.partition_ref.str) { "outputPartition" } else { "partition" @@ -321,14 +323,14 @@ fn generate_mermaid_diagram(graph: &JobGraph) -> String { mermaid.push_str(&format!( " {}[(\"{}\")]:::{}\n", ref_node_id, - input.reference, + input.partition_ref.str.replace("/", "_").replace("=", "_"), node_class )); added_refs.insert(ref_node_id.clone()); } // Add the edge from input to job - if input.dep_type == DataDepType::Materialize { + if input.dep_type == 1 { // MATERIALIZE = 1 // Solid line for materialize dependencies mermaid.push_str(&format!(" {} --> {}\n", ref_node_id, job_node_id)); } else { @@ -339,11 +341,11 @@ fn generate_mermaid_diagram(graph: &JobGraph) -> String { // Process outputs for output in &task.config.outputs { - let ref_node_id = format!("ref_{}", output.replace("/", "_")); + let ref_node_id = format!("ref_{}", output.str.replace("/", "_").replace("=", "_")); // Add the partition ref node if not already added if !added_refs.contains(&ref_node_id) { - let node_class = if is_output_ref.contains(output) { + let node_class = if is_output_ref.contains(&output.str) { "outputPartition" } else { "partition" @@ -353,7 +355,7 @@ fn generate_mermaid_diagram(graph: &JobGraph) -> String { mermaid.push_str(&format!( " {}[(\"Partition: {}\")]:::{}\n", ref_node_id, - output, + output.str, node_class )); added_refs.insert(ref_node_id.clone()); diff --git a/databuild/graph/execute.rs b/databuild/graph/execute.rs index 269bc3e..502b104 100644 --- a/databuild/graph/execute.rs +++ b/databuild/graph/execute.rs @@ -1,4 +1,4 @@ -use structs::{DataDepType, JobConfig, JobGraph, Task}; +use structs::{JobGraph, Task}; use crossbeam_channel::{Receiver, Sender}; use log::{debug, error, info, warn}; use serde::{Deserialize, Serialize}; @@ -40,10 +40,10 @@ fn get_task_key(task: &Task) -> String { key_parts.push(task.job_label.clone()); for input_dep in &task.config.inputs { - key_parts.push(format!("input:{}", input_dep.reference)); + key_parts.push(format!("input:{}", input_dep.partition_ref.str)); } for output_ref in &task.config.outputs { - key_parts.push(format!("output:{}", output_ref)); + key_parts.push(format!("output:{}", output_ref.str)); } key_parts.join("|") } @@ -242,13 +242,21 @@ fn worker( } fn is_task_ready(task: &Task, completed_outputs: &HashSet) -> bool { + let mut missing_deps = Vec::new(); + for dep in &task.config.inputs { - if dep.dep_type == DataDepType::Materialize { - if !completed_outputs.contains(&dep.reference) { - return false; + if dep.dep_type == 1 { // MATERIALIZE = 1 + if !completed_outputs.contains(&dep.partition_ref.str) { + missing_deps.push(&dep.partition_ref.str); } } } + + if !missing_deps.is_empty() { + debug!("Task {} not ready - missing dependencies: {:?}", task.job_label, missing_deps); + return false; + } + true } @@ -341,7 +349,7 @@ fn main() -> Result<(), Box> { if result.success { if let Some(original_task) = original_tasks_by_key.get(&result.task_key) { for output_ref in &original_task.config.outputs { - completed_outputs.insert(output_ref.clone()); + completed_outputs.insert(output_ref.str.clone()); } } } else { @@ -379,6 +387,34 @@ fn main() -> Result<(), Box> { // 4. Periodic logging if last_log_time.elapsed() >= LOG_INTERVAL { log_status_summary(&task_states, &original_tasks_by_key); + + // Debug: Check for deadlock (pending tasks with no running tasks) + let has_pending = task_states.values().any(|s| *s == TaskState::Pending); + if has_pending && active_tasks_count == 0 { + warn!("Potential deadlock detected: {} pending tasks with no running tasks", + task_states.values().filter(|s| **s == TaskState::Pending).count()); + + // Log details of pending tasks and their preconditions + for (key, state) in &task_states { + if *state == TaskState::Pending { + if let Some(task) = original_tasks_by_key.get(key) { + warn!("Pending task: {} ({})", task.job_label, key); + warn!(" Required inputs:"); + for dep in &task.config.inputs { + if dep.dep_type == 1 { // MATERIALIZE = 1 + let available = completed_outputs.contains(&dep.partition_ref.str); + warn!(" {} - {}", dep.partition_ref.str, if available { "AVAILABLE" } else { "MISSING" }); + } + } + warn!(" Produces outputs:"); + for output in &task.config.outputs { + warn!(" {}", output.str); + } + } + } + } + } + last_log_time = Instant::now(); } diff --git a/databuild/job/execute_wrapper.sh.tpl b/databuild/job/execute_wrapper.sh.tpl index 2cb2c84..8b27fd9 100755 --- a/databuild/job/execute_wrapper.sh.tpl +++ b/databuild/job/execute_wrapper.sh.tpl @@ -3,6 +3,8 @@ set -e %{RUNFILES_PREFIX} +%{PREFIX} + EXECUTE_BINARY="$(rlocation "_main/$(basename "%{EXECUTE_PATH}")")" JQ="$(rlocation "databuild+/databuild/runtime/$(basename "%{JQ_PATH}")")" @@ -44,4 +46,8 @@ while IFS= read -r arg; do done < <("$JQ" -r '.args[]' "$CONFIG_FILE") # Run the execution with both environment variables (already set) and arguments -exec "$EXECUTE_BINARY" "${ARGS[@]}" +if [[ -n "${EXECUTE_SUBCOMMAND:-}" ]]; then + exec "$EXECUTE_BINARY" "${EXECUTE_SUBCOMMAND}" "${ARGS[@]}" +else + exec "$EXECUTE_BINARY" "${ARGS[@]}" +fi diff --git a/databuild/rules.bzl b/databuild/rules.bzl index e0a173d..29526e2 100644 --- a/databuild/rules.bzl +++ b/databuild/rules.bzl @@ -30,30 +30,26 @@ source "${RUNFILES_DIR:-/dev/null}/$f" 2>/dev/null || \ def databuild_job( name, - configure, - execute, + binary, visibility = None): """Creates a DataBuild job target with configuration and execution capabilities. Args: name: Name of the job target - configure: Target that implements the configuration logic - execute: Target that implements the execution logic - deps: List of other job_targets this job depends on + binary: Single binary target that handles both config and exec via subcommands visibility: Visibility specification - **kwargs: Additional attributes to pass to the underlying rule """ + # Single binary approach - use subcommands _databuild_job_cfg_rule( name = name + ".cfg", - configure = configure, + configure = binary, visibility = visibility, ) - # Create the main rule that serves as a provider for other targets _databuild_job_exec_rule( name = name + ".exec", - execute = execute, + execute = binary, visibility = visibility, ) @@ -76,7 +72,7 @@ def _databuild_job_cfg_impl(ctx): substitutions = { "%{EXECUTABLE_PATH}": configure_path, "%{RUNFILES_PREFIX}": RUNFILES_PREFIX, - "%{PREFIX}": "", + "%{PREFIX}": "EXECUTABLE_SUBCOMMAND=\"config\"\n", }, is_executable = True, ) @@ -132,6 +128,7 @@ def _databuild_job_exec_impl(ctx): "%{JQ_PATH}": jq_path, "%{EXECUTE_PATH}": execute_path, "%{RUNFILES_PREFIX}": RUNFILES_PREFIX, + "%{PREFIX}": "EXECUTE_SUBCOMMAND=\"exec\"\n", }, is_executable = True, ) diff --git a/databuild/runtime/simple_executable_wrapper.sh.tpl b/databuild/runtime/simple_executable_wrapper.sh.tpl index e67b4b5..454ec6b 100755 --- a/databuild/runtime/simple_executable_wrapper.sh.tpl +++ b/databuild/runtime/simple_executable_wrapper.sh.tpl @@ -8,4 +8,8 @@ set -e EXECUTABLE_BINARY="$(rlocation "_main/$(basename "%{EXECUTABLE_PATH}")")" # Run the configuration -exec "${EXECUTABLE_BINARY}" "$@" +if [[ -n "${EXECUTABLE_SUBCOMMAND:-}" ]]; then + exec "${EXECUTABLE_BINARY}" "${EXECUTABLE_SUBCOMMAND}" "$@" +else + exec "${EXECUTABLE_BINARY}" "$@" +fi diff --git a/databuild/structs.rs b/databuild/structs.rs index 96c4264..2da2c06 100644 --- a/databuild/structs.rs +++ b/databuild/structs.rs @@ -2,42 +2,53 @@ use std::collections::HashMap; use serde::{Deserialize, Serialize}; use std::str::FromStr; -// Data structures that mirror the Go implementation -#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] -#[serde(rename_all = "lowercase")] -pub enum DataDepType { - Query, - Materialize, +// Data structures that follow the protobuf specification exactly + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct PartitionRef { + #[serde(rename = "str")] + pub str: String, } -impl FromStr for DataDepType { +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] +pub enum DepType { + #[serde(rename = "QUERY")] + Query = 0, + #[serde(rename = "MATERIALIZE")] + Materialize = 1, +} + +impl FromStr for DepType { type Err = String; fn from_str(s: &str) -> Result { - match s.to_lowercase().as_str() { - "query" => Ok(DataDepType::Query), - "materialize" => Ok(DataDepType::Materialize), - _ => Err(format!("Unknown DataDepType: {}", s)), + match s.to_uppercase().as_str() { + "QUERY" => Ok(DepType::Query), + "MATERIALIZE" => Ok(DepType::Materialize), + _ => Err(format!("Unknown DepType: {}", s)), } } } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct DataDep { - #[serde(rename = "depType")] - pub dep_type: DataDepType, - #[serde(rename = "ref")] - pub reference: String, + pub dep_type: u32, // Protobuf enums are serialized as integers + pub partition_ref: PartitionRef, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct JobConfig { pub inputs: Vec, - pub outputs: Vec, + pub outputs: Vec, pub args: Vec, pub env: HashMap, } +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct JobConfigureResponse { + pub configs: Vec, +} + #[derive(Debug, Clone, Serialize, Deserialize)] pub struct Task { #[serde(rename = "jobLabel")] diff --git a/examples/basic_graph/BUILD.bazel b/examples/basic_graph/BUILD.bazel index 17676e8..46abb0d 100644 --- a/examples/basic_graph/BUILD.bazel +++ b/examples/basic_graph/BUILD.bazel @@ -35,54 +35,34 @@ py_binary( databuild_job( name = "generate_number_job", - configure = ":generate_number_configure", - execute = ":generate_number_execute", + binary = ":generate_number_binary", visibility = ["//visibility:public"], ) java_binary( - name = "generate_number_configure", - srcs = glob(["*.java"]), - create_executable = True, - main_class = "com.databuild.examples.basic_graph.GenerateConfigure", + name = "generate_number_binary", + srcs = ["UnifiedGenerateNumber.java"], + main_class = "com.databuild.examples.basic_graph.UnifiedGenerateNumber", deps = [ "@maven//:com_fasterxml_jackson_core_jackson_annotations", "@maven//:com_fasterxml_jackson_core_jackson_core", "@maven//:com_fasterxml_jackson_core_jackson_databind", - "@maven//:com_fasterxml_jackson_module_jackson_module_jsonSchema", ], ) -java_binary( - name = "generate_number_execute", - srcs = glob(["GenerateExecute.java"]), - main_class = "com.databuild.examples.basic_graph.GenerateExecute", -) - databuild_job( name = "sum_job", - configure = ":sum_configure", - execute = ":sum_execute", + binary = ":sum_binary", visibility = ["//visibility:public"], ) java_binary( - name = "sum_configure", - srcs = glob(["*.java"]), - main_class = "com.databuild.examples.basic_graph.SumConfigure", + name = "sum_binary", + srcs = ["UnifiedSum.java"], + main_class = "com.databuild.examples.basic_graph.UnifiedSum", deps = [ "@maven//:com_fasterxml_jackson_core_jackson_annotations", "@maven//:com_fasterxml_jackson_core_jackson_core", "@maven//:com_fasterxml_jackson_core_jackson_databind", - "@maven//:com_fasterxml_jackson_module_jackson_module_jsonSchema", ], -) - -java_binary( - name = "sum_execute", - srcs = glob([ - "SumExecute.java", - "GenerateExecute.java", - ]), - main_class = "com.databuild.examples.basic_graph.SumExecute", -) +) \ No newline at end of file diff --git a/examples/basic_graph/GenerateConfigure.java b/examples/basic_graph/GenerateConfigure.java deleted file mode 100644 index f052dad..0000000 --- a/examples/basic_graph/GenerateConfigure.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.databuild.examples.basic_graph; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.JsonNode; - -import java.util.ArrayList; -import java.util.List; -import java.io.File; -import java.util.Arrays; -import java.util.Collections; - -/** - * Configure class for generating a random number. - * This class creates a job configuration for generating a random number based on the partition ref. - */ -public class GenerateConfigure { - public static void main(String[] args) { - if (args.length < 1) { - System.err.println("Error: Partition ref is required"); - System.exit(1); - } - List configList = new ArrayList<>(); - - // Process each partition ref from input arguments - Arrays.stream(args).forEach(partitionRef -> { - // Create and populate JobConfig object - JobConfig config = new JobConfig(); - config.outputs = Collections.singletonList(partitionRef); - config.args = Arrays.asList(partitionRef); - // inputs and env are already initialized as empty collections in the constructor - configList.add(config); - }); - - try { - ObjectMapper mapper = new ObjectMapper(); - - // Convert config list to JsonNode and serialize - JsonNode configNode = mapper.valueToTree(configList); - String jsonConfig = mapper.writeValueAsString(configNode); - System.out.println(jsonConfig); - } catch (Exception e) { - System.err.println("Error: Failed to validate or serialize config: " + e.getMessage()); - System.exit(1); - } - } -} \ No newline at end of file diff --git a/examples/basic_graph/GenerateExecute.java b/examples/basic_graph/GenerateExecute.java deleted file mode 100644 index 671d727..0000000 --- a/examples/basic_graph/GenerateExecute.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.databuild.examples.basic_graph; - -import java.io.FileWriter; -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.util.Random; - -/** - * Execute class for generating a random number. - * This class generates a random number based on the partition ref. - */ -public class GenerateExecute { - public static String BASE_PATH = "/tmp/databuild_test/examples/basic_graph/"; - - public static void main(String[] args) { - if (args.length < 1) { - System.err.println("Error: Partition ref (output path) is required"); - System.exit(1); - } - - String partitionRef = args[0]; - - try { - // Create a hash of the partition ref to use as a seed - MessageDigest md = MessageDigest.getInstance("MD5"); - byte[] hashBytes = md.digest(partitionRef.getBytes(StandardCharsets.UTF_8)); - - // Convert the first 8 bytes of the hash to a long to use as a seed - long seed = 0; - for (int i = 0; i < Math.min(8, hashBytes.length); i++) { - seed = (seed << 8) | (hashBytes[i] & 0xff); - } - - // Create a random number generator with the seed - Random random = new Random(seed); - - // Generate a random number - int randomNumber = random.nextInt(100); - - // Write the random number to the output file - // Ensure dir exists - java.io.File parent = new java.io.File(partitionRef).getParentFile(); - if (parent != null) { - parent.mkdirs(); - } - try (FileWriter writer = new FileWriter(partitionRef)) { - writer.write("Random number for partition " + partitionRef + ": " + randomNumber); - } - - System.out.println("Generated random number " + randomNumber + " for partition " + partitionRef); - - // Write the random number to the output file - String outputPath = partitionRef; - System.out.println("Writing random number " + randomNumber + " to " + outputPath); - // Ensure dir exists - new java.io.File(outputPath).getParentFile().mkdirs(); - // Write number (overwrite) - try (FileWriter writer = new FileWriter(outputPath)) { - writer.write(String.valueOf(randomNumber)); - } - - } catch (NoSuchAlgorithmException | IOException e) { - System.err.println("Error: " + e.getMessage()); - e.printStackTrace(); - System.exit(1); - } - } -} \ No newline at end of file diff --git a/examples/basic_graph/SumConfigure.java b/examples/basic_graph/SumConfigure.java deleted file mode 100644 index 197940a..0000000 --- a/examples/basic_graph/SumConfigure.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.databuild.examples.basic_graph; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.JsonNode; - -import java.io.File; -import java.util.Arrays; -import java.util.Collections; -import java.util.stream.Collectors; - -import static com.databuild.examples.basic_graph.GenerateExecute.BASE_PATH; - -/** - * Configure class for generating a random number. - * This class creates a job configuration for generating a random number based on the partition ref. - */ -public class SumConfigure { - public static void main(String[] args) { - if (args.length != 1) { - System.err.println("Error: Must provide exactly one partition ref as an argument"); - System.exit(1); - } - - String partitionRef = args[0]; - String[] pathParts = partitionRef.split("/"); - String[] upstreams = Arrays.stream(pathParts[pathParts.length - 1].split("_")) - .map(part -> BASE_PATH + "generated_number/" + part) - .toArray(String[]::new); - - // Create and populate JobConfig object - JobConfig config = new JobConfig(); - config.outputs = Collections.singletonList(BASE_PATH + "sum/" +partitionRef); - config.inputs = Arrays.stream(upstreams) - .map(upstream -> { - DataDep dep = new DataDep(); - dep.depType = "materialize"; - dep.ref = upstream; - return dep; - }) - .collect(Collectors.toList()); - config.args = Arrays.asList(upstreams); - // Create a hashmap for env with {"OUTPUT_REF": "foo"} - config.env = Collections.singletonMap("OUTPUT_REF", args[0]); - // inputs and env are already initialized as empty collections in the constructor - - try { - ObjectMapper mapper = new ObjectMapper(); - - // Convert config to JsonNode and serialize - JsonNode configNode = mapper.valueToTree(Collections.singletonList(config)); - String jsonConfig = mapper.writeValueAsString(configNode); - System.out.println(jsonConfig); - } catch (Exception e) { - System.err.println("Error: Failed to validate or serialize config: " + e.getMessage()); - System.exit(1); - } - } -} diff --git a/examples/basic_graph/SumExecute.java b/examples/basic_graph/SumExecute.java deleted file mode 100644 index f45acae..0000000 --- a/examples/basic_graph/SumExecute.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.databuild.examples.basic_graph; - -import static com.databuild.examples.basic_graph.GenerateExecute.BASE_PATH; - -public class SumExecute { - public static void main(String[] args) { - if (args.length < 1) { - System.err.println("Error: Partition ref (output path) is required"); - System.exit(1); - } - - // Get output ref from env var OUTPUT_REF - String outputRef = System.getenv("OUTPUT_REF"); - - // For each arg, load it from the file system and add it to the sum - int sum = 0; - for (String partitionRef : args) { - try { - String path = partitionRef; - int partitionValue = Integer.parseInt(new String(java.nio.file.Files.readAllBytes(java.nio.file.Paths.get(path)))); - System.out.println("Summing partition " + partitionRef + " with value " + partitionValue); - sum += partitionValue; - } catch (Exception e) { - System.err.println("Error: Failed to read partition " + partitionRef + ": " + e.getMessage()); - e.printStackTrace(); - } - } - System.out.println("Sum of " + args.length + " partitions: " + sum); - // Write the sum to the output file - String outPath = outputRef; - System.out.println("Writing sum " + sum + " to " + outPath); - - java.io.File parent = new java.io.File(outPath).getParentFile(); - if (parent != null) { - parent.mkdirs(); - } - - try (java.io.FileWriter writer = new java.io.FileWriter(outPath)) { - writer.write(String.valueOf(sum)); - } catch (Exception e) { - System.err.println("Error: Failed to write sum to " + outputRef + ": " + e.getMessage()); - } - } -} diff --git a/examples/basic_graph/UnifiedGenerateNumber.java b/examples/basic_graph/UnifiedGenerateNumber.java new file mode 100644 index 0000000..3fdadc0 --- /dev/null +++ b/examples/basic_graph/UnifiedGenerateNumber.java @@ -0,0 +1,117 @@ +package com.databuild.examples.basic_graph; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.JsonNode; + +import java.util.ArrayList; +import java.util.List; +import java.io.File; +import java.util.Arrays; +import java.util.Collections; +import java.io.FileWriter; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.Random; + +/** + * Unified job that handles both configuration and execution via subcommands. + */ +public class UnifiedGenerateNumber { + public static String BASE_PATH = "/tmp/databuild_test/examples/basic_graph/"; + + public static void main(String[] args) { + if (args.length < 1) { + System.err.println("Usage: UnifiedGenerateNumber {config|exec} [args...]"); + System.exit(1); + } + + String command = args[0]; + switch (command) { + case "config": + handleConfig(Arrays.copyOfRange(args, 1, args.length)); + break; + case "exec": + handleExec(Arrays.copyOfRange(args, 1, args.length)); + break; + default: + System.err.println("Unknown command: " + command); + System.err.println("Usage: UnifiedGenerateNumber {config|exec} [args...]"); + System.exit(1); + } + } + + private static void handleConfig(String[] args) { + if (args.length < 1) { + System.err.println("Config mode requires partition ref"); + System.exit(1); + } + + String partitionRef = args[0]; + + try { + ObjectMapper mapper = new ObjectMapper(); + + // Create job configuration + var config = mapper.createObjectNode(); + + // Create outputs as PartitionRef objects + var outputs = mapper.createArrayNode(); + var outputPartRef = mapper.createObjectNode(); + outputPartRef.put("str", partitionRef); + outputs.add(outputPartRef); + config.set("outputs", outputs); + + config.set("inputs", mapper.createArrayNode()); + config.set("args", mapper.createArrayNode().add("will").add("generate").add(partitionRef)); + config.set("env", mapper.createObjectNode().put("PARTITION_REF", partitionRef)); + + var response = mapper.createObjectNode(); + response.set("configs", mapper.createArrayNode().add(config)); + + System.out.println(mapper.writeValueAsString(response)); + } catch (Exception e) { + System.err.println("Error creating config: " + e.getMessage()); + System.exit(1); + } + } + + private static void handleExec(String[] args) { + if (args.length < 3) { + System.err.println("Execute mode requires: will generate "); + System.exit(1); + } + + String partitionRef = args[2]; + + try { + // Generate a random number based on the partition ref + MessageDigest md = MessageDigest.getInstance("SHA-256"); + byte[] hash = md.digest(partitionRef.getBytes(StandardCharsets.UTF_8)); + long seed = 0; + for (int i = 0; i < 8; i++) { + seed = (seed << 8) | (hash[i] & 0xFF); + } + + Random random = new Random(seed); + int randomNumber = random.nextInt(100) + 1; + + // Write to file - partitionRef is the full path + File outputFile = new File(partitionRef); + File outputDir = outputFile.getParentFile(); + if (outputDir != null) { + outputDir.mkdirs(); + } + try (FileWriter writer = new FileWriter(outputFile)) { + writer.write(String.valueOf(randomNumber)); + } + + System.out.println("Generated number " + randomNumber + " for partition " + partitionRef); + + } catch (Exception e) { + System.err.println("Error in execution: " + e.getMessage()); + System.exit(1); + } + } +} \ No newline at end of file diff --git a/examples/basic_graph/UnifiedSum.java b/examples/basic_graph/UnifiedSum.java new file mode 100644 index 0000000..fd9f4b5 --- /dev/null +++ b/examples/basic_graph/UnifiedSum.java @@ -0,0 +1,137 @@ +package com.databuild.examples.basic_graph; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.JsonNode; + +import java.io.File; +import java.util.Arrays; +import java.util.Collections; +import java.util.stream.Collectors; +import java.io.FileWriter; +import java.io.IOException; + +// import static com.databuild.examples.basic_graph.GenerateExecute.BASE_PATH; + +/** + * Unified sum job that handles both configuration and execution via subcommands. + */ +public class UnifiedSum { + public static String BASE_PATH = "/tmp/databuild_test/examples/basic_graph/"; + + public static void main(String[] args) { + if (args.length < 1) { + System.err.println("Usage: UnifiedSum {config|exec} [args...]"); + System.exit(1); + } + + String command = args[0]; + switch (command) { + case "config": + handleConfig(Arrays.copyOfRange(args, 1, args.length)); + break; + case "exec": + handleExec(Arrays.copyOfRange(args, 1, args.length)); + break; + default: + System.err.println("Unknown command: " + command); + System.err.println("Usage: UnifiedSum {config|exec} [args...]"); + System.exit(1); + } + } + + private static void handleConfig(String[] args) { + if (args.length != 1) { + System.err.println("Config mode requires exactly one partition ref"); + System.exit(1); + } + + String partitionRef = args[0]; + String[] pathParts = partitionRef.split("/"); + String[] upstreams = Arrays.stream(pathParts[pathParts.length - 1].split("_")) + .map(part -> BASE_PATH + "generated_number/" + part) + .toArray(String[]::new); + + try { + ObjectMapper mapper = new ObjectMapper(); + + // Create data dependencies + var inputs = mapper.createArrayNode(); + for (String upstream : upstreams) { + var dataDep = mapper.createObjectNode(); + dataDep.put("dep_type", 0); // QUERY + var partRef = mapper.createObjectNode(); + partRef.put("str", upstream); + dataDep.set("partition_ref", partRef); + inputs.add(dataDep); + } + + // Create job configuration + var config = mapper.createObjectNode(); + + // Create outputs as PartitionRef objects + var outputs = mapper.createArrayNode(); + var outputPartRef = mapper.createObjectNode(); + outputPartRef.put("str", partitionRef); + outputs.add(outputPartRef); + config.set("outputs", outputs); + + config.set("inputs", inputs); + var argsArray = mapper.createArrayNode(); + for (String upstream : upstreams) { + argsArray.add(upstream); + } + config.set("args", argsArray); + config.set("env", mapper.createObjectNode().put("OUTPUT_REF", partitionRef)); + + var response = mapper.createObjectNode(); + response.set("configs", mapper.createArrayNode().add(config)); + + System.out.println(mapper.writeValueAsString(response)); + } catch (Exception e) { + System.err.println("Error creating config: " + e.getMessage()); + System.exit(1); + } + } + + private static void handleExec(String[] args) { + // Get output ref from env var OUTPUT_REF + String outputRef = System.getenv("OUTPUT_REF"); + + if (outputRef == null) { + System.err.println("Error: OUTPUT_REF environment variable is required"); + System.exit(1); + } + + // For each arg, load it from the file system and add it to the sum + int sum = 0; + for (String partitionRef : args) { + try { + String path = partitionRef; + int partitionValue = Integer.parseInt(new String(java.nio.file.Files.readAllBytes(java.nio.file.Paths.get(path)))); + System.out.println("Summing partition " + partitionRef + " with value " + partitionValue); + sum += partitionValue; + } catch (Exception e) { + System.err.println("Error: Failed to read partition " + partitionRef + ": " + e.getMessage()); + e.printStackTrace(); + System.exit(1); + } + } + + System.out.println("Sum of " + args.length + " partitions: " + sum); + + // Write the sum to the output file + try { + File outputDir = new File(outputRef).getParentFile(); + if (outputDir != null) { + outputDir.mkdirs(); + } + try (FileWriter writer = new FileWriter(outputRef)) { + writer.write(String.valueOf(sum)); + } + System.out.println("Wrote sum " + sum + " to " + outputRef); + } catch (Exception e) { + System.err.println("Error writing output: " + e.getMessage()); + System.exit(1); + } + } +} \ No newline at end of file diff --git a/examples/basic_graph/test/generate_number_test.sh b/examples/basic_graph/test/generate_number_test.sh index 9225dae..7ec8642 100755 --- a/examples/basic_graph/test/generate_number_test.sh +++ b/examples/basic_graph/test/generate_number_test.sh @@ -5,11 +5,11 @@ set -e generate_number_job.cfg /tmp/databuild_test/examples/basic_graph/generated_number/pippin /tmp/databuild_test/examples/basic_graph/generated_number/salem /tmp/databuild_test/examples/basic_graph/generated_number/sadie # Test run -generate_number_job.cfg /tmp/databuild_test/examples/basic_graph/generated_number/pippin | jq -c ".[0]" | generate_number_job.exec +generate_number_job.cfg /tmp/databuild_test/examples/basic_graph/generated_number/pippin | jq -c ".configs[0]" | generate_number_job.exec -# Validate that contents of pippin is 83 -if [[ "$(cat /tmp/databuild_test/examples/basic_graph/generated_number/pippin)" != "83" ]]; then - echo "Assertion failed: File does not contain 83" +# Validate that contents of pippin is 1 (deterministic based on SHA-256 hash) +if [[ "$(cat /tmp/databuild_test/examples/basic_graph/generated_number/pippin)" != "1" ]]; then + echo "Assertion failed: File does not contain 1" cat /tmp/databuild_test/examples/basic_graph/generated_number/pippin exit 1 fi diff --git a/examples/basic_graph/test/sum_test.sh b/examples/basic_graph/test/sum_test.sh index 2f2d315..1c20c4c 100755 --- a/examples/basic_graph/test/sum_test.sh +++ b/examples/basic_graph/test/sum_test.sh @@ -13,7 +13,7 @@ echo -n 83 > /tmp/databuild_test/examples/basic_graph/generated_number/pippin echo -n 34 > /tmp/databuild_test/examples/basic_graph/generated_number/salem echo -n 19 > /tmp/databuild_test/examples/basic_graph/generated_number/sadie -sum_job.cfg /tmp/databuild_test/examples/basic_graph/sum/pippin_salem_sadie | jq -c ".[0]" | sum_job.exec +sum_job.cfg /tmp/databuild_test/examples/basic_graph/sum/pippin_salem_sadie | jq -c ".configs[0]" | sum_job.exec # Validate that contents of output is 136 if [[ "$(cat /tmp/databuild_test/examples/basic_graph/sum/pippin_salem_sadie)" != "136" ]]; then diff --git a/examples/basic_job/BUILD.bazel b/examples/basic_job/BUILD.bazel index 1e85353..430b632 100644 --- a/examples/basic_job/BUILD.bazel +++ b/examples/basic_job/BUILD.bazel @@ -2,17 +2,11 @@ load("@databuild//databuild:rules.bzl", "databuild_job") databuild_job( name = "test_job", - configure = ":test_job_configure", - execute = ":test_job_execute", + binary = ":test_job_binary", visibility = ["//visibility:public"], ) sh_binary( - name = "test_job_configure", - srcs = ["configure.sh"], -) - -sh_binary( - name = "test_job_execute", - srcs = ["execute.sh"], + name = "test_job_binary", + srcs = ["unified_job.sh"], ) diff --git a/examples/basic_job/configure.sh b/examples/basic_job/configure.sh deleted file mode 100755 index d69fa5b..0000000 --- a/examples/basic_job/configure.sh +++ /dev/null @@ -1,2 +0,0 @@ -# Create a test job config -echo "{\"configs\":[{\"outputs\":[\"$1\"],\"inputs\":[],\"args\":[\"will\", \"build\", \"$1\"],\"env\":{\"foo\":\"bar\"}}]}" diff --git a/examples/basic_job/execute.sh b/examples/basic_job/execute.sh deleted file mode 100755 index 921637d..0000000 --- a/examples/basic_job/execute.sh +++ /dev/null @@ -1,3 +0,0 @@ -echo 'EXECUTE!' -echo "foo=$foo" -echo "args=$@" \ No newline at end of file diff --git a/examples/basic_job/unified_job.sh b/examples/basic_job/unified_job.sh new file mode 100755 index 0000000..0dfc5c2 --- /dev/null +++ b/examples/basic_job/unified_job.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +# Simple unified job that handles both config and exec via subcommands + +case "${1:-}" in + "config") + # Configuration mode - output job config JSON + partition_ref="${2:-}" + echo "{\"configs\":[{\"outputs\":[{\"str\":\"${partition_ref}\"}],\"inputs\":[],\"args\":[\"will\", \"build\", \"${partition_ref}\"],\"env\":{\"foo\":\"bar\"}}]}" + ;; + "exec") + # Execution mode - run the job + echo 'EXECUTE UNIFIED!' + echo "foo=$foo" + echo "args=$@" + ;; + *) + echo "Usage: $0 {config|exec} [args...]" + exit 1 + ;; +esac \ No newline at end of file diff --git a/examples/podcast_reviews/BUILD.bazel b/examples/podcast_reviews/BUILD.bazel index 6a7d69a..fdce0f0 100644 --- a/examples/podcast_reviews/BUILD.bazel +++ b/examples/podcast_reviews/BUILD.bazel @@ -1,5 +1,5 @@ load("//:py_repl.bzl", "py_repl") -load("@databuild//databuild:rules.bzl", "databuild_job") +load("@databuild//databuild:rules.bzl", "databuild_job", "databuild_graph") load("@rules_python//python:pip.bzl", "compile_pip_requirements") load("@pypi//:requirements.bzl", "requirement") @@ -9,22 +9,174 @@ compile_pip_requirements( requirements_txt = "requirements_lock.txt", ) +# Podcast Reviews Graph +databuild_graph( + name = "podcast_reviews_graph", + jobs = [ + ":extract_reviews_job", + ":extract_podcasts_job", + ":categorize_reviews_job", + ":phrase_modeling_job", + ":phrase_stats_job", + ":daily_summary_job", + ], + lookup = ":job_lookup", + visibility = ["//visibility:public"], +) + +py_binary( + name = "job_lookup", + srcs = ["job_lookup.py"], + main = "job_lookup.py", +) + +# Extract Reviews Job +databuild_job( + name = "extract_reviews_job", + binary = ":extract_reviews_binary", + visibility = ["//visibility:public"], +) + +py_binary( + name = "extract_reviews_binary", + srcs = ["extract_reviews_job.py", "duckdb_utils.py"], + main = "extract_reviews_job.py", + deps = [ + requirement("duckdb"), + requirement("pydantic"), + requirement("pandas"), + requirement("pyarrow"), + ], +) + +# Extract Podcasts Job +databuild_job( + name = "extract_podcasts_job", + binary = ":extract_podcasts_binary", + visibility = ["//visibility:public"], +) + +py_binary( + name = "extract_podcasts_binary", + srcs = ["extract_podcasts_job.py", "duckdb_utils.py"], + main = "extract_podcasts_job.py", + deps = [ + requirement("duckdb"), + requirement("pydantic"), + requirement("pandas"), + requirement("pyarrow"), + ], +) + +# Categorize Reviews Job +databuild_job( + name = "categorize_reviews_job", + binary = ":categorize_reviews_binary", + visibility = ["//visibility:public"], +) + +py_binary( + name = "categorize_reviews_binary", + srcs = ["categorize_reviews_job.py", "duckdb_utils.py"], + main = "categorize_reviews_job.py", + deps = [ + requirement("duckdb"), + requirement("pydantic"), + requirement("pandas"), + requirement("pyarrow"), + ], +) + +# Phrase Modeling Job +databuild_job( + name = "phrase_modeling_job", + binary = ":phrase_modeling_binary", + visibility = ["//visibility:public"], +) + +py_binary( + name = "phrase_modeling_binary", + srcs = ["phrase_modeling_job.py", "duckdb_utils.py"], + main = "phrase_modeling_job.py", + deps = [ + requirement("duckdb"), + requirement("pydantic"), + requirement("pandas"), + requirement("pyarrow"), + ], +) + +# Phrase Stats Job +databuild_job( + name = "phrase_stats_job", + binary = ":phrase_stats_binary", + visibility = ["//visibility:public"], +) + +py_binary( + name = "phrase_stats_binary", + srcs = ["phrase_stats_job.py", "duckdb_utils.py"], + main = "phrase_stats_job.py", + deps = [ + requirement("duckdb"), + requirement("pydantic"), + requirement("pandas"), + requirement("pyarrow"), + ], +) + +# Daily Summary Job +databuild_job( + name = "daily_summary_job", + binary = ":daily_summary_binary", + visibility = ["//visibility:public"], +) + +py_binary( + name = "daily_summary_binary", + srcs = ["daily_summary_job.py", "duckdb_utils.py"], + main = "daily_summary_job.py", + deps = [ + requirement("duckdb"), + requirement("pydantic"), + requirement("pandas"), + requirement("pyarrow"), + ], +) + +# Legacy test job (kept for compatibility) databuild_job( name = "test_job", - configure = ":test_job_configure", - execute = ":test_job_execute", + binary = ":test_job_binary", ) py_binary( - name = "test_job_configure", - srcs = ["configure.py"], - main = "configure.py", + name = "test_job_binary", + srcs = ["unified_job.py"], + main = "unified_job.py", ) +# Test target py_binary( - name = "test_job_execute", - srcs = ["execute.py"], - main = "execute.py", + name = "test_jobs", + srcs = [ + "test_jobs.py", + "extract_reviews_job.py", + "extract_podcasts_job.py", + "categorize_reviews_job.py", + "phrase_modeling_job.py", + "phrase_stats_job.py", + "daily_summary_job.py", + "job_lookup.py", + "duckdb_utils.py", + ], + main = "test_jobs.py", + deps = [ + requirement("duckdb"), + requirement("pydantic"), + requirement("pandas"), + requirement("pyarrow"), + ], ) py_repl( diff --git a/examples/podcast_reviews/MODULE.bazel.lock b/examples/podcast_reviews/MODULE.bazel.lock index 2f3d23e..dd65cad 100644 --- a/examples/podcast_reviews/MODULE.bazel.lock +++ b/examples/podcast_reviews/MODULE.bazel.lock @@ -413,10 +413,10 @@ }, "@@rules_python+//python/extensions:pip.bzl%pip": { "general": { - "bzlTransitiveDigest": "kSgIwtQrmQ9xXVatFAGiyEeTmBDJtfyphXilwN8+UKo=", + "bzlTransitiveDigest": "GC8nCMy4NY4m89RF6Vq8U2yLdyOcyoC9zT22uvSkxP4=", "usagesDigest": "Yxht2RNdONszrhtkJzz+mqdWbFsvWzyMXgp39D/NZ5M=", "recordedFileInputs": { - "@@//requirements_lock.txt": "4aa61e82d368c885cfeba9eee9cd9b47b48994583ae913d0735b6c749743be10", + "@@//requirements_lock.txt": "081de8152d2af239b4dab7f22e1f1ed46067f9b084a153362f3a165a57470ceb", "@@protobuf+//python/requirements.txt": "983be60d3cec4b319dcab6d48aeb3f5b2f7c3350f26b3a9e97486c37967c73c5", "@@rules_fuzzing+//fuzzing/requirements.txt": "ab04664be026b632a0d2a2446c4f65982b7654f5b6851d2f9d399a19b7242a5b", "@@rules_python+//tools/publish/requirements_darwin.txt": "095d4a4f3d639dce831cd493367631cd51b53665292ab20194bac2c0c6458fa8", @@ -537,6 +537,33 @@ "requirement": "duckdb==1.2.2 --hash=sha256:0353f80882c066f7b14451852395b7a360f3d4846a10555c4268eb49144ea11c --hash=sha256:081110ffbc9d53c9740ef55482c93b97db2f8030d681d1658827d2e94f77da03 --hash=sha256:087713fc5958cae5eb59097856b3deaae0def021660c8f2052ec83fa8345174a --hash=sha256:0c1a3496695c7220ac83dde02fc1cf174359c8072a6880050c8ae6b5c62a2635 --hash=sha256:14d41f899ce7979e7b3f9097ebce70da5c659db2d81d08c07a72b2b50f869859 --hash=sha256:1e53555dece49201df08645dbfa4510c86440339889667702f936b7d28d39e43 --hash=sha256:2418937adb9d6d0ca823bd385b914495294db27bc2963749d54af6708757f679 --hash=sha256:25ac669180f88fecca20f300b898e191f81aa674d51dde8a328bdeb28a572ab0 --hash=sha256:26e9c349f56f7c99341b5c79bbaff5ba12a5414af0261e79bf1a6a2693f152f6 --hash=sha256:2bd2c6373b8b54474724c2119f6939c4568c428e1d0be5bcb1f4e3d7f1b7c8bb --hash=sha256:30bece4f58a6c7bb0944a02dd1dc6de435a9daf8668fa31a9fe3a9923b20bd65 --hash=sha256:378ef6a3d1a8b50da5a89376cc0cc6f131102d4a27b4b3adef10b20f7a6ea49f --hash=sha256:3b451d16c3931fdbc235a12a39217a2faa03fa7c84c8560e65bc9b706e876089 --hash=sha256:446a5db77caeb155bcc0874c162a51f6d023af4aa2563fffbdec555db7402a35 --hash=sha256:53a154dbc074604036a537784ce5d1468edf263745a4363ca06fdb922f0d0a99 --hash=sha256:6507ad2445cd3479853fb6473164b5eb5b22446d283c9892cfbbd0a85c5f361d --hash=sha256:690885060c4140922ffa2f6935291c6e74ddad0ca2cf33bff66474ce89312ab3 --hash=sha256:6aba3bc0acf4f8d52b94f7746c3b0007b78b517676d482dc516d63f48f967baf --hash=sha256:6e5e6c333b550903ff11919ed1154c60c9b9d935db51afdb263babe523a8a69e --hash=sha256:72f688a8b0df7030c5a28ca6072817c1f090979e08d28ee5912dee37c26a7d0c --hash=sha256:73263f81545c5cb4360fbaf7b22a493e55ddf88fadbe639c43efb7bc8d7554c4 --hash=sha256:85e90a9c5307cf4d9151844e60c80f492618ea6e9b71081020e7d462e071ac8f --hash=sha256:88916d7f0532dc926bed84b50408c00dcbe6d2097d0de93c3ff647d8d57b4f83 --hash=sha256:890f58855d127c25bc3a53f4c24b27e79391c4468c4fcc99bc10d87b5d4bd1c4 --hash=sha256:8a382782980643f5ee827990b76f079b22f47786509061c0afac28afaa5b8bf5 --hash=sha256:9a5002305cdd4e76c94b61b50abc5e3f4e32c9cb81116960bb4b74acbbc9c6c8 --hash=sha256:a1f96395319c447a31b9477881bd84b4cb8323d6f86f21ceaef355d22dd90623 --hash=sha256:b134a5002757af1ae44a9ae26c2fe963ffa09eb47a62779ce0c5eeb44bfc2f28 --hash=sha256:b1c0c4d737fd2ab9681e4e78b9f361e0a827916a730e84fa91e76dca451b14d5 --hash=sha256:b744f8293ce649d802a9eabbf88e4930d672cf9de7d4fc9af5d14ceaeeec5805 --hash=sha256:b985d13e161c27e8b947af28658d460925bade61cb5d7431b8258a807cc83752 --hash=sha256:c0f86c5e4ab7d4007ca0baa1707486daa38869c43f552a56e9cd2a28d431c2ae --hash=sha256:c0fc6512d26eac83521938d7de65645ec08b04c2dc7807d4e332590c667e9d78 --hash=sha256:c1fcbc579de8e4fa7e34242fd6f419c1a39520073b1fe0c29ed6e60ed5553f38 --hash=sha256:c8680e81b0c77be9fc968c1dd4cd38395c34b18bb693cbfc7b7742c18221cc9b --hash=sha256:cdb9999c6a109aa31196cdd22fc58a810a3d35d08181a25d1bf963988e89f0a5 --hash=sha256:cee19d0c5bcb143b851ebd3ffc91e3445c5c3ee3cc0106edd882dd5b4091d5c0 --hash=sha256:d1b374e7e2c474d6cd65fd80a94ff7263baec4be14ea193db4076d54eab408f9 --hash=sha256:d42e7e545d1059e6b73d0f0baa9ae34c90684bfd8c862e70b0d8ab92e01e0e3f --hash=sha256:d625cc7d2faacfb2fc83ebbe001ae75dda175b3d8dce6a51a71c199ffac3627a --hash=sha256:d7c33345570ed8c50c9fe340c2767470115cc02d330f25384104cfad1f6e54f5 --hash=sha256:d8bb89e580cb9a3aaf42e4555bf265d3db9446abfb118e32150e1a5dfa4b5b15 --hash=sha256:df8c8a4ec998139b8507213c44c50e24f62a36af1cfded87e8972173dc9f8baf --hash=sha256:e1aec7102670e59d83512cf47d32a6c77a79df9df0294c5e4d16b6259851e2e9 --hash=sha256:e5c1556775a9ebaa49b5c8d64718f155ac3e05b34a49e9c99443cf105e8b0371 --hash=sha256:f3ce127bcecc723f1c7bddbc57f0526d11128cb05bfd81ffcd5e69e2dd5a1624 --hash=sha256:f3f8e09029ae47d3b904d32a03149ffc938bb3fb8a3048dc7b2d0f2ab50e0f56 --hash=sha256:f745379f44ad302560688855baaed9739c03b37a331338eda6a4ac655e4eb42f --hash=sha256:fb41f2035a70378b3021f724bb08b047ca4aa475850a3744c442570054af3c52 --hash=sha256:fb9a2c77236fae079185a990434cb9d8432902488ba990235c702fc2692d2dcd --hash=sha256:fd9c434127fd1575694e1cf19a393bed301f5d6e80b4bcdae80caa368a61a678" } }, + "pypi_313_numpy": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "pypi_313", + "requirement": "numpy==2.3.1 --hash=sha256:0025048b3c1557a20bc80d06fdeb8cc7fc193721484cca82b2cfa072fec71a93 --hash=sha256:010ce9b4f00d5c036053ca684c77441f2f2c934fd23bee058b4d6f196efd8280 --hash=sha256:0bb3a4a61e1d327e035275d2a993c96fa786e4913aa089843e6a2d9dd205c66a --hash=sha256:0c4d9e0a8368db90f93bd192bfa771ace63137c3488d198ee21dfb8e7771916e --hash=sha256:15aa4c392ac396e2ad3d0a2680c0f0dee420f9fed14eef09bdb9450ee6dcb7b7 --hash=sha256:18703df6c4a4fee55fd3d6e5a253d01c5d33a295409b03fda0c86b3ca2ff41a1 --hash=sha256:1ec9ae20a4226da374362cca3c62cd753faf2f951440b0e3b98e93c235441d2b --hash=sha256:23ab05b2d241f76cb883ce8b9a93a680752fbfcbd51c50eff0b88b979e471d8c --hash=sha256:25a1992b0a3fdcdaec9f552ef10d8103186f5397ab45e2d25f8ac51b1a6b97e8 --hash=sha256:2959d8f268f3d8ee402b04a9ec4bb7604555aeacf78b360dc4ec27f1d508177d --hash=sha256:2a809637460e88a113e186e87f228d74ae2852a2e0c44de275263376f17b5bdc --hash=sha256:2fb86b7e58f9ac50e1e9dd1290154107e47d1eef23a0ae9145ded06ea606f992 --hash=sha256:36890eb9e9d2081137bd78d29050ba63b8dab95dff7912eadf1185e80074b2a0 --hash=sha256:39bff12c076812595c3a306f22bfe49919c5513aa1e0e70fac756a0be7c2a2b8 --hash=sha256:467db865b392168ceb1ef1ffa6f5a86e62468c43e0cfb4ab6da667ede10e58db --hash=sha256:4e602e1b8682c2b833af89ba641ad4176053aaa50f5cacda1a27004352dde943 --hash=sha256:5902660491bd7a48b2ec16c23ccb9124b8abfd9583c5fdfa123fe6b421e03de1 --hash=sha256:5ccb7336eaf0e77c1635b232c141846493a588ec9ea777a7c24d7166bb8533ae --hash=sha256:5f1b8f26d1086835f442286c1d9b64bb3974b0b1e41bb105358fd07d20872952 --hash=sha256:6269b9edfe32912584ec496d91b00b6d34282ca1d07eb10e82dfc780907d6c2e --hash=sha256:6ea9e48336a402551f52cd8f593343699003d2353daa4b72ce8d34f66b722070 --hash=sha256:762e0c0c6b56bdedfef9a8e1d4538556438288c4276901ea008ae44091954e29 --hash=sha256:7be91b2239af2658653c5bb6f1b8bccafaf08226a258caf78ce44710a0160d30 --hash=sha256:7dea630156d39b02a63c18f508f85010230409db5b2927ba59c8ba4ab3e8272e --hash=sha256:867ef172a0976aaa1f1d1b63cf2090de8b636a7674607d514505fb7276ab08fc --hash=sha256:8d5ee6eec45f08ce507a6570e06f2f879b374a552087a4179ea7838edbcbfa42 --hash=sha256:8e333040d069eba1652fb08962ec5b76af7f2c7bce1df7e1418c8055cf776f25 --hash=sha256:a5ee121b60aa509679b682819c602579e1df14a5b07fe95671c8849aad8f2115 --hash=sha256:a780033466159c2270531e2b8ac063704592a0bc62ec4a1b991c7c40705eb0e8 --hash=sha256:a894f3816eb17b29e4783e5873f92faf55b710c2519e5c351767c51f79d8526d --hash=sha256:a8b740f5579ae4585831b3cf0e3b0425c667274f82a484866d2adf9570539369 --hash=sha256:ad506d4b09e684394c42c966ec1527f6ebc25da7f4da4b1b056606ffe446b8a3 --hash=sha256:afed2ce4a84f6b0fc6c1ce734ff368cbf5a5e24e8954a338f3bdffa0718adffb --hash=sha256:b0b5397374f32ec0649dd98c652a1798192042e715df918c20672c62fb52d4b8 --hash=sha256:bada6058dd886061f10ea15f230ccf7dfff40572e99fef440a4a857c8728c9c0 --hash=sha256:c4913079974eeb5c16ccfd2b1f09354b8fed7e0d6f2cab933104a09a6419b1ee --hash=sha256:c5bdf2015ccfcee8253fb8be695516ac4457c743473a43290fd36eba6a1777eb --hash=sha256:c6e0bf9d1a2f50d2b65a7cf56db37c095af17b59f6c132396f7c6d5dd76484df --hash=sha256:ce2ce9e5de4703a673e705183f64fd5da5bf36e7beddcb63a25ee2286e71ca48 --hash=sha256:cfecc7822543abdea6de08758091da655ea2210b8ffa1faf116b940693d3df76 --hash=sha256:d4580adadc53311b163444f877e0789f1c8861e2698f6b2a4ca852fda154f3ff --hash=sha256:d70f20df7f08b90a2062c1f07737dd340adccf2068d0f1b9b3d56e2038979fee --hash=sha256:e344eb79dab01f1e838ebb67aab09965fb271d6da6b00adda26328ac27d4a66e --hash=sha256:e610832418a2bc09d974cc9fecebfa51e9532d6190223bc5ef6a7402ebf3b5cb --hash=sha256:e772dda20a6002ef7061713dc1e2585bc1b534e7909b2030b5a46dae8ff077ab --hash=sha256:e7cbf5a5eafd8d230a3ce356d892512185230e4781a361229bd902ff403bc660 --hash=sha256:eabd7e8740d494ce2b4ea0ff05afa1b7b291e978c0ae075487c51e8bd93c0c68 --hash=sha256:ebb8603d45bc86bbd5edb0d63e52c5fd9e7945d3a503b77e486bd88dde67a19b --hash=sha256:ec0bdafa906f95adc9a0c6f26a4871fa753f25caaa0e032578a30457bff0af6a --hash=sha256:eccb9a159db9aed60800187bc47a6d3451553f0e1b08b068d8b277ddfbb9b244 --hash=sha256:ee8340cb48c9b7a5899d1149eece41ca535513a9698098edbade2a8e7a84da77" + } + }, + "pypi_313_pandas": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "pypi_313", + "requirement": "pandas==2.3.0 --hash=sha256:034abd6f3db8b9880aaee98f4f5d4dbec7c4829938463ec046517220b2f8574e --hash=sha256:094e271a15b579650ebf4c5155c05dcd2a14fd4fdd72cf4854b2f7ad31ea30be --hash=sha256:14a0cc77b0f089d2d2ffe3007db58f170dae9b9f54e569b299db871a3ab5bf46 --hash=sha256:1a881bc1309f3fce34696d07b00f13335c41f5f5a8770a33b09ebe23261cfc67 --hash=sha256:1d2b33e68d0ce64e26a4acc2e72d747292084f4e8db4c847c6f5f6cbe56ed6d8 --hash=sha256:213cd63c43263dbb522c1f8a7c9d072e25900f6975596f883f4bebd77295d4f3 --hash=sha256:23c2b2dc5213810208ca0b80b8666670eb4660bbfd9d45f58592cc4ddcfd62e1 --hash=sha256:2c7e2fc25f89a49a11599ec1e76821322439d90820108309bf42130d2f36c983 --hash=sha256:2eb4728a18dcd2908c7fccf74a982e241b467d178724545a48d0caf534b38ebf --hash=sha256:34600ab34ebf1131a7613a260a61dbe8b62c188ec0ea4c296da7c9a06b004133 --hash=sha256:39ff73ec07be5e90330cc6ff5705c651ace83374189dcdcb46e6ff54b4a72cd6 --hash=sha256:404d681c698e3c8a40a61d0cd9412cc7364ab9a9cc6e144ae2992e11a2e77a20 --hash=sha256:40cecc4ea5abd2921682b57532baea5588cc5f80f0231c624056b146887274d2 --hash=sha256:430a63bae10b5086995db1b02694996336e5a8ac9a96b4200572b413dfdfccb9 --hash=sha256:4930255e28ff5545e2ca404637bcc56f031893142773b3468dc021c6c32a1390 --hash=sha256:6021910b086b3ca756755e86ddc64e0ddafd5e58e076c72cb1585162e5ad259b --hash=sha256:625466edd01d43b75b1883a64d859168e4556261a5035b32f9d743b67ef44634 --hash=sha256:75651c14fde635e680496148a8526b328e09fe0572d9ae9b638648c46a544ba3 --hash=sha256:84141f722d45d0c2a89544dd29d35b3abfc13d2250ed7e68394eda7564bd6324 --hash=sha256:8adff9f138fc614347ff33812046787f7d43b3cef7c0f0171b3340cae333f6ca --hash=sha256:951805d146922aed8357e4cc5671b8b0b9be1027f0619cea132a9f3f65f2f09c --hash=sha256:9efc0acbbffb5236fbdf0409c04edce96bec4bdaa649d49985427bd1ec73e085 --hash=sha256:9ff730713d4c4f2f1c860e36c005c7cefc1c7c80c21c0688fd605aa43c9fcf09 --hash=sha256:a6872d695c896f00df46b71648eea332279ef4077a409e2fe94220208b6bb675 --hash=sha256:b198687ca9c8529662213538a9bb1e60fa0bf0f6af89292eb68fea28743fcd5a --hash=sha256:b9d8c3187be7479ea5c3d30c32a5d73d62a621166675063b2edd21bc47614027 --hash=sha256:ba24af48643b12ffe49b27065d3babd52702d95ab70f50e1b34f71ca703e2c0d --hash=sha256:bb32dc743b52467d488e7a7c8039b821da2826a9ba4f85b89ea95274f863280f --hash=sha256:bb3be958022198531eb7ec2008cfc78c5b1eed51af8600c6c5d9160d89d8d249 --hash=sha256:bf5be867a0541a9fb47a4be0c5790a4bccd5b77b92f0a59eeec9375fafc2aa14 --hash=sha256:c06f6f144ad0a1bf84699aeea7eff6068ca5c63ceb404798198af7eb86082e33 --hash=sha256:c6da97aeb6a6d233fb6b17986234cc723b396b50a3c6804776351994f2a658fd --hash=sha256:e0f51973ba93a9f97185049326d75b942b9aeb472bec616a129806facb129ebb --hash=sha256:e1991bbb96f4050b09b5f811253c4f3cf05ee89a589379aa36cd623f21a31d6f --hash=sha256:e5f08eb9a445d07720776df6e641975665c9ea12c9d8a331e0f6890f2dcd76ef --hash=sha256:e78ad363ddb873a631e92a3c063ade1ecfb34cae71e9a2be6ad100f875ac1042 --hash=sha256:ed16339bc354a73e0a609df36d256672c7d296f3f767ac07257801aa064ff73c --hash=sha256:f4dd97c19bd06bc557ad787a15b6489d2614ddaab5d104a0310eb314c724b2d2 --hash=sha256:f925f1ef673b4bd0271b1809b72b3270384f2b7d9d14a189b12b7fc02574d575 --hash=sha256:f95a2aef32614ed86216d3c450ab12a4e82084e8102e355707a1d96e33d51c34 --hash=sha256:fa07e138b3f6c04addfeaf56cc7fdb96c3b68a3fe5e5401251f231fce40a0d7a --hash=sha256:fa35c266c8cd1a67d75971a1912b185b492d257092bdd2709bbdebe574ed228d" + } + }, + "pypi_313_pyarrow": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "pypi_313", + "requirement": "pyarrow==20.0.0 --hash=sha256:00138f79ee1b5aca81e2bdedb91e3739b987245e11fa3c826f9e57c5d102fb75 --hash=sha256:11529a2283cb1f6271d7c23e4a8f9f8b7fd173f7360776b668e509d712a02eec --hash=sha256:15aa1b3b2587e74328a730457068dc6c89e6dcbf438d4369f572af9d320a25ee --hash=sha256:1bcbe471ef3349be7714261dea28fe280db574f9d0f77eeccc195a2d161fd861 --hash=sha256:204a846dca751428991346976b914d6d2a82ae5b8316a6ed99789ebf976551e6 --hash=sha256:211d5e84cecc640c7a3ab900f930aaff5cd2702177e0d562d426fb7c4f737781 --hash=sha256:24ca380585444cb2a31324c546a9a56abbe87e26069189e14bdba19c86c049f0 --hash=sha256:2c3a01f313ffe27ac4126f4c2e5ea0f36a5fc6ab51f8726cf41fee4b256680bd --hash=sha256:30b3051b7975801c1e1d387e17c588d8ab05ced9b1e14eec57915f79869b5031 --hash=sha256:3346babb516f4b6fd790da99b98bed9708e3f02e734c84971faccb20736848dc --hash=sha256:3e1f8a47f4b4ae4c69c4d702cfbdfe4d41e18e5c7ef6f1bb1c50918c1e81c57b --hash=sha256:4250e28a22302ce8692d3a0e8ec9d9dde54ec00d237cff4dfa9c1fbf79e472a8 --hash=sha256:4680f01ecd86e0dd63e39eb5cd59ef9ff24a9d166db328679e36c108dc993d4c --hash=sha256:4a8b029a07956b8d7bd742ffca25374dd3f634b35e46cc7a7c3fa4c75b297191 --hash=sha256:4ba3cf4182828be7a896cbd232aa8dd6a31bd1f9e32776cc3796c012855e1199 --hash=sha256:5605919fbe67a7948c1f03b9f3727d82846c053cd2ce9303ace791855923fd20 --hash=sha256:5f0fb1041267e9968c6d0d2ce3ff92e3928b243e2b6d11eeb84d9ac547308232 --hash=sha256:6102b4864d77102dbbb72965618e204e550135a940c2534711d5ffa787df2a5a --hash=sha256:6415a0d0174487456ddc9beaead703d0ded5966129fa4fd3114d76b5d1c5ceae --hash=sha256:6bb830757103a6cb300a04610e08d9636f0cd223d32f388418ea893a3e655f1c --hash=sha256:6fc1499ed3b4b57ee4e090e1cea6eb3584793fe3d1b4297bbf53f09b434991a5 --hash=sha256:75a51a5b0eef32727a247707d4755322cb970be7e935172b6a3a9f9ae98404ba --hash=sha256:7a3a5dcf54286e6141d5114522cf31dd67a9e7c9133d150799f30ee302a7a1ab --hash=sha256:7f4c8534e2ff059765647aa69b75d6543f9fef59e2cd4c6d18015192565d2b70 --hash=sha256:82f1ee5133bd8f49d31be1299dc07f585136679666b502540db854968576faf9 --hash=sha256:851c6a8260ad387caf82d2bbf54759130534723e37083111d4ed481cb253cc0d --hash=sha256:89e030dc58fc760e4010148e6ff164d2f44441490280ef1e97a542375e41058e --hash=sha256:95b330059ddfdc591a3225f2d272123be26c8fa76e8c9ee1a77aad507361cfdb --hash=sha256:96d6a0a37d9c98be08f5ed6a10831d88d52cac7b13f5287f1e0f625a0de8062b --hash=sha256:96e37f0766ecb4514a899d9a3554fadda770fb57ddf42b63d80f14bc20aa7db3 --hash=sha256:97c8dc984ed09cb07d618d57d8d4b67a5100a30c3818c2fb0b04599f0da2de7b --hash=sha256:991f85b48a8a5e839b2128590ce07611fae48a904cae6cab1f089c5955b57eb5 --hash=sha256:9965a050048ab02409fb7cbbefeedba04d3d67f2cc899eff505cc084345959ca --hash=sha256:9b71daf534f4745818f96c214dbc1e6124d7daf059167330b610fc69b6f3d3e3 --hash=sha256:a15532e77b94c61efadde86d10957950392999503b3616b2ffcef7621a002893 --hash=sha256:a18a14baef7d7ae49247e75641fd8bcbb39f44ed49a9fc4ec2f65d5031aa3b96 --hash=sha256:a1f60dc14658efaa927f8214734f6a01a806d7690be4b3232ba526836d216122 --hash=sha256:a2791f69ad72addd33510fec7bb14ee06c2a448e06b649e264c094c5b5f7ce28 --hash=sha256:a5704f29a74b81673d266e5ec1fe376f060627c2e42c5c7651288ed4b0db29e9 --hash=sha256:a6ad3e7758ecf559900261a4df985662df54fb7fdb55e8e3b3aa99b23d526b62 --hash=sha256:aa0d288143a8585806e3cc7c39566407aab646fb9ece164609dac1cfff45f6ae --hash=sha256:b6953f0114f8d6f3d905d98e987d0924dabce59c3cda380bdfaa25a6201563b4 --hash=sha256:b8ff87cc837601532cc8242d2f7e09b4e02404de1b797aee747dd4ba4bd6313f --hash=sha256:c7dd06fd7d7b410ca5dc839cc9d485d2bc4ae5240851bcd45d85105cc90a47d7 --hash=sha256:ca151afa4f9b7bc45bcc791eb9a89e90a9eb2772767d0b1e5389609c7d03db63 --hash=sha256:cb497649e505dc36542d0e68eca1a3c94ecbe9799cb67b578b55f2441a247fbc --hash=sha256:d5382de8dc34c943249b01c19110783d0d64b207167c728461add1ecc2db88e4 --hash=sha256:db53390eaf8a4dab4dbd6d93c85c5cf002db24902dbff0ca7d988beb5c9dd15b --hash=sha256:dd43f58037443af715f34f1322c782ec463a3c8a94a85fdb2d987ceb5658e061 --hash=sha256:e22f80b97a271f0a7d9cd07394a7d348f80d3ac63ed7cc38b6d1b696ab3b2619 --hash=sha256:e724a3fd23ae5b9c010e7be857f4405ed5e679db5c93e66204db1a69f733936a --hash=sha256:e8b88758f9303fa5a83d6c90e176714b2fd3852e776fc2d7e42a22dd6c2fb368 --hash=sha256:f2d67ac28f57a362f1a2c1e6fa98bfe2f03230f7e15927aecd067433b1e70ce8 --hash=sha256:f3b117b922af5e4c6b9a9115825726cac7d8b1421c37c2b5e24fbacc8930612c --hash=sha256:febc4a913592573c8d5805091a6c2b5064c8bd6e002131f01061797d91c783c1" + } + }, "pypi_313_pydantic": { "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", "attributes": { @@ -555,6 +582,33 @@ "requirement": "pydantic-core==2.33.1 --hash=sha256:0483847fa9ad5e3412265c1bd72aad35235512d9ce9d27d81a56d935ef489672 --hash=sha256:048831bd363490be79acdd3232f74a0e9951b11b2b4cc058aeb72b22fdc3abe1 --hash=sha256:048c01eee07d37cbd066fc512b9d8b5ea88ceeb4e629ab94b3e56965ad655add --hash=sha256:049e0de24cf23766f12cc5cc71d8abc07d4a9deb9061b334b62093dedc7cb068 --hash=sha256:08530b8ac922003033f399128505f513e30ca770527cc8bbacf75a84fcc2c74b --hash=sha256:0fb935c5591573ae3201640579f30128ccc10739b45663f93c06796854405505 --hash=sha256:1293d7febb995e9d3ec3ea09caf1a26214eec45b0f29f6074abb004723fc1de8 --hash=sha256:177d50460bc976a0369920b6c744d927b0ecb8606fb56858ff542560251b19e5 --hash=sha256:1a28239037b3d6f16916a4c831a5a0eadf856bdd6d2e92c10a0da3a59eadcf3e --hash=sha256:1b30d92c9412beb5ac6b10a3eb7ef92ccb14e3f2a8d7732e2d739f58b3aa7544 --hash=sha256:1c607801d85e2e123357b3893f82c97a42856192997b95b4d8325deb1cd0c5f4 --hash=sha256:1d20eb4861329bb2484c021b9d9a977566ab16d84000a57e28061151c62b349a --hash=sha256:1dfae24cf9921875ca0ca6a8ecb4bb2f13c855794ed0d468d6abbec6e6dcd44a --hash=sha256:25626fb37b3c543818c14821afe0fd3830bc327a43953bc88db924b68c5723f1 --hash=sha256:282b3fe1bbbe5ae35224a0dbd05aed9ccabccd241e8e6b60370484234b456266 --hash=sha256:2ea62419ba8c397e7da28a9170a16219d310d2cf4970dbc65c32faf20d828c83 --hash=sha256:2f593494876eae852dc98c43c6f260f45abdbfeec9e4324e31a481d948214764 --hash=sha256:2f9284e11c751b003fd4215ad92d325d92c9cb19ee6729ebd87e3250072cdcde --hash=sha256:3077cfdb6125cc8dab61b155fdd714663e401f0e6883f9632118ec12cf42df26 --hash=sha256:32cd11c5914d1179df70406427097c7dcde19fddf1418c787540f4b730289896 --hash=sha256:338ea9b73e6e109f15ab439e62cb3b78aa752c7fd9536794112e14bee02c8d18 --hash=sha256:35a5ec3fa8c2fe6c53e1b2ccc2454398f95d5393ab398478f53e1afbbeb4d939 --hash=sha256:398a38d323f37714023be1e0285765f0a27243a8b1506b7b7de87b647b517e48 --hash=sha256:3a371dc00282c4b84246509a5ddc808e61b9864aa1eae9ecc92bb1268b82db4a --hash=sha256:3a64e81e8cba118e108d7126362ea30e021291b7805d47e4896e52c791be2761 --hash=sha256:3ab2d36e20fbfcce8f02d73c33a8a7362980cff717926bbae030b93ae46b56c7 --hash=sha256:3f1fdb790440a34f6ecf7679e1863b825cb5ffde858a9197f851168ed08371e5 --hash=sha256:3f2648b9262607a7fb41d782cc263b48032ff7a03a835581abbf7a3bec62bcf5 --hash=sha256:401d7b76e1000d0dd5538e6381d28febdcacb097c8d340dde7d7fc6e13e9f95d --hash=sha256:495bc156026efafd9ef2d82372bd38afce78ddd82bf28ef5276c469e57c0c83e --hash=sha256:4b315e596282bbb5822d0c7ee9d255595bd7506d1cb20c2911a4da0b970187d3 --hash=sha256:5183e4f6a2d468787243ebcd70cf4098c247e60d73fb7d68d5bc1e1beaa0c4db --hash=sha256:5277aec8d879f8d05168fdd17ae811dd313b8ff894aeeaf7cd34ad28b4d77e33 --hash=sha256:52928d8c1b6bda03cc6d811e8923dffc87a2d3c8b3bfd2ce16471c7147a24850 --hash=sha256:549150be302428b56fdad0c23c2741dcdb5572413776826c965619a25d9c6bde --hash=sha256:5773da0ee2d17136b1f1c6fbde543398d452a6ad2a7b54ea1033e2daa739b8d2 --hash=sha256:5ab77f45d33d264de66e1884fca158bc920cb5e27fd0764a72f72f5756ae8bdb --hash=sha256:5c834f54f8f4640fd7e4b193f80eb25a0602bba9e19b3cd2fc7ffe8199f5ae02 --hash=sha256:5ccd429694cf26af7997595d627dd2637e7932214486f55b8a357edaac9dae8c --hash=sha256:681d65e9011f7392db5aa002b7423cc442d6a673c635668c227c6c8d0e5a4f77 --hash=sha256:694ad99a7f6718c1a498dc170ca430687a39894a60327f548e02a9c7ee4b6504 --hash=sha256:6dd8ecfde08d8bfadaea669e83c63939af76f4cf5538a72597016edfa3fad516 --hash=sha256:6e966fc3caaf9f1d96b349b0341c70c8d6573bf1bac7261f7b0ba88f96c56c24 --hash=sha256:70af6a21237b53d1fe7b9325b20e65cbf2f0a848cf77bed492b029139701e66a --hash=sha256:723c5630c4259400818b4ad096735a829074601805d07f8cafc366d95786d331 --hash=sha256:7965c13b3967909a09ecc91f21d09cfc4576bf78140b988904e94f130f188396 --hash=sha256:7aeb055a42d734c0255c9e489ac67e75397d59c6fbe60d155851e9782f276a9c --hash=sha256:7edbc454a29fc6aeae1e1eecba4f07b63b8d76e76a748532233c4c167b4cb9ea --hash=sha256:7fb66263e9ba8fea2aa85e1e5578980d127fb37d7f2e292773e7bc3a38fb0c7b --hash=sha256:87d3776f0001b43acebfa86f8c64019c043b55cc5a6a2e313d728b5c95b46969 --hash=sha256:8ab581d3530611897d863d1a649fb0644b860286b4718db919bfd51ece41f10b --hash=sha256:8d13f0276806ee722e70a1c93da19748594f19ac4299c7e41237fc791d1861ea --hash=sha256:8ffab8b2908d152e74862d276cf5017c81a2f3719f14e8e3e8d6b83fda863927 --hash=sha256:902dbc832141aa0ec374f4310f1e4e7febeebc3256f00dc359a9ac3f264a45dc --hash=sha256:9097b9f17f91eea659b9ec58148c0747ec354a42f7389b9d50701610d86f812e --hash=sha256:91815221101ad3c6b507804178a7bb5cb7b2ead9ecd600041669c8d805ebd595 --hash=sha256:948b73114f47fd7016088e5186d13faf5e1b2fe83f5e320e371f035557fd264d --hash=sha256:99b56acd433386c8f20be5c4000786d1e7ca0523c8eefc995d14d79c7a081498 --hash=sha256:9d3da303ab5f378a268fa7d45f37d7d85c3ec19769f28d2cc0c61826a8de21fe --hash=sha256:9f466e8bf0a62dc43e068c12166281c2eca72121dd2adc1040f3aa1e21ef8599 --hash=sha256:9fea9c1869bb4742d174a57b4700c6dadea951df8b06de40c2fedb4f02931c2e --hash=sha256:a0d5f3acc81452c56895e90643a625302bd6be351e7010664151cc55b7b97f89 --hash=sha256:a3edde68d1a1f9af1273b2fe798997b33f90308fb6d44d8550c89fc6a3647cf6 --hash=sha256:a62c3c3ef6a7e2c45f7853b10b5bc4ddefd6ee3cd31024754a1a5842da7d598d --hash=sha256:aa687a23d4b7871a00e03ca96a09cad0f28f443690d300500603bd0adba4b523 --hash=sha256:ab0277cedb698749caada82e5d099dc9fed3f906a30d4c382d1a21725777a1e5 --hash=sha256:ad05b683963f69a1d5d2c2bdab1274a31221ca737dbbceaa32bcb67359453cdd --hash=sha256:b172f7b9d2f3abc0efd12e3386f7e48b576ef309544ac3a63e5e9cdd2e24585d --hash=sha256:b1caa0bc2741b043db7823843e1bde8aaa58a55a58fda06083b0569f8b45693a --hash=sha256:bae370459da6a5466978c0eacf90690cb57ec9d533f8e63e564ef3822bfa04fe --hash=sha256:bcc9c6fdb0ced789245b02b7d6603e17d1563064ddcfc36f046b61c0c05dd9df --hash=sha256:bdc84017d28459c00db6f918a7272a5190bec3090058334e43a76afb279eac7c --hash=sha256:bfd0adeee563d59c598ceabddf2c92eec77abcb3f4a391b19aa7366170bd9e30 --hash=sha256:c566dd9c5f63d22226409553531f89de0cac55397f2ab8d97d6f06cfce6d947e --hash=sha256:c91dbb0ab683fa0cd64a6e81907c8ff41d6497c346890e26b23de7ee55353f96 --hash=sha256:c964fd24e6166420d18fb53996d8c9fd6eac9bf5ae3ec3d03015be4414ce497f --hash=sha256:cc77ec5b7e2118b152b0d886c7514a4653bcb58c6b1d760134a9fab915f777b3 --hash=sha256:d100e3ae783d2167782391e0c1c7a20a31f55f8015f3293647544df3f9c67824 --hash=sha256:d3a07fadec2a13274a8d861d3d37c61e97a816beae717efccaa4b36dfcaadcde --hash=sha256:d5e3d15245b08fa4a84cefc6c9222e6f37c98111c8679fbd94aa145f9a0ae23d --hash=sha256:de9e06abe3cc5ec6a2d5f75bc99b0bdca4f5c719a5b34026f8c57efbdecd2ee3 --hash=sha256:df6a94bf9452c6da9b5d76ed229a5683d0306ccb91cca8e1eea883189780d568 --hash=sha256:e100c52f7355a48413e2999bfb4e139d2977a904495441b374f3d4fb4a170961 --hash=sha256:e11f3864eb516af21b01e25fac915a82e9ddad3bb0fb9e95a246067398b435a4 --hash=sha256:e14f369c98a7c15772b9da98987f58e2b509a93235582838bd0d1d8c08b68fda --hash=sha256:e3de2777e3b9f4d603112f78006f4ae0acb936e95f06da6cb1a45fbad6bdb4b5 --hash=sha256:e7aaba1b4b03aaea7bb59e1b5856d734be011d3e6d98f5bcaa98cb30f375f2ad --hash=sha256:ec259f62538e8bf364903a7d0d0239447059f9434b284f5536e8402b7dd198db --hash=sha256:ec79de2a8680b1a67a07490bddf9636d5c2fab609ba8c57597e855fa5fa4dacd --hash=sha256:ed3eb16d51257c763539bde21e011092f127a2202692afaeaccb50db55a31383 --hash=sha256:ede9b407e39949d2afc46385ce6bd6e11588660c26f80576c11c958e6647bc40 --hash=sha256:ee12a7be1742f81b8a65b36c6921022301d466b82d80315d215c4c691724986f --hash=sha256:ef99779001d7ac2e2461d8ab55d3373fe7315caefdbecd8ced75304ae5a6fc6b --hash=sha256:f59295ecc75a1788af8ba92f2e8c6eeaa5a94c22fc4d151e8d9638814f85c8fc --hash=sha256:f995719707e0e29f0f41a8aa3bcea6e761a36c9136104d3189eafb83f5cec5e5 --hash=sha256:f99aeda58dce827f76963ee87a0ebe75e648c72ff9ba1174a253f6744f518f65 --hash=sha256:fc6bf8869e193855e8d91d91f6bf59699a5cdfaa47a404e278e776dd7f168b39 --hash=sha256:fc903512177361e868bc1f5b80ac8c8a6e05fcdd574a5fb5ffeac5a9982b9e89 --hash=sha256:fe44d56aa0b00d66640aa84a3cbe80b7a3ccdc6f0b1ca71090696a6d4777c091" } }, + "pypi_313_python_dateutil": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "pypi_313", + "requirement": "python-dateutil==2.9.0.post0 --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427" + } + }, + "pypi_313_pytz": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "pypi_313", + "requirement": "pytz==2025.2 --hash=sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3 --hash=sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00" + } + }, + "pypi_313_six": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "pypi_313", + "requirement": "six==1.17.0 --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 --hash=sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81" + } + }, "pypi_313_typing_extensions": { "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", "attributes": { @@ -573,6 +627,15 @@ "requirement": "typing-inspection==0.4.0 --hash=sha256:50e72559fcd2a6367a19f7a7e610e6afcb9fac940c650290eed893d61386832f --hash=sha256:9765c87de36671694a67904bf2c96e395be9c6439bb6c87b5142569dcdd65122" } }, + "pypi_313_tzdata": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "pypi_313", + "requirement": "tzdata==2025.2 --hash=sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8 --hash=sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9" + } + }, "rules_fuzzing_py_deps_310_absl_py": { "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", "attributes": { @@ -2902,18 +2965,32 @@ "whl_map": { "annotated_types": "{\"pypi_313_annotated_types\":[{\"version\":\"3.13\"}]}", "duckdb": "{\"pypi_313_duckdb\":[{\"version\":\"3.13\"}]}", + "numpy": "{\"pypi_313_numpy\":[{\"version\":\"3.13\"}]}", + "pandas": "{\"pypi_313_pandas\":[{\"version\":\"3.13\"}]}", + "pyarrow": "{\"pypi_313_pyarrow\":[{\"version\":\"3.13\"}]}", "pydantic": "{\"pypi_313_pydantic\":[{\"version\":\"3.13\"}]}", "pydantic_core": "{\"pypi_313_pydantic_core\":[{\"version\":\"3.13\"}]}", + "python_dateutil": "{\"pypi_313_python_dateutil\":[{\"version\":\"3.13\"}]}", + "pytz": "{\"pypi_313_pytz\":[{\"version\":\"3.13\"}]}", + "six": "{\"pypi_313_six\":[{\"version\":\"3.13\"}]}", "typing_extensions": "{\"pypi_313_typing_extensions\":[{\"version\":\"3.13\"}]}", - "typing_inspection": "{\"pypi_313_typing_inspection\":[{\"version\":\"3.13\"}]}" + "typing_inspection": "{\"pypi_313_typing_inspection\":[{\"version\":\"3.13\"}]}", + "tzdata": "{\"pypi_313_tzdata\":[{\"version\":\"3.13\"}]}" }, "packages": [ "annotated_types", "duckdb", + "numpy", + "pandas", + "pyarrow", "pydantic", "pydantic_core", + "python_dateutil", + "pytz", + "six", "typing_extensions", - "typing_inspection" + "typing_inspection", + "tzdata" ], "groups": {} } @@ -3179,6 +3256,1158 @@ ] ] } + }, + "@@rules_rust+//crate_universe:extensions.bzl%crate": { + "general": { + "bzlTransitiveDigest": "fMQyTUtZkj0O8jr3UYW2p7IvABd0k+kq8zNvqh7KFek=", + "usagesDigest": "8a2zdhrKPx8TlTHaDulB7vEhXrHJkZYmCefTs2HxvCw=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": { + "CARGO_BAZEL_DEBUG": null, + "CARGO_BAZEL_GENERATOR_SHA256": null, + "CARGO_BAZEL_GENERATOR_URL": null, + "CARGO_BAZEL_ISOLATED": null, + "CARGO_BAZEL_REPIN": null, + "CARGO_BAZEL_REPIN_ONLY": null, + "REPIN": null + }, + "generatedRepoSpecs": { + "crates": { + "repoRuleId": "@@rules_rust+//crate_universe:extensions.bzl%_generate_repo", + "attributes": { + "contents": { + "BUILD.bazel": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files(\n [\n \"cargo-bazel.json\",\n \"crates.bzl\",\n \"defs.bzl\",\n ] + glob(\n allow_empty = True,\n include = [\"*.bazel\"],\n ),\n)\n\nfilegroup(\n name = \"srcs\",\n srcs = glob(\n allow_empty = True,\n include = [\n \"*.bazel\",\n \"*.bzl\",\n ],\n ),\n)\n\n# Workspace Member Dependencies\nalias(\n name = \"crossbeam-channel-0.5.15\",\n actual = \"@crates__crossbeam-channel-0.5.15//:crossbeam_channel\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"crossbeam-channel\",\n actual = \"@crates__crossbeam-channel-0.5.15//:crossbeam_channel\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"log-0.4.27\",\n actual = \"@crates__log-0.4.27//:log\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"log\",\n actual = \"@crates__log-0.4.27//:log\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"num_cpus-1.17.0\",\n actual = \"@crates__num_cpus-1.17.0//:num_cpus\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"num_cpus\",\n actual = \"@crates__num_cpus-1.17.0//:num_cpus\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"prost-0.13.5\",\n actual = \"@crates__prost-0.13.5//:prost\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"prost\",\n actual = \"@crates__prost-0.13.5//:prost\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"prost-types-0.13.5\",\n actual = \"@crates__prost-types-0.13.5//:prost_types\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"prost-types\",\n actual = \"@crates__prost-types-0.13.5//:prost_types\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde-1.0.219\",\n actual = \"@crates__serde-1.0.219//:serde\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde\",\n actual = \"@crates__serde-1.0.219//:serde\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_json-1.0.140\",\n actual = \"@crates__serde_json-1.0.140//:serde_json\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_json\",\n actual = \"@crates__serde_json-1.0.140//:serde_json\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"simple_logger-4.3.3\",\n actual = \"@crates__simple_logger-4.3.3//:simple_logger\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"simple_logger\",\n actual = \"@crates__simple_logger-4.3.3//:simple_logger\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tokio-1.45.1\",\n actual = \"@crates__tokio-1.45.1//:tokio\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tokio\",\n actual = \"@crates__tokio-1.45.1//:tokio\",\n tags = [\"manual\"],\n)\n", + "alias_rules.bzl": "\"\"\"Alias that transitions its target to `compilation_mode=opt`. Use `transition_alias=\"opt\"` to enable.\"\"\"\n\nload(\"@rules_cc//cc:defs.bzl\", \"CcInfo\")\nload(\"@rules_rust//rust:rust_common.bzl\", \"COMMON_PROVIDERS\")\n\ndef _transition_alias_impl(ctx):\n # `ctx.attr.actual` is a list of 1 item due to the transition\n providers = [ctx.attr.actual[0][provider] for provider in COMMON_PROVIDERS]\n if CcInfo in ctx.attr.actual[0]:\n providers.append(ctx.attr.actual[0][CcInfo])\n return providers\n\ndef _change_compilation_mode(compilation_mode):\n def _change_compilation_mode_impl(_settings, _attr):\n return {\n \"//command_line_option:compilation_mode\": compilation_mode,\n }\n\n return transition(\n implementation = _change_compilation_mode_impl,\n inputs = [],\n outputs = [\n \"//command_line_option:compilation_mode\",\n ],\n )\n\ndef _transition_alias_rule(compilation_mode):\n return rule(\n implementation = _transition_alias_impl,\n provides = COMMON_PROVIDERS,\n attrs = {\n \"actual\": attr.label(\n mandatory = True,\n doc = \"`rust_library()` target to transition to `compilation_mode=opt`.\",\n providers = COMMON_PROVIDERS,\n cfg = _change_compilation_mode(compilation_mode),\n ),\n \"_allowlist_function_transition\": attr.label(\n default = \"@bazel_tools//tools/allowlists/function_transition_allowlist\",\n ),\n },\n doc = \"Transitions a Rust library crate to the `compilation_mode=opt`.\",\n )\n\ntransition_alias_dbg = _transition_alias_rule(\"dbg\")\ntransition_alias_fastbuild = _transition_alias_rule(\"fastbuild\")\ntransition_alias_opt = _transition_alias_rule(\"opt\")\n", + "defs.bzl": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\"\"\"\n# `crates_repository` API\n\n- [aliases](#aliases)\n- [crate_deps](#crate_deps)\n- [all_crate_deps](#all_crate_deps)\n- [crate_repositories](#crate_repositories)\n\n\"\"\"\n\nload(\"@bazel_tools//tools/build_defs/repo:git.bzl\", \"new_git_repository\")\nload(\"@bazel_tools//tools/build_defs/repo:http.bzl\", \"http_archive\")\nload(\"@bazel_tools//tools/build_defs/repo:utils.bzl\", \"maybe\")\nload(\"@bazel_skylib//lib:selects.bzl\", \"selects\")\nload(\"@rules_rust//crate_universe/private:local_crate_mirror.bzl\", \"local_crate_mirror\")\n\n###############################################################################\n# MACROS API\n###############################################################################\n\n# An identifier that represent common dependencies (unconditional).\n_COMMON_CONDITION = \"\"\n\ndef _flatten_dependency_maps(all_dependency_maps):\n \"\"\"Flatten a list of dependency maps into one dictionary.\n\n Dependency maps have the following structure:\n\n ```python\n DEPENDENCIES_MAP = {\n # The first key in the map is a Bazel package\n # name of the workspace this file is defined in.\n \"workspace_member_package\": {\n\n # Not all dependencies are supported for all platforms.\n # the condition key is the condition required to be true\n # on the host platform.\n \"condition\": {\n\n # An alias to a crate target. # The label of the crate target the\n # Aliases are only crate names. # package name refers to.\n \"package_name\": \"@full//:label\",\n }\n }\n }\n ```\n\n Args:\n all_dependency_maps (list): A list of dicts as described above\n\n Returns:\n dict: A dictionary as described above\n \"\"\"\n dependencies = {}\n\n for workspace_deps_map in all_dependency_maps:\n for pkg_name, conditional_deps_map in workspace_deps_map.items():\n if pkg_name not in dependencies:\n non_frozen_map = dict()\n for key, values in conditional_deps_map.items():\n non_frozen_map.update({key: dict(values.items())})\n dependencies.setdefault(pkg_name, non_frozen_map)\n continue\n\n for condition, deps_map in conditional_deps_map.items():\n # If the condition has not been recorded, do so and continue\n if condition not in dependencies[pkg_name]:\n dependencies[pkg_name].setdefault(condition, dict(deps_map.items()))\n continue\n\n # Alert on any miss-matched dependencies\n inconsistent_entries = []\n for crate_name, crate_label in deps_map.items():\n existing = dependencies[pkg_name][condition].get(crate_name)\n if existing and existing != crate_label:\n inconsistent_entries.append((crate_name, existing, crate_label))\n dependencies[pkg_name][condition].update({crate_name: crate_label})\n\n return dependencies\n\ndef crate_deps(deps, package_name = None):\n \"\"\"Finds the fully qualified label of the requested crates for the package where this macro is called.\n\n Args:\n deps (list): The desired list of crate targets.\n package_name (str, optional): The package name of the set of dependencies to look up.\n Defaults to `native.package_name()`.\n\n Returns:\n list: A list of labels to generated rust targets (str)\n \"\"\"\n\n if not deps:\n return []\n\n if package_name == None:\n package_name = native.package_name()\n\n # Join both sets of dependencies\n dependencies = _flatten_dependency_maps([\n _NORMAL_DEPENDENCIES,\n _NORMAL_DEV_DEPENDENCIES,\n _PROC_MACRO_DEPENDENCIES,\n _PROC_MACRO_DEV_DEPENDENCIES,\n _BUILD_DEPENDENCIES,\n _BUILD_PROC_MACRO_DEPENDENCIES,\n ]).pop(package_name, {})\n\n # Combine all conditional packages so we can easily index over a flat list\n # TODO: Perhaps this should actually return select statements and maintain\n # the conditionals of the dependencies\n flat_deps = {}\n for deps_set in dependencies.values():\n for crate_name, crate_label in deps_set.items():\n flat_deps.update({crate_name: crate_label})\n\n missing_crates = []\n crate_targets = []\n for crate_target in deps:\n if crate_target not in flat_deps:\n missing_crates.append(crate_target)\n else:\n crate_targets.append(flat_deps[crate_target])\n\n if missing_crates:\n fail(\"Could not find crates `{}` among dependencies of `{}`. Available dependencies were `{}`\".format(\n missing_crates,\n package_name,\n dependencies,\n ))\n\n return crate_targets\n\ndef all_crate_deps(\n normal = False, \n normal_dev = False, \n proc_macro = False, \n proc_macro_dev = False,\n build = False,\n build_proc_macro = False,\n package_name = None):\n \"\"\"Finds the fully qualified label of all requested direct crate dependencies \\\n for the package where this macro is called.\n\n If no parameters are set, all normal dependencies are returned. Setting any one flag will\n otherwise impact the contents of the returned list.\n\n Args:\n normal (bool, optional): If True, normal dependencies are included in the\n output list.\n normal_dev (bool, optional): If True, normal dev dependencies will be\n included in the output list..\n proc_macro (bool, optional): If True, proc_macro dependencies are included\n in the output list.\n proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are\n included in the output list.\n build (bool, optional): If True, build dependencies are included\n in the output list.\n build_proc_macro (bool, optional): If True, build proc_macro dependencies are\n included in the output list.\n package_name (str, optional): The package name of the set of dependencies to look up.\n Defaults to `native.package_name()` when unset.\n\n Returns:\n list: A list of labels to generated rust targets (str)\n \"\"\"\n\n if package_name == None:\n package_name = native.package_name()\n\n # Determine the relevant maps to use\n all_dependency_maps = []\n if normal:\n all_dependency_maps.append(_NORMAL_DEPENDENCIES)\n if normal_dev:\n all_dependency_maps.append(_NORMAL_DEV_DEPENDENCIES)\n if proc_macro:\n all_dependency_maps.append(_PROC_MACRO_DEPENDENCIES)\n if proc_macro_dev:\n all_dependency_maps.append(_PROC_MACRO_DEV_DEPENDENCIES)\n if build:\n all_dependency_maps.append(_BUILD_DEPENDENCIES)\n if build_proc_macro:\n all_dependency_maps.append(_BUILD_PROC_MACRO_DEPENDENCIES)\n\n # Default to always using normal dependencies\n if not all_dependency_maps:\n all_dependency_maps.append(_NORMAL_DEPENDENCIES)\n\n dependencies = _flatten_dependency_maps(all_dependency_maps).pop(package_name, None)\n\n if not dependencies:\n if dependencies == None:\n fail(\"Tried to get all_crate_deps for package \" + package_name + \" but that package had no Cargo.toml file\")\n else:\n return []\n\n crate_deps = list(dependencies.pop(_COMMON_CONDITION, {}).values())\n for condition, deps in dependencies.items():\n crate_deps += selects.with_or({\n tuple(_CONDITIONS[condition]): deps.values(),\n \"//conditions:default\": [],\n })\n\n return crate_deps\n\ndef aliases(\n normal = False,\n normal_dev = False,\n proc_macro = False,\n proc_macro_dev = False,\n build = False,\n build_proc_macro = False,\n package_name = None):\n \"\"\"Produces a map of Crate alias names to their original label\n\n If no dependency kinds are specified, `normal` and `proc_macro` are used by default.\n Setting any one flag will otherwise determine the contents of the returned dict.\n\n Args:\n normal (bool, optional): If True, normal dependencies are included in the\n output list.\n normal_dev (bool, optional): If True, normal dev dependencies will be\n included in the output list..\n proc_macro (bool, optional): If True, proc_macro dependencies are included\n in the output list.\n proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are\n included in the output list.\n build (bool, optional): If True, build dependencies are included\n in the output list.\n build_proc_macro (bool, optional): If True, build proc_macro dependencies are\n included in the output list.\n package_name (str, optional): The package name of the set of dependencies to look up.\n Defaults to `native.package_name()` when unset.\n\n Returns:\n dict: The aliases of all associated packages\n \"\"\"\n if package_name == None:\n package_name = native.package_name()\n\n # Determine the relevant maps to use\n all_aliases_maps = []\n if normal:\n all_aliases_maps.append(_NORMAL_ALIASES)\n if normal_dev:\n all_aliases_maps.append(_NORMAL_DEV_ALIASES)\n if proc_macro:\n all_aliases_maps.append(_PROC_MACRO_ALIASES)\n if proc_macro_dev:\n all_aliases_maps.append(_PROC_MACRO_DEV_ALIASES)\n if build:\n all_aliases_maps.append(_BUILD_ALIASES)\n if build_proc_macro:\n all_aliases_maps.append(_BUILD_PROC_MACRO_ALIASES)\n\n # Default to always using normal aliases\n if not all_aliases_maps:\n all_aliases_maps.append(_NORMAL_ALIASES)\n all_aliases_maps.append(_PROC_MACRO_ALIASES)\n\n aliases = _flatten_dependency_maps(all_aliases_maps).pop(package_name, None)\n\n if not aliases:\n return dict()\n\n common_items = aliases.pop(_COMMON_CONDITION, {}).items()\n\n # If there are only common items in the dictionary, immediately return them\n if not len(aliases.keys()) == 1:\n return dict(common_items)\n\n # Build a single select statement where each conditional has accounted for the\n # common set of aliases.\n crate_aliases = {\"//conditions:default\": dict(common_items)}\n for condition, deps in aliases.items():\n condition_triples = _CONDITIONS[condition]\n for triple in condition_triples:\n if triple in crate_aliases:\n crate_aliases[triple].update(deps)\n else:\n crate_aliases.update({triple: dict(deps.items() + common_items)})\n\n return select(crate_aliases)\n\n###############################################################################\n# WORKSPACE MEMBER DEPS AND ALIASES\n###############################################################################\n\n_NORMAL_DEPENDENCIES = {\n \"\": {\n _COMMON_CONDITION: {\n \"crossbeam-channel\": Label(\"@crates//:crossbeam-channel-0.5.15\"),\n \"log\": Label(\"@crates//:log-0.4.27\"),\n \"num_cpus\": Label(\"@crates//:num_cpus-1.17.0\"),\n \"prost\": Label(\"@crates//:prost-0.13.5\"),\n \"prost-types\": Label(\"@crates//:prost-types-0.13.5\"),\n \"serde\": Label(\"@crates//:serde-1.0.219\"),\n \"serde_json\": Label(\"@crates//:serde_json-1.0.140\"),\n \"simple_logger\": Label(\"@crates//:simple_logger-4.3.3\"),\n \"tokio\": Label(\"@crates//:tokio-1.45.1\"),\n },\n },\n}\n\n\n_NORMAL_ALIASES = {\n \"\": {\n _COMMON_CONDITION: {\n },\n },\n}\n\n\n_NORMAL_DEV_DEPENDENCIES = {\n \"\": {\n },\n}\n\n\n_NORMAL_DEV_ALIASES = {\n \"\": {\n },\n}\n\n\n_PROC_MACRO_DEPENDENCIES = {\n \"\": {\n },\n}\n\n\n_PROC_MACRO_ALIASES = {\n \"\": {\n },\n}\n\n\n_PROC_MACRO_DEV_DEPENDENCIES = {\n \"\": {\n },\n}\n\n\n_PROC_MACRO_DEV_ALIASES = {\n \"\": {\n },\n}\n\n\n_BUILD_DEPENDENCIES = {\n \"\": {\n },\n}\n\n\n_BUILD_ALIASES = {\n \"\": {\n },\n}\n\n\n_BUILD_PROC_MACRO_DEPENDENCIES = {\n \"\": {\n },\n}\n\n\n_BUILD_PROC_MACRO_ALIASES = {\n \"\": {\n },\n}\n\n\n_CONDITIONS = {\n \"aarch64-apple-darwin\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"aarch64-pc-windows-gnullvm\": [],\n \"aarch64-unknown-linux-gnu\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\"],\n \"cfg(all(any(target_arch = \\\"x86_64\\\", target_arch = \\\"arm64ec\\\"), target_env = \\\"msvc\\\", not(windows_raw_dylib)))\": [\"@rules_rust//rust/platform:x86_64-pc-windows-msvc\"],\n \"cfg(all(target_arch = \\\"aarch64\\\", target_env = \\\"msvc\\\", not(windows_raw_dylib)))\": [],\n \"cfg(all(target_arch = \\\"x86\\\", target_env = \\\"gnu\\\", not(target_abi = \\\"llvm\\\"), not(windows_raw_dylib)))\": [],\n \"cfg(all(target_arch = \\\"x86\\\", target_env = \\\"gnu\\\", not(windows_raw_dylib)))\": [],\n \"cfg(all(target_arch = \\\"x86\\\", target_env = \\\"msvc\\\", not(windows_raw_dylib)))\": [],\n \"cfg(all(target_arch = \\\"x86_64\\\", target_env = \\\"gnu\\\", not(target_abi = \\\"llvm\\\"), not(windows_raw_dylib)))\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\"],\n \"cfg(all(target_arch = \\\"x86_64\\\", target_env = \\\"msvc\\\", not(windows_raw_dylib)))\": [\"@rules_rust//rust/platform:x86_64-pc-windows-msvc\"],\n \"cfg(any(target_os = \\\"macos\\\", target_os = \\\"ios\\\", target_os = \\\"freebsd\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"cfg(any(windows, target_os = \\\"cygwin\\\"))\": [\"@rules_rust//rust/platform:x86_64-pc-windows-msvc\"],\n \"cfg(not(all(windows, target_env = \\\"msvc\\\", not(target_vendor = \\\"uwp\\\"))))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:wasm32-unknown-unknown\",\"@rules_rust//rust/platform:wasm32-wasip1\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\"],\n \"cfg(not(windows))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:wasm32-unknown-unknown\",\"@rules_rust//rust/platform:wasm32-wasip1\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\"],\n \"cfg(target_os = \\\"hermit\\\")\": [],\n \"cfg(target_os = \\\"wasi\\\")\": [\"@rules_rust//rust/platform:wasm32-wasip1\"],\n \"cfg(tokio_taskdump)\": [],\n \"cfg(unix)\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\"],\n \"cfg(windows)\": [\"@rules_rust//rust/platform:x86_64-pc-windows-msvc\"],\n \"i686-pc-windows-gnullvm\": [],\n \"wasm32-unknown-unknown\": [\"@rules_rust//rust/platform:wasm32-unknown-unknown\"],\n \"wasm32-wasip1\": [\"@rules_rust//rust/platform:wasm32-wasip1\"],\n \"x86_64-pc-windows-gnullvm\": [],\n \"x86_64-pc-windows-msvc\": [\"@rules_rust//rust/platform:x86_64-pc-windows-msvc\"],\n \"x86_64-unknown-linux-gnu\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\"],\n \"x86_64-unknown-nixos-gnu\": [\"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\"],\n}\n\n###############################################################################\n\ndef crate_repositories():\n \"\"\"A macro for defining repositories for all generated crates.\n\n Returns:\n A list of repos visible to the module through the module extension.\n \"\"\"\n maybe(\n http_archive,\n name = \"crates__addr2line-0.24.2\",\n sha256 = \"dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/addr2line/0.24.2/download\"],\n strip_prefix = \"addr2line-0.24.2\",\n build_file = Label(\"@crates//crates:BUILD.addr2line-0.24.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__adler2-2.0.1\",\n sha256 = \"320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/adler2/2.0.1/download\"],\n strip_prefix = \"adler2-2.0.1\",\n build_file = Label(\"@crates//crates:BUILD.adler2-2.0.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__anyhow-1.0.98\",\n sha256 = \"e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anyhow/1.0.98/download\"],\n strip_prefix = \"anyhow-1.0.98\",\n build_file = Label(\"@crates//crates:BUILD.anyhow-1.0.98.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__backtrace-0.3.75\",\n sha256 = \"6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/backtrace/0.3.75/download\"],\n strip_prefix = \"backtrace-0.3.75\",\n build_file = Label(\"@crates//crates:BUILD.backtrace-0.3.75.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__bytes-1.10.1\",\n sha256 = \"d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bytes/1.10.1/download\"],\n strip_prefix = \"bytes-1.10.1\",\n build_file = Label(\"@crates//crates:BUILD.bytes-1.10.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__cfg-if-1.0.1\",\n sha256 = \"9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cfg-if/1.0.1/download\"],\n strip_prefix = \"cfg-if-1.0.1\",\n build_file = Label(\"@crates//crates:BUILD.cfg-if-1.0.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__colored-2.2.0\",\n sha256 = \"117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/colored/2.2.0/download\"],\n strip_prefix = \"colored-2.2.0\",\n build_file = Label(\"@crates//crates:BUILD.colored-2.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__crossbeam-channel-0.5.15\",\n sha256 = \"82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crossbeam-channel/0.5.15/download\"],\n strip_prefix = \"crossbeam-channel-0.5.15\",\n build_file = Label(\"@crates//crates:BUILD.crossbeam-channel-0.5.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__crossbeam-utils-0.8.21\",\n sha256 = \"d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crossbeam-utils/0.8.21/download\"],\n strip_prefix = \"crossbeam-utils-0.8.21\",\n build_file = Label(\"@crates//crates:BUILD.crossbeam-utils-0.8.21.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__deranged-0.4.0\",\n sha256 = \"9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/deranged/0.4.0/download\"],\n strip_prefix = \"deranged-0.4.0\",\n build_file = Label(\"@crates//crates:BUILD.deranged-0.4.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__either-1.15.0\",\n sha256 = \"48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/either/1.15.0/download\"],\n strip_prefix = \"either-1.15.0\",\n build_file = Label(\"@crates//crates:BUILD.either-1.15.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__gimli-0.31.1\",\n sha256 = \"07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/gimli/0.31.1/download\"],\n strip_prefix = \"gimli-0.31.1\",\n build_file = Label(\"@crates//crates:BUILD.gimli-0.31.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hermit-abi-0.5.2\",\n sha256 = \"fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hermit-abi/0.5.2/download\"],\n strip_prefix = \"hermit-abi-0.5.2\",\n build_file = Label(\"@crates//crates:BUILD.hermit-abi-0.5.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__itertools-0.14.0\",\n sha256 = \"2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/itertools/0.14.0/download\"],\n strip_prefix = \"itertools-0.14.0\",\n build_file = Label(\"@crates//crates:BUILD.itertools-0.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__itoa-1.0.15\",\n sha256 = \"4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/itoa/1.0.15/download\"],\n strip_prefix = \"itoa-1.0.15\",\n build_file = Label(\"@crates//crates:BUILD.itoa-1.0.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__lazy_static-1.5.0\",\n sha256 = \"bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/lazy_static/1.5.0/download\"],\n strip_prefix = \"lazy_static-1.5.0\",\n build_file = Label(\"@crates//crates:BUILD.lazy_static-1.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__libc-0.2.174\",\n sha256 = \"1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libc/0.2.174/download\"],\n strip_prefix = \"libc-0.2.174\",\n build_file = Label(\"@crates//crates:BUILD.libc-0.2.174.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__log-0.4.27\",\n sha256 = \"13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/log/0.4.27/download\"],\n strip_prefix = \"log-0.4.27\",\n build_file = Label(\"@crates//crates:BUILD.log-0.4.27.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__memchr-2.7.5\",\n sha256 = \"32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/memchr/2.7.5/download\"],\n strip_prefix = \"memchr-2.7.5\",\n build_file = Label(\"@crates//crates:BUILD.memchr-2.7.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__miniz_oxide-0.8.9\",\n sha256 = \"1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/miniz_oxide/0.8.9/download\"],\n strip_prefix = \"miniz_oxide-0.8.9\",\n build_file = Label(\"@crates//crates:BUILD.miniz_oxide-0.8.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__mio-1.0.4\",\n sha256 = \"78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/mio/1.0.4/download\"],\n strip_prefix = \"mio-1.0.4\",\n build_file = Label(\"@crates//crates:BUILD.mio-1.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__num-conv-0.1.0\",\n sha256 = \"51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num-conv/0.1.0/download\"],\n strip_prefix = \"num-conv-0.1.0\",\n build_file = Label(\"@crates//crates:BUILD.num-conv-0.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__num_cpus-1.17.0\",\n sha256 = \"91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num_cpus/1.17.0/download\"],\n strip_prefix = \"num_cpus-1.17.0\",\n build_file = Label(\"@crates//crates:BUILD.num_cpus-1.17.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__num_threads-0.1.7\",\n sha256 = \"5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num_threads/0.1.7/download\"],\n strip_prefix = \"num_threads-0.1.7\",\n build_file = Label(\"@crates//crates:BUILD.num_threads-0.1.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__object-0.36.7\",\n sha256 = \"62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/object/0.36.7/download\"],\n strip_prefix = \"object-0.36.7\",\n build_file = Label(\"@crates//crates:BUILD.object-0.36.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pin-project-lite-0.2.16\",\n sha256 = \"3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pin-project-lite/0.2.16/download\"],\n strip_prefix = \"pin-project-lite-0.2.16\",\n build_file = Label(\"@crates//crates:BUILD.pin-project-lite-0.2.16.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__powerfmt-0.2.0\",\n sha256 = \"439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/powerfmt/0.2.0/download\"],\n strip_prefix = \"powerfmt-0.2.0\",\n build_file = Label(\"@crates//crates:BUILD.powerfmt-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__proc-macro2-1.0.95\",\n sha256 = \"02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/proc-macro2/1.0.95/download\"],\n strip_prefix = \"proc-macro2-1.0.95\",\n build_file = Label(\"@crates//crates:BUILD.proc-macro2-1.0.95.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__prost-0.13.5\",\n sha256 = \"2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prost/0.13.5/download\"],\n strip_prefix = \"prost-0.13.5\",\n build_file = Label(\"@crates//crates:BUILD.prost-0.13.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__prost-derive-0.13.5\",\n sha256 = \"8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prost-derive/0.13.5/download\"],\n strip_prefix = \"prost-derive-0.13.5\",\n build_file = Label(\"@crates//crates:BUILD.prost-derive-0.13.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__prost-types-0.13.5\",\n sha256 = \"52c2c1bf36ddb1a1c396b3601a3cec27c2462e45f07c386894ec3ccf5332bd16\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prost-types/0.13.5/download\"],\n strip_prefix = \"prost-types-0.13.5\",\n build_file = Label(\"@crates//crates:BUILD.prost-types-0.13.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__quote-1.0.40\",\n sha256 = \"1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/quote/1.0.40/download\"],\n strip_prefix = \"quote-1.0.40\",\n build_file = Label(\"@crates//crates:BUILD.quote-1.0.40.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rustc-demangle-0.1.25\",\n sha256 = \"989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustc-demangle/0.1.25/download\"],\n strip_prefix = \"rustc-demangle-0.1.25\",\n build_file = Label(\"@crates//crates:BUILD.rustc-demangle-0.1.25.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ryu-1.0.20\",\n sha256 = \"28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ryu/1.0.20/download\"],\n strip_prefix = \"ryu-1.0.20\",\n build_file = Label(\"@crates//crates:BUILD.ryu-1.0.20.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde-1.0.219\",\n sha256 = \"5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde/1.0.219/download\"],\n strip_prefix = \"serde-1.0.219\",\n build_file = Label(\"@crates//crates:BUILD.serde-1.0.219.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_derive-1.0.219\",\n sha256 = \"5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_derive/1.0.219/download\"],\n strip_prefix = \"serde_derive-1.0.219\",\n build_file = Label(\"@crates//crates:BUILD.serde_derive-1.0.219.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_json-1.0.140\",\n sha256 = \"20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_json/1.0.140/download\"],\n strip_prefix = \"serde_json-1.0.140\",\n build_file = Label(\"@crates//crates:BUILD.serde_json-1.0.140.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__simple_logger-4.3.3\",\n sha256 = \"8e7e46c8c90251d47d08b28b8a419ffb4aede0f87c2eea95e17d1d5bacbf3ef1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/simple_logger/4.3.3/download\"],\n strip_prefix = \"simple_logger-4.3.3\",\n build_file = Label(\"@crates//crates:BUILD.simple_logger-4.3.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__socket2-0.5.10\",\n sha256 = \"e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/socket2/0.5.10/download\"],\n strip_prefix = \"socket2-0.5.10\",\n build_file = Label(\"@crates//crates:BUILD.socket2-0.5.10.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__syn-2.0.104\",\n sha256 = \"17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/syn/2.0.104/download\"],\n strip_prefix = \"syn-2.0.104\",\n build_file = Label(\"@crates//crates:BUILD.syn-2.0.104.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__time-0.3.41\",\n sha256 = \"8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/time/0.3.41/download\"],\n strip_prefix = \"time-0.3.41\",\n build_file = Label(\"@crates//crates:BUILD.time-0.3.41.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__time-core-0.1.4\",\n sha256 = \"c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/time-core/0.1.4/download\"],\n strip_prefix = \"time-core-0.1.4\",\n build_file = Label(\"@crates//crates:BUILD.time-core-0.1.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__time-macros-0.2.22\",\n sha256 = \"3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/time-macros/0.2.22/download\"],\n strip_prefix = \"time-macros-0.2.22\",\n build_file = Label(\"@crates//crates:BUILD.time-macros-0.2.22.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tokio-1.45.1\",\n sha256 = \"75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio/1.45.1/download\"],\n strip_prefix = \"tokio-1.45.1\",\n build_file = Label(\"@crates//crates:BUILD.tokio-1.45.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tokio-macros-2.5.0\",\n sha256 = \"6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio-macros/2.5.0/download\"],\n strip_prefix = \"tokio-macros-2.5.0\",\n build_file = Label(\"@crates//crates:BUILD.tokio-macros-2.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__unicode-ident-1.0.18\",\n sha256 = \"5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unicode-ident/1.0.18/download\"],\n strip_prefix = \"unicode-ident-1.0.18\",\n build_file = Label(\"@crates//crates:BUILD.unicode-ident-1.0.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wasi-0.11.1-wasi-snapshot-preview1\",\n sha256 = \"ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasi/0.11.1+wasi-snapshot-preview1/download\"],\n strip_prefix = \"wasi-0.11.1+wasi-snapshot-preview1\",\n build_file = Label(\"@crates//crates:BUILD.wasi-0.11.1+wasi-snapshot-preview1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-sys-0.48.0\",\n sha256 = \"677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-sys/0.48.0/download\"],\n strip_prefix = \"windows-sys-0.48.0\",\n build_file = Label(\"@crates//crates:BUILD.windows-sys-0.48.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-sys-0.52.0\",\n sha256 = \"282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-sys/0.52.0/download\"],\n strip_prefix = \"windows-sys-0.52.0\",\n build_file = Label(\"@crates//crates:BUILD.windows-sys-0.52.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-sys-0.59.0\",\n sha256 = \"1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-sys/0.59.0/download\"],\n strip_prefix = \"windows-sys-0.59.0\",\n build_file = Label(\"@crates//crates:BUILD.windows-sys-0.59.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-targets-0.48.5\",\n sha256 = \"9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-targets/0.48.5/download\"],\n strip_prefix = \"windows-targets-0.48.5\",\n build_file = Label(\"@crates//crates:BUILD.windows-targets-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-targets-0.52.6\",\n sha256 = \"9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-targets/0.52.6/download\"],\n strip_prefix = \"windows-targets-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows-targets-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_aarch64_gnullvm-0.48.5\",\n sha256 = \"2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_gnullvm/0.48.5/download\"],\n strip_prefix = \"windows_aarch64_gnullvm-0.48.5\",\n build_file = Label(\"@crates//crates:BUILD.windows_aarch64_gnullvm-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_aarch64_gnullvm-0.52.6\",\n sha256 = \"32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_gnullvm/0.52.6/download\"],\n strip_prefix = \"windows_aarch64_gnullvm-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_aarch64_gnullvm-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_aarch64_msvc-0.48.5\",\n sha256 = \"dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_msvc/0.48.5/download\"],\n strip_prefix = \"windows_aarch64_msvc-0.48.5\",\n build_file = Label(\"@crates//crates:BUILD.windows_aarch64_msvc-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_aarch64_msvc-0.52.6\",\n sha256 = \"09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_msvc/0.52.6/download\"],\n strip_prefix = \"windows_aarch64_msvc-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_aarch64_msvc-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_i686_gnu-0.48.5\",\n sha256 = \"a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_gnu/0.48.5/download\"],\n strip_prefix = \"windows_i686_gnu-0.48.5\",\n build_file = Label(\"@crates//crates:BUILD.windows_i686_gnu-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_i686_gnu-0.52.6\",\n sha256 = \"8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_gnu/0.52.6/download\"],\n strip_prefix = \"windows_i686_gnu-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_i686_gnu-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_i686_gnullvm-0.52.6\",\n sha256 = \"0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_gnullvm/0.52.6/download\"],\n strip_prefix = \"windows_i686_gnullvm-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_i686_gnullvm-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_i686_msvc-0.48.5\",\n sha256 = \"8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_msvc/0.48.5/download\"],\n strip_prefix = \"windows_i686_msvc-0.48.5\",\n build_file = Label(\"@crates//crates:BUILD.windows_i686_msvc-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_i686_msvc-0.52.6\",\n sha256 = \"240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_msvc/0.52.6/download\"],\n strip_prefix = \"windows_i686_msvc-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_i686_msvc-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_x86_64_gnu-0.48.5\",\n sha256 = \"53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnu/0.48.5/download\"],\n strip_prefix = \"windows_x86_64_gnu-0.48.5\",\n build_file = Label(\"@crates//crates:BUILD.windows_x86_64_gnu-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_x86_64_gnu-0.52.6\",\n sha256 = \"147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnu/0.52.6/download\"],\n strip_prefix = \"windows_x86_64_gnu-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_x86_64_gnu-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_x86_64_gnullvm-0.48.5\",\n sha256 = \"0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnullvm/0.48.5/download\"],\n strip_prefix = \"windows_x86_64_gnullvm-0.48.5\",\n build_file = Label(\"@crates//crates:BUILD.windows_x86_64_gnullvm-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_x86_64_gnullvm-0.52.6\",\n sha256 = \"24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnullvm/0.52.6/download\"],\n strip_prefix = \"windows_x86_64_gnullvm-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_x86_64_gnullvm-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_x86_64_msvc-0.48.5\",\n sha256 = \"ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_msvc/0.48.5/download\"],\n strip_prefix = \"windows_x86_64_msvc-0.48.5\",\n build_file = Label(\"@crates//crates:BUILD.windows_x86_64_msvc-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_x86_64_msvc-0.52.6\",\n sha256 = \"589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_msvc/0.52.6/download\"],\n strip_prefix = \"windows_x86_64_msvc-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_x86_64_msvc-0.52.6.bazel\"),\n )\n\n return [\n struct(repo=\"crates__crossbeam-channel-0.5.15\", is_dev_dep = False),\n struct(repo=\"crates__log-0.4.27\", is_dev_dep = False),\n struct(repo=\"crates__num_cpus-1.17.0\", is_dev_dep = False),\n struct(repo=\"crates__prost-0.13.5\", is_dev_dep = False),\n struct(repo=\"crates__prost-types-0.13.5\", is_dev_dep = False),\n struct(repo=\"crates__serde-1.0.219\", is_dev_dep = False),\n struct(repo=\"crates__serde_json-1.0.140\", is_dev_dep = False),\n struct(repo=\"crates__simple_logger-4.3.3\", is_dev_dep = False),\n struct(repo=\"crates__tokio-1.45.1\", is_dev_dep = False),\n ]\n" + } + } + }, + "crates__addr2line-0.24.2": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/addr2line/0.24.2/download" + ], + "strip_prefix": "addr2line-0.24.2", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"addr2line\",\n deps = [\n \"@crates__gimli-0.31.1//:gimli\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=addr2line\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.24.2\",\n)\n" + } + }, + "crates__adler2-2.0.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/adler2/2.0.1/download" + ], + "strip_prefix": "adler2-2.0.1", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"adler2\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=adler2\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"2.0.1\",\n)\n" + } + }, + "crates__anyhow-1.0.98": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/anyhow/1.0.98/download" + ], + "strip_prefix": "anyhow-1.0.98", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"anyhow\",\n deps = [\n \"@crates__anyhow-1.0.98//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"default\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=anyhow\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.98\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"default\",\n \"std\",\n ],\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2018\",\n pkg_name = \"anyhow\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=anyhow\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"1.0.98\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crates__backtrace-0.3.75": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/backtrace/0.3.75/download" + ], + "strip_prefix": "backtrace-0.3.75", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"backtrace\",\n deps = [\n \"@crates__cfg-if-1.0.1//:cfg_if\",\n \"@crates__rustc-demangle-0.1.25//:rustc_demangle\",\n ] + select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [\n \"@crates__addr2line-0.24.2//:addr2line\", # cfg(not(all(windows, target_env = \"msvc\", not(target_vendor = \"uwp\"))))\n \"@crates__libc-0.2.174//:libc\", # cfg(not(all(windows, target_env = \"msvc\", not(target_vendor = \"uwp\"))))\n \"@crates__miniz_oxide-0.8.9//:miniz_oxide\", # cfg(not(all(windows, target_env = \"msvc\", not(target_vendor = \"uwp\"))))\n \"@crates__object-0.36.7//:object\", # cfg(not(all(windows, target_env = \"msvc\", not(target_vendor = \"uwp\"))))\n ],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [\n \"@crates__addr2line-0.24.2//:addr2line\", # cfg(not(all(windows, target_env = \"msvc\", not(target_vendor = \"uwp\"))))\n \"@crates__libc-0.2.174//:libc\", # cfg(not(all(windows, target_env = \"msvc\", not(target_vendor = \"uwp\"))))\n \"@crates__miniz_oxide-0.8.9//:miniz_oxide\", # cfg(not(all(windows, target_env = \"msvc\", not(target_vendor = \"uwp\"))))\n \"@crates__object-0.36.7//:object\", # cfg(not(all(windows, target_env = \"msvc\", not(target_vendor = \"uwp\"))))\n ],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [\n \"@crates__addr2line-0.24.2//:addr2line\", # cfg(not(all(windows, target_env = \"msvc\", not(target_vendor = \"uwp\"))))\n \"@crates__libc-0.2.174//:libc\", # cfg(not(all(windows, target_env = \"msvc\", not(target_vendor = \"uwp\"))))\n \"@crates__miniz_oxide-0.8.9//:miniz_oxide\", # cfg(not(all(windows, target_env = \"msvc\", not(target_vendor = \"uwp\"))))\n \"@crates__object-0.36.7//:object\", # cfg(not(all(windows, target_env = \"msvc\", not(target_vendor = \"uwp\"))))\n ],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [\n \"@crates__addr2line-0.24.2//:addr2line\", # cfg(not(all(windows, target_env = \"msvc\", not(target_vendor = \"uwp\"))))\n \"@crates__libc-0.2.174//:libc\", # cfg(not(all(windows, target_env = \"msvc\", not(target_vendor = \"uwp\"))))\n \"@crates__miniz_oxide-0.8.9//:miniz_oxide\", # cfg(not(all(windows, target_env = \"msvc\", not(target_vendor = \"uwp\"))))\n \"@crates__object-0.36.7//:object\", # cfg(not(all(windows, target_env = \"msvc\", not(target_vendor = \"uwp\"))))\n ],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [\n \"@crates__windows-targets-0.52.6//:windows_targets\", # cfg(any(windows, target_os = \"cygwin\"))\n ],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"@crates__addr2line-0.24.2//:addr2line\", # cfg(not(all(windows, target_env = \"msvc\", not(target_vendor = \"uwp\"))))\n \"@crates__libc-0.2.174//:libc\", # cfg(not(all(windows, target_env = \"msvc\", not(target_vendor = \"uwp\"))))\n \"@crates__miniz_oxide-0.8.9//:miniz_oxide\", # cfg(not(all(windows, target_env = \"msvc\", not(target_vendor = \"uwp\"))))\n \"@crates__object-0.36.7//:object\", # cfg(not(all(windows, target_env = \"msvc\", not(target_vendor = \"uwp\"))))\n ],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [\n \"@crates__addr2line-0.24.2//:addr2line\", # cfg(not(all(windows, target_env = \"msvc\", not(target_vendor = \"uwp\"))))\n \"@crates__libc-0.2.174//:libc\", # cfg(not(all(windows, target_env = \"msvc\", not(target_vendor = \"uwp\"))))\n \"@crates__miniz_oxide-0.8.9//:miniz_oxide\", # cfg(not(all(windows, target_env = \"msvc\", not(target_vendor = \"uwp\"))))\n \"@crates__object-0.36.7//:object\", # cfg(not(all(windows, target_env = \"msvc\", not(target_vendor = \"uwp\"))))\n ],\n \"//conditions:default\": [],\n }),\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=backtrace\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.3.75\",\n)\n" + } + }, + "crates__bytes-1.10.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/bytes/1.10.1/download" + ], + "strip_prefix": "bytes-1.10.1", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"bytes\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=bytes\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.10.1\",\n)\n" + } + }, + "crates__cfg-if-1.0.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/cfg-if/1.0.1/download" + ], + "strip_prefix": "cfg-if-1.0.1", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"cfg_if\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=cfg-if\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.1\",\n)\n" + } + }, + "crates__colored-2.2.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/colored/2.2.0/download" + ], + "strip_prefix": "colored-2.2.0", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"colored\",\n deps = [\n \"@crates__lazy_static-1.5.0//:lazy_static\",\n ] + select({\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [\n \"@crates__windows-sys-0.59.0//:windows_sys\", # cfg(windows)\n ],\n \"//conditions:default\": [],\n }),\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=colored\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"2.2.0\",\n)\n" + } + }, + "crates__crossbeam-channel-0.5.15": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/crossbeam-channel/0.5.15/download" + ], + "strip_prefix": "crossbeam-channel-0.5.15", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"crossbeam_channel\",\n deps = [\n \"@crates__crossbeam-utils-0.8.21//:crossbeam_utils\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"default\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=crossbeam-channel\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.5.15\",\n)\n" + } + }, + "crates__crossbeam-utils-0.8.21": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/crossbeam-utils/0.8.21/download" + ], + "strip_prefix": "crossbeam-utils-0.8.21", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"crossbeam_utils\",\n deps = [\n \"@crates__crossbeam-utils-0.8.21//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=crossbeam-utils\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.8.21\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"std\",\n ],\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2021\",\n pkg_name = \"crossbeam-utils\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=crossbeam-utils\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.8.21\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crates__deranged-0.4.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/deranged/0.4.0/download" + ], + "strip_prefix": "deranged-0.4.0", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"deranged\",\n deps = [\n \"@crates__powerfmt-0.2.0//:powerfmt\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"alloc\",\n \"powerfmt\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=deranged\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.4.0\",\n)\n" + } + }, + "crates__either-1.15.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/either/1.15.0/download" + ], + "strip_prefix": "either-1.15.0", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"either\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"std\",\n \"use_std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=either\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.15.0\",\n)\n" + } + }, + "crates__gimli-0.31.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/gimli/0.31.1/download" + ], + "strip_prefix": "gimli-0.31.1", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"gimli\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=gimli\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.31.1\",\n)\n" + } + }, + "crates__hermit-abi-0.5.2": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/hermit-abi/0.5.2/download" + ], + "strip_prefix": "hermit-abi-0.5.2", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"hermit_abi\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=hermit-abi\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.5.2\",\n)\n" + } + }, + "crates__itertools-0.14.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/itertools/0.14.0/download" + ], + "strip_prefix": "itertools-0.14.0", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"itertools\",\n deps = [\n \"@crates__either-1.15.0//:either\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"default\",\n \"use_alloc\",\n \"use_std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=itertools\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.14.0\",\n)\n" + } + }, + "crates__itoa-1.0.15": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/itoa/1.0.15/download" + ], + "strip_prefix": "itoa-1.0.15", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"itoa\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=itoa\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.15\",\n)\n" + } + }, + "crates__lazy_static-1.5.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/lazy_static/1.5.0/download" + ], + "strip_prefix": "lazy_static-1.5.0", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"lazy_static\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2015\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=lazy_static\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.5.0\",\n)\n" + } + }, + "crates__libc-0.2.174": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/libc/0.2.174/download" + ], + "strip_prefix": "libc-0.2.174", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"libc\",\n deps = [\n \"@crates__libc-0.2.174//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"default\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=libc\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.174\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"default\",\n \"std\",\n ],\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2021\",\n pkg_name = \"libc\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=libc\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.2.174\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crates__log-0.4.27": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/log/0.4.27/download" + ], + "strip_prefix": "log-0.4.27", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"log\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=log\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.4.27\",\n)\n" + } + }, + "crates__memchr-2.7.5": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/memchr/2.7.5/download" + ], + "strip_prefix": "memchr-2.7.5", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"memchr\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"alloc\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=memchr\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"2.7.5\",\n)\n" + } + }, + "crates__miniz_oxide-0.8.9": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/miniz_oxide/0.8.9/download" + ], + "strip_prefix": "miniz_oxide-0.8.9", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"miniz_oxide\",\n deps = [\n \"@crates__adler2-2.0.1//:adler2\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=miniz_oxide\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.8.9\",\n)\n" + } + }, + "crates__mio-1.0.4": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/mio/1.0.4/download" + ], + "strip_prefix": "mio-1.0.4", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"mio\",\n deps = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [\n \"@crates__libc-0.2.174//:libc\", # cfg(unix)\n ],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [\n \"@crates__libc-0.2.174//:libc\", # cfg(unix)\n ],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [\n \"@crates__libc-0.2.174//:libc\", # cfg(target_os = \"wasi\")\n \"@crates__wasi-0.11.1-wasi-snapshot-preview1//:wasi\", # cfg(target_os = \"wasi\")\n ],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [\n \"@crates__windows-sys-0.59.0//:windows_sys\", # cfg(windows)\n ],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"@crates__libc-0.2.174//:libc\", # cfg(unix)\n ],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [\n \"@crates__libc-0.2.174//:libc\", # cfg(unix)\n ],\n \"//conditions:default\": [],\n }),\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"net\",\n \"os-ext\",\n \"os-poll\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=mio\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.4\",\n)\n" + } + }, + "crates__num-conv-0.1.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/num-conv/0.1.0/download" + ], + "strip_prefix": "num-conv-0.1.0", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"num_conv\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=num-conv\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.0\",\n)\n" + } + }, + "crates__num_cpus-1.17.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/num_cpus/1.17.0/download" + ], + "strip_prefix": "num_cpus-1.17.0", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"num_cpus\",\n deps = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [\n \"@crates__libc-0.2.174//:libc\", # cfg(not(windows))\n ],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [\n \"@crates__libc-0.2.174//:libc\", # cfg(not(windows))\n ],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [\n \"@crates__libc-0.2.174//:libc\", # cfg(not(windows))\n ],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [\n \"@crates__libc-0.2.174//:libc\", # cfg(not(windows))\n ],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"@crates__libc-0.2.174//:libc\", # cfg(not(windows))\n ],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [\n \"@crates__libc-0.2.174//:libc\", # cfg(not(windows))\n ],\n \"//conditions:default\": [],\n }),\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2015\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=num_cpus\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.17.0\",\n)\n" + } + }, + "crates__num_threads-0.1.7": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/num_threads/0.1.7/download" + ], + "strip_prefix": "num_threads-0.1.7", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"num_threads\",\n deps = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [\n \"@crates__libc-0.2.174//:libc\", # cfg(any(target_os = \"macos\", target_os = \"ios\", target_os = \"freebsd\"))\n ],\n \"//conditions:default\": [],\n }),\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2015\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=num_threads\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.7\",\n)\n" + } + }, + "crates__object-0.36.7": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/object/0.36.7/download" + ], + "strip_prefix": "object-0.36.7", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"object\",\n deps = [\n \"@crates__memchr-2.7.5//:memchr\",\n \"@crates__object-0.36.7//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=object\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.36.7\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2018\",\n pkg_name = \"object\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=object\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.36.7\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crates__pin-project-lite-0.2.16": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/pin-project-lite/0.2.16/download" + ], + "strip_prefix": "pin-project-lite-0.2.16", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"pin_project_lite\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=pin-project-lite\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.16\",\n)\n" + } + }, + "crates__powerfmt-0.2.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/powerfmt/0.2.0/download" + ], + "strip_prefix": "powerfmt-0.2.0", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"powerfmt\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=powerfmt\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.0\",\n)\n" + } + }, + "crates__proc-macro2-1.0.95": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/proc-macro2/1.0.95/download" + ], + "strip_prefix": "proc-macro2-1.0.95", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"proc_macro2\",\n deps = [\n \"@crates__proc-macro2-1.0.95//:build_script_build\",\n \"@crates__unicode-ident-1.0.18//:unicode_ident\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"default\",\n \"proc-macro\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=proc-macro2\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.95\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"default\",\n \"proc-macro\",\n ],\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2021\",\n pkg_name = \"proc-macro2\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=proc-macro2\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"1.0.95\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crates__prost-0.13.5": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/prost/0.13.5/download" + ], + "strip_prefix": "prost-0.13.5", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"prost\",\n deps = [\n \"@crates__bytes-1.10.1//:bytes\",\n ],\n proc_macro_deps = [\n \"@crates__prost-derive-0.13.5//:prost_derive\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"default\",\n \"derive\",\n \"prost-derive\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=prost\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.13.5\",\n)\n" + } + }, + "crates__prost-derive-0.13.5": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/prost-derive/0.13.5/download" + ], + "strip_prefix": "prost-derive-0.13.5", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"prost_derive\",\n deps = [\n \"@crates__anyhow-1.0.98//:anyhow\",\n \"@crates__itertools-0.14.0//:itertools\",\n \"@crates__proc-macro2-1.0.95//:proc_macro2\",\n \"@crates__quote-1.0.40//:quote\",\n \"@crates__syn-2.0.104//:syn\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=prost-derive\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.13.5\",\n)\n" + } + }, + "crates__prost-types-0.13.5": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "52c2c1bf36ddb1a1c396b3601a3cec27c2462e45f07c386894ec3ccf5332bd16", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/prost-types/0.13.5/download" + ], + "strip_prefix": "prost-types-0.13.5", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"prost_types\",\n deps = [\n \"@crates__prost-0.13.5//:prost\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"default\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=prost-types\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.13.5\",\n)\n" + } + }, + "crates__quote-1.0.40": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/quote/1.0.40/download" + ], + "strip_prefix": "quote-1.0.40", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"quote\",\n deps = [\n \"@crates__proc-macro2-1.0.95//:proc_macro2\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"default\",\n \"proc-macro\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=quote\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.40\",\n)\n" + } + }, + "crates__rustc-demangle-0.1.25": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/rustc-demangle/0.1.25/download" + ], + "strip_prefix": "rustc-demangle-0.1.25", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"rustc_demangle\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2015\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=rustc-demangle\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.25\",\n)\n" + } + }, + "crates__ryu-1.0.20": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/ryu/1.0.20/download" + ], + "strip_prefix": "ryu-1.0.20", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"ryu\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=ryu\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.20\",\n)\n" + } + }, + "crates__serde-1.0.219": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/serde/1.0.219/download" + ], + "strip_prefix": "serde-1.0.219", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"serde\",\n deps = [\n \"@crates__serde-1.0.219//:build_script_build\",\n ],\n proc_macro_deps = [\n \"@crates__serde_derive-1.0.219//:serde_derive\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"default\",\n \"derive\",\n \"serde_derive\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=serde\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.219\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"default\",\n \"derive\",\n \"serde_derive\",\n \"std\",\n ],\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2018\",\n pkg_name = \"serde\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=serde\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"1.0.219\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crates__serde_derive-1.0.219": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/serde_derive/1.0.219/download" + ], + "strip_prefix": "serde_derive-1.0.219", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"serde_derive\",\n deps = [\n \"@crates__proc-macro2-1.0.95//:proc_macro2\",\n \"@crates__quote-1.0.40//:quote\",\n \"@crates__syn-2.0.104//:syn\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"default\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2015\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=serde_derive\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.219\",\n)\n" + } + }, + "crates__serde_json-1.0.140": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/serde_json/1.0.140/download" + ], + "strip_prefix": "serde_json-1.0.140", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"serde_json\",\n deps = [\n \"@crates__itoa-1.0.15//:itoa\",\n \"@crates__memchr-2.7.5//:memchr\",\n \"@crates__ryu-1.0.20//:ryu\",\n \"@crates__serde-1.0.219//:serde\",\n \"@crates__serde_json-1.0.140//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"default\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=serde_json\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.140\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"default\",\n \"std\",\n ],\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2021\",\n pkg_name = \"serde_json\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=serde_json\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"1.0.140\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crates__simple_logger-4.3.3": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "8e7e46c8c90251d47d08b28b8a419ffb4aede0f87c2eea95e17d1d5bacbf3ef1", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/simple_logger/4.3.3/download" + ], + "strip_prefix": "simple_logger-4.3.3", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"simple_logger\",\n deps = [\n \"@crates__colored-2.2.0//:colored\",\n \"@crates__log-0.4.27//:log\",\n \"@crates__time-0.3.41//:time\",\n ] + select({\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [\n \"@crates__windows-sys-0.48.0//:windows_sys\", # cfg(windows)\n ],\n \"//conditions:default\": [],\n }),\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"colored\",\n \"colors\",\n \"default\",\n \"stderr\",\n \"time\",\n \"timestamps\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=simple_logger\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"4.3.3\",\n)\n" + } + }, + "crates__socket2-0.5.10": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/socket2/0.5.10/download" + ], + "strip_prefix": "socket2-0.5.10", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"socket2\",\n deps = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [\n \"@crates__libc-0.2.174//:libc\", # cfg(unix)\n ],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [\n \"@crates__libc-0.2.174//:libc\", # cfg(unix)\n ],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [\n \"@crates__windows-sys-0.52.0//:windows_sys\", # cfg(windows)\n ],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"@crates__libc-0.2.174//:libc\", # cfg(unix)\n ],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [\n \"@crates__libc-0.2.174//:libc\", # cfg(unix)\n ],\n \"//conditions:default\": [],\n }),\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"all\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=socket2\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.5.10\",\n)\n" + } + }, + "crates__syn-2.0.104": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/syn/2.0.104/download" + ], + "strip_prefix": "syn-2.0.104", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"syn\",\n deps = [\n \"@crates__proc-macro2-1.0.95//:proc_macro2\",\n \"@crates__quote-1.0.40//:quote\",\n \"@crates__unicode-ident-1.0.18//:unicode_ident\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"clone-impls\",\n \"default\",\n \"derive\",\n \"extra-traits\",\n \"full\",\n \"parsing\",\n \"printing\",\n \"proc-macro\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=syn\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"2.0.104\",\n)\n" + } + }, + "crates__time-0.3.41": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/time/0.3.41/download" + ], + "strip_prefix": "time-0.3.41", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"time\",\n deps = [\n \"@crates__deranged-0.4.0//:deranged\",\n \"@crates__itoa-1.0.15//:itoa\",\n \"@crates__num-conv-0.1.0//:num_conv\",\n \"@crates__powerfmt-0.2.0//:powerfmt\",\n \"@crates__time-core-0.1.4//:time_core\",\n ] + select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [\n \"@crates__libc-0.2.174//:libc\", # aarch64-apple-darwin\n \"@crates__num_threads-0.1.7//:num_threads\", # aarch64-apple-darwin\n ],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [\n \"@crates__libc-0.2.174//:libc\", # aarch64-unknown-linux-gnu\n \"@crates__num_threads-0.1.7//:num_threads\", # aarch64-unknown-linux-gnu\n ],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"@crates__libc-0.2.174//:libc\", # x86_64-unknown-linux-gnu\n \"@crates__num_threads-0.1.7//:num_threads\", # x86_64-unknown-linux-gnu\n ],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [\n \"@crates__libc-0.2.174//:libc\", # x86_64-unknown-linux-gnu, x86_64-unknown-nixos-gnu\n \"@crates__num_threads-0.1.7//:num_threads\", # x86_64-unknown-linux-gnu, x86_64-unknown-nixos-gnu\n ],\n \"//conditions:default\": [],\n }),\n proc_macro_deps = [\n \"@crates__time-macros-0.2.22//:time_macros\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"alloc\",\n \"default\",\n \"formatting\",\n \"local-offset\",\n \"macros\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=time\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.3.41\",\n)\n" + } + }, + "crates__time-core-0.1.4": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/time-core/0.1.4/download" + ], + "strip_prefix": "time-core-0.1.4", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"time_core\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=time-core\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.4\",\n)\n" + } + }, + "crates__time-macros-0.2.22": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/time-macros/0.2.22/download" + ], + "strip_prefix": "time-macros-0.2.22", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"time_macros\",\n deps = [\n \"@crates__num-conv-0.1.0//:num_conv\",\n \"@crates__time-core-0.1.4//:time_core\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"formatting\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=time-macros\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.22\",\n)\n" + } + }, + "crates__tokio-1.45.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/tokio/1.45.1/download" + ], + "strip_prefix": "tokio-1.45.1", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"tokio\",\n deps = [\n \"@crates__mio-1.0.4//:mio\",\n \"@crates__pin-project-lite-0.2.16//:pin_project_lite\",\n ] + select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [\n \"@crates__libc-0.2.174//:libc\", # aarch64-apple-darwin\n \"@crates__socket2-0.5.10//:socket2\", # aarch64-apple-darwin\n ],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [\n \"@crates__libc-0.2.174//:libc\", # aarch64-unknown-linux-gnu\n \"@crates__socket2-0.5.10//:socket2\", # aarch64-unknown-linux-gnu\n ],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [\n \"@crates__socket2-0.5.10//:socket2\", # x86_64-pc-windows-msvc\n \"@crates__windows-sys-0.52.0//:windows_sys\", # x86_64-pc-windows-msvc\n ],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"@crates__libc-0.2.174//:libc\", # x86_64-unknown-linux-gnu\n \"@crates__socket2-0.5.10//:socket2\", # x86_64-unknown-linux-gnu\n ],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [\n \"@crates__libc-0.2.174//:libc\", # x86_64-unknown-linux-gnu, x86_64-unknown-nixos-gnu\n \"@crates__socket2-0.5.10//:socket2\", # x86_64-unknown-linux-gnu, x86_64-unknown-nixos-gnu\n ],\n \"//conditions:default\": [],\n }),\n proc_macro_deps = [\n \"@crates__tokio-macros-2.5.0//:tokio_macros\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"libc\",\n \"macros\",\n \"mio\",\n \"net\",\n \"rt\",\n \"rt-multi-thread\",\n \"socket2\",\n \"tokio-macros\",\n ] + select({\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [\n \"windows-sys\", # x86_64-pc-windows-msvc\n ],\n \"//conditions:default\": [],\n }),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=tokio\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.45.1\",\n)\n" + } + }, + "crates__tokio-macros-2.5.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/tokio-macros/2.5.0/download" + ], + "strip_prefix": "tokio-macros-2.5.0", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"tokio_macros\",\n deps = [\n \"@crates__proc-macro2-1.0.95//:proc_macro2\",\n \"@crates__quote-1.0.40//:quote\",\n \"@crates__syn-2.0.104//:syn\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=tokio-macros\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"2.5.0\",\n)\n" + } + }, + "crates__unicode-ident-1.0.18": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/unicode-ident/1.0.18/download" + ], + "strip_prefix": "unicode-ident-1.0.18", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"unicode_ident\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=unicode-ident\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.18\",\n)\n" + } + }, + "crates__wasi-0.11.1-wasi-snapshot-preview1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/wasi/0.11.1+wasi-snapshot-preview1/download" + ], + "strip_prefix": "wasi-0.11.1+wasi-snapshot-preview1", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"wasi\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"default\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=wasi\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.11.1+wasi-snapshot-preview1\",\n)\n" + } + }, + "crates__windows-sys-0.48.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows-sys/0.48.0/download" + ], + "strip_prefix": "windows-sys-0.48.0", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_sys\",\n deps = [\n \"@crates__windows-targets-0.48.5//:windows_targets\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"Win32\",\n \"Win32_Foundation\",\n \"Win32_System\",\n \"Win32_System_Console\",\n \"default\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows-sys\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.48.0\",\n)\n" + } + }, + "crates__windows-sys-0.52.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows-sys/0.52.0/download" + ], + "strip_prefix": "windows-sys-0.52.0", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_sys\",\n deps = [\n \"@crates__windows-targets-0.52.6//:windows_targets\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"Win32\",\n \"Win32_Foundation\",\n \"Win32_Networking\",\n \"Win32_Networking_WinSock\",\n \"Win32_Security\",\n \"Win32_Storage\",\n \"Win32_Storage_FileSystem\",\n \"Win32_System\",\n \"Win32_System_IO\",\n \"Win32_System_Pipes\",\n \"Win32_System_SystemServices\",\n \"Win32_System_Threading\",\n \"Win32_System_WindowsProgramming\",\n \"default\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows-sys\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.52.0\",\n)\n" + } + }, + "crates__windows-sys-0.59.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows-sys/0.59.0/download" + ], + "strip_prefix": "windows-sys-0.59.0", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_sys\",\n deps = [\n \"@crates__windows-targets-0.52.6//:windows_targets\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"Wdk\",\n \"Wdk_Foundation\",\n \"Wdk_Storage\",\n \"Wdk_Storage_FileSystem\",\n \"Wdk_System\",\n \"Wdk_System_IO\",\n \"Win32\",\n \"Win32_Foundation\",\n \"Win32_Networking\",\n \"Win32_Networking_WinSock\",\n \"Win32_Security\",\n \"Win32_Storage\",\n \"Win32_Storage_FileSystem\",\n \"Win32_System\",\n \"Win32_System_Console\",\n \"Win32_System_IO\",\n \"Win32_System_Pipes\",\n \"Win32_System_WindowsProgramming\",\n \"default\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows-sys\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.59.0\",\n)\n" + } + }, + "crates__windows-targets-0.48.5": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows-targets/0.48.5/download" + ], + "strip_prefix": "windows-targets-0.48.5", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_targets\",\n deps = select({\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [\n \"@crates__windows_x86_64_msvc-0.48.5//:windows_x86_64_msvc\", # cfg(all(target_arch = \"x86_64\", target_env = \"msvc\", not(windows_raw_dylib)))\n ],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"@crates__windows_x86_64_gnu-0.48.5//:windows_x86_64_gnu\", # cfg(all(target_arch = \"x86_64\", target_env = \"gnu\", not(target_abi = \"llvm\"), not(windows_raw_dylib)))\n ],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [\n \"@crates__windows_x86_64_gnu-0.48.5//:windows_x86_64_gnu\", # cfg(all(target_arch = \"x86_64\", target_env = \"gnu\", not(target_abi = \"llvm\"), not(windows_raw_dylib)))\n ],\n \"//conditions:default\": [],\n }),\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows-targets\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.48.5\",\n)\n" + } + }, + "crates__windows-targets-0.52.6": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows-targets/0.52.6/download" + ], + "strip_prefix": "windows-targets-0.52.6", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_targets\",\n deps = select({\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [\n \"@crates__windows_x86_64_msvc-0.52.6//:windows_x86_64_msvc\", # cfg(all(any(target_arch = \"x86_64\", target_arch = \"arm64ec\"), target_env = \"msvc\", not(windows_raw_dylib)))\n ],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"@crates__windows_x86_64_gnu-0.52.6//:windows_x86_64_gnu\", # cfg(all(target_arch = \"x86_64\", target_env = \"gnu\", not(target_abi = \"llvm\"), not(windows_raw_dylib)))\n ],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [\n \"@crates__windows_x86_64_gnu-0.52.6//:windows_x86_64_gnu\", # cfg(all(target_arch = \"x86_64\", target_env = \"gnu\", not(target_abi = \"llvm\"), not(windows_raw_dylib)))\n ],\n \"//conditions:default\": [],\n }),\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows-targets\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.52.6\",\n)\n" + } + }, + "crates__windows_aarch64_gnullvm-0.48.5": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows_aarch64_gnullvm/0.48.5/download" + ], + "strip_prefix": "windows_aarch64_gnullvm-0.48.5", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_aarch64_gnullvm\",\n deps = [\n \"@crates__windows_aarch64_gnullvm-0.48.5//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_aarch64_gnullvm\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.48.5\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2018\",\n pkg_name = \"windows_aarch64_gnullvm\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_aarch64_gnullvm\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.48.5\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crates__windows_aarch64_gnullvm-0.52.6": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows_aarch64_gnullvm/0.52.6/download" + ], + "strip_prefix": "windows_aarch64_gnullvm-0.52.6", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_aarch64_gnullvm\",\n deps = [\n \"@crates__windows_aarch64_gnullvm-0.52.6//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_aarch64_gnullvm\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.52.6\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2021\",\n pkg_name = \"windows_aarch64_gnullvm\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_aarch64_gnullvm\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.52.6\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crates__windows_aarch64_msvc-0.48.5": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows_aarch64_msvc/0.48.5/download" + ], + "strip_prefix": "windows_aarch64_msvc-0.48.5", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_aarch64_msvc\",\n deps = [\n \"@crates__windows_aarch64_msvc-0.48.5//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_aarch64_msvc\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.48.5\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2018\",\n pkg_name = \"windows_aarch64_msvc\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_aarch64_msvc\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.48.5\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crates__windows_aarch64_msvc-0.52.6": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows_aarch64_msvc/0.52.6/download" + ], + "strip_prefix": "windows_aarch64_msvc-0.52.6", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_aarch64_msvc\",\n deps = [\n \"@crates__windows_aarch64_msvc-0.52.6//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_aarch64_msvc\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.52.6\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2021\",\n pkg_name = \"windows_aarch64_msvc\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_aarch64_msvc\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.52.6\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crates__windows_i686_gnu-0.48.5": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows_i686_gnu/0.48.5/download" + ], + "strip_prefix": "windows_i686_gnu-0.48.5", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_i686_gnu\",\n deps = [\n \"@crates__windows_i686_gnu-0.48.5//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_i686_gnu\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.48.5\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2018\",\n pkg_name = \"windows_i686_gnu\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_i686_gnu\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.48.5\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crates__windows_i686_gnu-0.52.6": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows_i686_gnu/0.52.6/download" + ], + "strip_prefix": "windows_i686_gnu-0.52.6", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_i686_gnu\",\n deps = [\n \"@crates__windows_i686_gnu-0.52.6//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_i686_gnu\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.52.6\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2021\",\n pkg_name = \"windows_i686_gnu\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_i686_gnu\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.52.6\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crates__windows_i686_gnullvm-0.52.6": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows_i686_gnullvm/0.52.6/download" + ], + "strip_prefix": "windows_i686_gnullvm-0.52.6", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_i686_gnullvm\",\n deps = [\n \"@crates__windows_i686_gnullvm-0.52.6//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_i686_gnullvm\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.52.6\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2021\",\n pkg_name = \"windows_i686_gnullvm\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_i686_gnullvm\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.52.6\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crates__windows_i686_msvc-0.48.5": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows_i686_msvc/0.48.5/download" + ], + "strip_prefix": "windows_i686_msvc-0.48.5", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_i686_msvc\",\n deps = [\n \"@crates__windows_i686_msvc-0.48.5//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_i686_msvc\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.48.5\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2018\",\n pkg_name = \"windows_i686_msvc\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_i686_msvc\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.48.5\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crates__windows_i686_msvc-0.52.6": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows_i686_msvc/0.52.6/download" + ], + "strip_prefix": "windows_i686_msvc-0.52.6", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_i686_msvc\",\n deps = [\n \"@crates__windows_i686_msvc-0.52.6//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_i686_msvc\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.52.6\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2021\",\n pkg_name = \"windows_i686_msvc\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_i686_msvc\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.52.6\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crates__windows_x86_64_gnu-0.48.5": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows_x86_64_gnu/0.48.5/download" + ], + "strip_prefix": "windows_x86_64_gnu-0.48.5", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_x86_64_gnu\",\n deps = [\n \"@crates__windows_x86_64_gnu-0.48.5//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_x86_64_gnu\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.48.5\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2018\",\n pkg_name = \"windows_x86_64_gnu\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_x86_64_gnu\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.48.5\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crates__windows_x86_64_gnu-0.52.6": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows_x86_64_gnu/0.52.6/download" + ], + "strip_prefix": "windows_x86_64_gnu-0.52.6", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_x86_64_gnu\",\n deps = [\n \"@crates__windows_x86_64_gnu-0.52.6//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_x86_64_gnu\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.52.6\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2021\",\n pkg_name = \"windows_x86_64_gnu\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_x86_64_gnu\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.52.6\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crates__windows_x86_64_gnullvm-0.48.5": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows_x86_64_gnullvm/0.48.5/download" + ], + "strip_prefix": "windows_x86_64_gnullvm-0.48.5", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_x86_64_gnullvm\",\n deps = [\n \"@crates__windows_x86_64_gnullvm-0.48.5//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_x86_64_gnullvm\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.48.5\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2018\",\n pkg_name = \"windows_x86_64_gnullvm\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_x86_64_gnullvm\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.48.5\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crates__windows_x86_64_gnullvm-0.52.6": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows_x86_64_gnullvm/0.52.6/download" + ], + "strip_prefix": "windows_x86_64_gnullvm-0.52.6", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_x86_64_gnullvm\",\n deps = [\n \"@crates__windows_x86_64_gnullvm-0.52.6//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_x86_64_gnullvm\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.52.6\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2021\",\n pkg_name = \"windows_x86_64_gnullvm\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_x86_64_gnullvm\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.52.6\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crates__windows_x86_64_msvc-0.48.5": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows_x86_64_msvc/0.48.5/download" + ], + "strip_prefix": "windows_x86_64_msvc-0.48.5", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_x86_64_msvc\",\n deps = [\n \"@crates__windows_x86_64_msvc-0.48.5//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_x86_64_msvc\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.48.5\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2018\",\n pkg_name = \"windows_x86_64_msvc\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_x86_64_msvc\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.48.5\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crates__windows_x86_64_msvc-0.52.6": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows_x86_64_msvc/0.52.6/download" + ], + "strip_prefix": "windows_x86_64_msvc-0.52.6", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_x86_64_msvc\",\n deps = [\n \"@crates__windows_x86_64_msvc-0.52.6//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_x86_64_msvc\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.52.6\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2021\",\n pkg_name = \"windows_x86_64_msvc\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_x86_64_msvc\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.52.6\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + } + }, + "moduleExtensionMetadata": { + "useAllRepos": "NO", + "reproducible": false + }, + "recordedRepoMappingEntries": [ + [ + "bazel_features+", + "bazel_features_globals", + "bazel_features++version_extension+bazel_features_globals" + ], + [ + "bazel_features+", + "bazel_features_version", + "bazel_features++version_extension+bazel_features_version" + ], + [ + "rules_cc+", + "bazel_tools", + "bazel_tools" + ], + [ + "rules_cc+", + "rules_cc", + "rules_cc+" + ], + [ + "rules_rust+", + "bazel_features", + "bazel_features+" + ], + [ + "rules_rust+", + "bazel_skylib", + "bazel_skylib+" + ], + [ + "rules_rust+", + "bazel_tools", + "bazel_tools" + ], + [ + "rules_rust+", + "rules_cc", + "rules_cc+" + ], + [ + "rules_rust+", + "rules_rust", + "rules_rust+" + ] + ] + } } } } diff --git a/examples/podcast_reviews/README.md b/examples/podcast_reviews/README.md index 828d4d2..b231f06 100644 --- a/examples/podcast_reviews/README.md +++ b/examples/podcast_reviews/README.md @@ -21,3 +21,7 @@ flowchart LR ## Input Data Get it from [here](https://www.kaggle.com/datasets/thoughtvector/podcastreviews/versions/28?select=database.sqlite)! (and put it in `examples/podcast_reviews/data/ingest/database.sqlite`) + +## `phrase` Dependency + +This relies on [`soaxelbrooke/phrase`](https://github.com/soaxelbrooke/phrase) for phrase extraction - check out its [releases](https://github.com/soaxelbrooke/phrase/releases) to get a relevant binary. diff --git a/examples/podcast_reviews/categorize_reviews_job.py b/examples/podcast_reviews/categorize_reviews_job.py new file mode 100644 index 0000000..c74c88d --- /dev/null +++ b/examples/podcast_reviews/categorize_reviews_job.py @@ -0,0 +1,202 @@ +#!/usr/bin/env python3 + +import sys +import json +import os +from datetime import datetime +from pathlib import Path +from typing import List, Dict, Any +import re +from duckdb_utils import create_duckdb_connection, read_dataframe_with_fallback, save_dataframe_with_fallback + +def main(): + if len(sys.argv) < 2: + print("Usage: categorize_reviews_job.py {config|exec} [args...]", file=sys.stderr) + sys.exit(1) + + command = sys.argv[1] + + if command == "config": + handle_config(sys.argv[2:]) + elif command == "exec": + handle_exec(sys.argv[2:]) + else: + print(f"Unknown command: {command}", file=sys.stderr) + sys.exit(1) + +def parse_partition_ref(partition_ref: str) -> Dict[str, str]: + """Parse partition ref like 'categorized_reviews/category=comedy/date=2020-01-01' into components.""" + match = re.match(r'categorized_reviews/category=([^/]+)/date=(\d{4}-\d{2}-\d{2})', partition_ref) + if not match: + raise ValueError(f"Invalid partition ref format: {partition_ref}") + return {"category": match.group(1), "date": match.group(2)} + +def handle_config(args): + if len(args) < 1: + print("Config mode requires partition ref", file=sys.stderr) + sys.exit(1) + + configs = [] + + # Process each partition reference + for partition_ref in args: + try: + parsed = parse_partition_ref(partition_ref) + category = parsed["category"] + date_str = parsed["date"] + except ValueError as e: + print(f"Error parsing partition ref: {e}", file=sys.stderr) + sys.exit(1) + + # Dependencies: reviews for the date and podcast metadata + reviews_ref = f"reviews/date={date_str}" + podcasts_ref = "podcasts/all" + + configs.append({ + "outputs": [{"str": partition_ref}], + "inputs": [ + {"dep_type": 1, "partition_ref": {"str": reviews_ref}}, + {"dep_type": 1, "partition_ref": {"str": podcasts_ref}} + ], + "args": [category, date_str], + "env": { + "PARTITION_REF": partition_ref, + "TARGET_CATEGORY": category, + "TARGET_DATE": date_str + } + }) + + config = {"configs": configs} + print(json.dumps(config)) + +def handle_exec(args): + if len(args) < 2: + print("Exec mode requires category and date arguments", file=sys.stderr) + sys.exit(1) + + target_category = args[0] + target_date = args[1] + partition_ref = os.getenv('PARTITION_REF', f'categorized_reviews/category={target_category}/date={target_date}') + + # Input paths - check for both parquet and CSV fallbacks + reviews_base = f"/tmp/databuild_test/examples/podcast_reviews/reviews/date={target_date}/reviews" + podcasts_base = "/tmp/databuild_test/examples/podcast_reviews/podcasts/podcasts" + + reviews_file = None + podcasts_file = None + + # Find reviews file (parquet or CSV) + for ext in ['.parquet', '.csv']: + candidate = reviews_base + ext + if os.path.exists(candidate): + reviews_file = candidate + break + + # Find podcasts file (parquet or CSV) + for ext in ['.parquet', '.csv']: + candidate = podcasts_base + ext + if os.path.exists(candidate): + podcasts_file = candidate + break + + if not reviews_file: + print(f"Reviews file not found: {reviews_base}.(parquet|csv)", file=sys.stderr) + sys.exit(1) + + if not podcasts_file: + print(f"Podcasts file not found: {podcasts_base}.(parquet|csv)", file=sys.stderr) + sys.exit(1) + + # Output path + output_dir = Path(f"/tmp/databuild_test/examples/podcast_reviews/categorized_reviews/category={target_category}/date={target_date}") + output_dir.mkdir(parents=True, exist_ok=True) + output_file = output_dir / "categorized_reviews.parquet" + + try: + # Categorize reviews by joining with podcast metadata + categorize_reviews_for_category_date(reviews_file, podcasts_file, target_category, str(output_file)) + + print(f"Successfully categorized reviews for category {target_category} on {target_date}") + print(f"Output written to: {output_file}") + + # Create manifest + manifest = { + "outputs": [{"str": partition_ref}], + "inputs": [ + {"str": f"reviews/date={target_date}"}, + {"str": "podcasts/all"} + ], + "start_time": datetime.now().isoformat(), + "end_time": datetime.now().isoformat(), + "task": { + "job": {"label": "//examples/podcast_reviews:categorize_reviews_job"}, + "config": { + "outputs": [{"str": partition_ref}], + "inputs": [ + {"dep_type": 1, "partition_ref": {"str": f"reviews/date={target_date}"}}, + {"dep_type": 1, "partition_ref": {"str": "podcasts/all"}} + ], + "args": [target_category, target_date], + "env": {"PARTITION_REF": partition_ref, "TARGET_CATEGORY": target_category, "TARGET_DATE": target_date} + } + } + } + + manifest_file = output_dir / "manifest.json" + with open(manifest_file, 'w') as f: + json.dump(manifest, f, indent=2) + + except Exception as e: + print(f"Error categorizing reviews: {e}", file=sys.stderr) + sys.exit(1) + +def categorize_reviews_for_category_date(reviews_file: str, podcasts_file: str, target_category: str, output_file: str): + """Join reviews with podcast categories and filter for target category.""" + + # Connect to DuckDB with extension handling + duckdb_conn = create_duckdb_connection() + + try: + # Read input files with fallback handling + reviews_df = read_dataframe_with_fallback(reviews_file, duckdb_conn) + podcasts_df = read_dataframe_with_fallback(podcasts_file, duckdb_conn) + + # Perform join and filtering in pandas + import pandas as pd + + # Join reviews with podcasts + joined_df = reviews_df.merge(podcasts_df, on='podcast_id', how='inner') + + # Filter by category + filtered_df = joined_df[ + (joined_df['primary_category'] == target_category) | + (joined_df['all_categories'].str.contains(target_category, na=False)) + ].copy() + + # Add target category column + filtered_df['target_category'] = target_category + + # Select and rename columns to match expected output + result_df = filtered_df[[ + 'podcast_id', 'review_title', 'content', 'rating', 'author_id', + 'created_at', 'review_date', 'title', 'primary_category', + 'all_categories', 'target_category' + ]].rename(columns={'title': 'podcast_title'}) + + # Sort by created_at + result_df = result_df.sort_values('created_at') + + # Save to parquet with fallback + save_dataframe_with_fallback(result_df, output_file, duckdb_conn, "parquet") + + row_count = len(result_df) + print(f"Categorized {row_count} reviews for category '{target_category}'") + + if row_count == 0: + print(f"Warning: No reviews found for category '{target_category}'") + + finally: + duckdb_conn.close() + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/examples/podcast_reviews/configure.py b/examples/podcast_reviews/configure.py deleted file mode 100644 index 2ddce4b..0000000 --- a/examples/podcast_reviews/configure.py +++ /dev/null @@ -1,2 +0,0 @@ - -print("Hello, gorgeous.") diff --git a/examples/podcast_reviews/daily_summary_job.py b/examples/podcast_reviews/daily_summary_job.py new file mode 100644 index 0000000..4f4a796 --- /dev/null +++ b/examples/podcast_reviews/daily_summary_job.py @@ -0,0 +1,313 @@ +#!/usr/bin/env python3 + +import sys +import json +import os +import duckdb +from datetime import datetime +from pathlib import Path +from typing import List, Dict, Any +import re + +def main(): + if len(sys.argv) < 2: + print("Usage: daily_summary_job.py {config|exec} [args...]", file=sys.stderr) + sys.exit(1) + + command = sys.argv[1] + + if command == "config": + handle_config(sys.argv[2:]) + elif command == "exec": + handle_exec(sys.argv[2:]) + else: + print(f"Unknown command: {command}", file=sys.stderr) + sys.exit(1) + +def parse_partition_ref(partition_ref: str) -> Dict[str, str]: + """Parse partition ref like 'daily_summaries/category=comedy/date=2020-01-01' into components.""" + match = re.match(r'daily_summaries/category=([^/]+)/date=(\d{4}-\d{2}-\d{2})', partition_ref) + if not match: + raise ValueError(f"Invalid partition ref format: {partition_ref}") + return {"category": match.group(1), "date": match.group(2)} + +def handle_config(args): + if len(args) < 1: + print("Config mode requires partition ref", file=sys.stderr) + sys.exit(1) + + configs = [] + + # Process each partition reference + for partition_ref in args: + try: + parsed = parse_partition_ref(partition_ref) + category = parsed["category"] + date_str = parsed["date"] + except ValueError as e: + print(f"Error parsing partition ref: {e}", file=sys.stderr) + sys.exit(1) + + # Dependencies: phrase stats and categorized reviews for the category and date + phrase_stats_ref = f"phrase_stats/category={category}/date={date_str}" + categorized_reviews_ref = f"categorized_reviews/category={category}/date={date_str}" + + configs.append({ + "outputs": [{"str": partition_ref}], + "inputs": [ + {"dep_type": 1, "partition_ref": {"str": phrase_stats_ref}}, + {"dep_type": 1, "partition_ref": {"str": categorized_reviews_ref}} + ], + "args": [category, date_str], + "env": { + "PARTITION_REF": partition_ref, + "TARGET_CATEGORY": category, + "TARGET_DATE": date_str + } + }) + + config = {"configs": configs} + print(json.dumps(config)) + +def handle_exec(args): + if len(args) < 2: + print("Exec mode requires category and date arguments", file=sys.stderr) + sys.exit(1) + + target_category = args[0] + target_date = args[1] + partition_ref = os.getenv('PARTITION_REF', f'daily_summaries/category={target_category}/date={target_date}') + + # Input paths + phrase_stats_file = f"/tmp/databuild_test/examples/podcast_reviews/phrase_stats/category={target_category}/date={target_date}/phrase_stats.parquet" + categorized_reviews_file = f"/tmp/databuild_test/examples/podcast_reviews/categorized_reviews/category={target_category}/date={target_date}/categorized_reviews.parquet" + + # Check input files exist + if not os.path.exists(phrase_stats_file): + print(f"Phrase stats file not found: {phrase_stats_file}", file=sys.stderr) + sys.exit(1) + + if not os.path.exists(categorized_reviews_file): + print(f"Categorized reviews file not found: {categorized_reviews_file}", file=sys.stderr) + sys.exit(1) + + # Output path + output_dir = Path(f"/tmp/databuild_test/examples/podcast_reviews/daily_summaries/category={target_category}/date={target_date}") + output_dir.mkdir(parents=True, exist_ok=True) + output_file = output_dir / "daily_summary.parquet" + + try: + # Generate daily summary combining phrase stats and recent reviews + generate_daily_summary_for_category_date( + phrase_stats_file, + categorized_reviews_file, + target_category, + target_date, + str(output_file) + ) + + print(f"Successfully generated daily summary for category {target_category} on {target_date}") + print(f"Output written to: {output_file}") + + # Create manifest + manifest = { + "outputs": [{"str": partition_ref}], + "inputs": [ + {"str": f"phrase_stats/category={target_category}/date={target_date}"}, + {"str": f"categorized_reviews/category={target_category}/date={target_date}"} + ], + "start_time": datetime.now().isoformat(), + "end_time": datetime.now().isoformat(), + "task": { + "job": {"label": "//examples/podcast_reviews:daily_summary_job"}, + "config": { + "outputs": [{"str": partition_ref}], + "inputs": [ + {"dep_type": 1, "partition_ref": {"str": f"phrase_stats/category={target_category}/date={target_date}"}}, + {"dep_type": 1, "partition_ref": {"str": f"categorized_reviews/category={target_category}/date={target_date}"}} + ], + "args": [target_category, target_date], + "env": {"PARTITION_REF": partition_ref, "TARGET_CATEGORY": target_category, "TARGET_DATE": target_date} + } + } + } + + manifest_file = output_dir / "manifest.json" + with open(manifest_file, 'w') as f: + json.dump(manifest, f, indent=2) + + except Exception as e: + print(f"Error generating daily summary: {e}", file=sys.stderr) + sys.exit(1) + +def generate_daily_summary_for_category_date( + phrase_stats_file: str, + categorized_reviews_file: str, + target_category: str, + target_date: str, + output_file: str +): + """Generate daily summary combining top phrases and recent reviews.""" + + # Connect to DuckDB for processing + duckdb_conn = duckdb.connect() + + try: + # Try to install and load parquet extension, but don't fail if it's already installed + try: + duckdb_conn.execute("INSTALL parquet") + except Exception: + pass # Extension might already be installed + + duckdb_conn.execute("LOAD parquet") + + # Check if we have data + phrase_count = duckdb_conn.execute(f"SELECT COUNT(*) FROM parquet_scan('{phrase_stats_file}')").fetchone()[0] + review_count = duckdb_conn.execute(f"SELECT COUNT(*) FROM parquet_scan('{categorized_reviews_file}')").fetchone()[0] + + if phrase_count == 0 and review_count == 0: + print(f"No data found, creating empty daily summary") + create_empty_daily_summary(target_category, target_date, output_file, duckdb_conn) + return + + # Query to generate comprehensive daily summary + query = f""" + WITH top_phrases_per_podcast AS ( + SELECT + podcast_id, + podcast_title, + ngram, + count as phrase_count, + avg_rating as phrase_avg_rating, + weighted_score, + ROW_NUMBER() OVER (PARTITION BY podcast_id ORDER BY weighted_score DESC) as phrase_rank + FROM parquet_scan('{phrase_stats_file}') + WHERE ngram IS NOT NULL + ), + podcast_phrase_summary AS ( + SELECT + podcast_id, + podcast_title, + STRING_AGG(ngram, '; ' ORDER BY weighted_score DESC) as top_phrases, + COUNT(*) as total_phrases, + AVG(phrase_avg_rating) as avg_phrase_rating, + SUM(weighted_score) as total_phrase_score + FROM top_phrases_per_podcast + WHERE phrase_rank <= 5 -- Top 5 phrases per podcast + GROUP BY podcast_id, podcast_title + ), + podcast_review_summary AS ( + SELECT + podcast_id, + podcast_title, + COUNT(*) as review_count, + AVG(rating::FLOAT) as avg_rating, + MIN(rating) as min_rating, + MAX(rating) as max_rating, + COUNT(CASE WHEN rating >= 4 THEN 1 END) as positive_reviews, + COUNT(CASE WHEN rating <= 2 THEN 1 END) as negative_reviews, + STRING_AGG( + CASE WHEN rating <= 2 AND length(content) > 20 + THEN substring(content, 1, 200) || '...' + ELSE NULL + END, + ' | ' + ORDER BY rating ASC, length(content) DESC + ) as sample_negative_reviews + FROM parquet_scan('{categorized_reviews_file}') + WHERE podcast_title IS NOT NULL + GROUP BY podcast_id, podcast_title + ), + daily_summary AS ( + SELECT + '{target_date}' as date, + '{target_category}' as category, + COALESCE(pps.podcast_id, prs.podcast_id) as podcast_id, + COALESCE(pps.podcast_title, prs.podcast_title) as podcast_title, + COALESCE(prs.review_count, 0) as review_count, + COALESCE(prs.avg_rating, 0.0) as avg_rating, + COALESCE(prs.positive_reviews, 0) as positive_reviews, + COALESCE(prs.negative_reviews, 0) as negative_reviews, + COALESCE(pps.top_phrases, 'No significant phrases') as top_phrases, + COALESCE(pps.total_phrases, 0) as total_phrases, + COALESCE(pps.avg_phrase_rating, 0.0) as avg_phrase_rating, + COALESCE(pps.total_phrase_score, 0.0) as total_phrase_score, + prs.sample_negative_reviews, + CASE + WHEN prs.avg_rating >= 4.0 AND pps.avg_phrase_rating >= 4.0 THEN 'Highly Positive' + WHEN prs.avg_rating >= 3.5 THEN 'Positive' + WHEN prs.avg_rating >= 2.5 THEN 'Mixed' + WHEN prs.avg_rating >= 1.5 THEN 'Negative' + ELSE 'Highly Negative' + END as sentiment_category, + (prs.review_count * prs.avg_rating * 0.6 + pps.total_phrase_score * 0.4) as overall_score + FROM podcast_phrase_summary pps + FULL OUTER JOIN podcast_review_summary prs + ON pps.podcast_id = prs.podcast_id + WHERE COALESCE(prs.review_count, 0) > 0 OR COALESCE(pps.total_phrases, 0) > 0 + ) + SELECT + date, + category, + podcast_id, + podcast_title, + review_count, + avg_rating, + positive_reviews, + negative_reviews, + top_phrases, + total_phrases, + avg_phrase_rating, + total_phrase_score, + sample_negative_reviews, + sentiment_category, + overall_score + FROM daily_summary + ORDER BY overall_score DESC, review_count DESC + """ + + # Execute query and save to parquet + duckdb_conn.execute(f"COPY ({query}) TO '{output_file}' (FORMAT PARQUET)") + + # Get row count for logging + count_result = duckdb_conn.execute(f"SELECT COUNT(*) FROM ({query})").fetchone() + row_count = count_result[0] if count_result else 0 + + print(f"Generated daily summary for {row_count} podcasts") + + if row_count == 0: + print(f"Warning: No summary data generated for category '{target_category}' on date '{target_date}'") + create_empty_daily_summary(target_category, target_date, output_file, duckdb_conn) + + finally: + duckdb_conn.close() + +def create_empty_daily_summary(category: str, date: str, output_file: str, duckdb_conn): + """Create empty daily summary parquet file with correct schema.""" + + duckdb_conn.execute("DROP TABLE IF EXISTS empty_daily_summary") + duckdb_conn.execute(""" + CREATE TABLE empty_daily_summary ( + date VARCHAR, + category VARCHAR, + podcast_id VARCHAR, + podcast_title VARCHAR, + review_count BIGINT, + avg_rating DOUBLE, + positive_reviews BIGINT, + negative_reviews BIGINT, + top_phrases VARCHAR, + total_phrases BIGINT, + avg_phrase_rating DOUBLE, + total_phrase_score DOUBLE, + sample_negative_reviews VARCHAR, + sentiment_category VARCHAR, + overall_score DOUBLE + ) + """) + + duckdb_conn.execute(f"COPY empty_daily_summary TO '{output_file}' (FORMAT PARQUET)") + print("Created empty daily summary file") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/examples/podcast_reviews/duckdb_utils.py b/examples/podcast_reviews/duckdb_utils.py new file mode 100644 index 0000000..861b452 --- /dev/null +++ b/examples/podcast_reviews/duckdb_utils.py @@ -0,0 +1,184 @@ +#!/usr/bin/env python3 +""" +Centralized DuckDB utilities for handling extension issues in isolated environments. +""" + +import duckdb +import sqlite3 +import pandas as pd +from pathlib import Path +from typing import Any, Dict, List, Optional +import warnings + +def create_duckdb_connection(enable_extensions: bool = True) -> duckdb.DuckDBPyConnection: + """ + Create a DuckDB connection with proper extension handling for isolated environments. + + Args: + enable_extensions: Whether to try enabling extensions (may fail in isolated environments) + + Returns: + DuckDB connection object + """ + conn = duckdb.connect() + + if enable_extensions: + with warnings.catch_warnings(): + warnings.simplefilter("ignore") + try: + # Try to enable extensions, but don't fail if not available + conn.execute("SET autoinstall_known_extensions=1") + conn.execute("SET autoload_known_extensions=1") + except Exception: + # Extensions not available, will use fallback methods + pass + + return conn + +def sqlite_to_dataframe(sqlite_path: str, query: str, params: Optional[List[Any]] = None) -> pd.DataFrame: + """ + Execute a SQLite query and return results as a pandas DataFrame. + This is a fallback when DuckDB's sqlite_scan doesn't work. + + Args: + sqlite_path: Path to SQLite database + query: SQL query to execute + params: Query parameters + + Returns: + DataFrame with query results + """ + conn = sqlite3.connect(sqlite_path) + try: + if params: + df = pd.read_sql_query(query, conn, params=params) + else: + df = pd.read_sql_query(query, conn) + return df + finally: + conn.close() + +def execute_query_with_fallback( + duckdb_conn: duckdb.DuckDBPyConnection, + sqlite_path: str, + query: str, + params: Optional[List[Any]] = None, + use_sqlite_scan: bool = True +) -> pd.DataFrame: + """ + Execute a query using DuckDB's sqlite_scan if available, otherwise fall back to direct SQLite access. + + Args: + duckdb_conn: DuckDB connection + sqlite_path: Path to SQLite database + query: SQL query (should work with both sqlite_scan and direct SQLite) + params: Query parameters + use_sqlite_scan: Whether to try sqlite_scan first + + Returns: + DataFrame with query results + """ + if use_sqlite_scan: + try: + # Try using DuckDB's sqlite_scan + if params: + result = duckdb_conn.execute(query, params).df() + else: + result = duckdb_conn.execute(query).df() + return result + except Exception as e: + print(f"sqlite_scan failed: {e}, falling back to direct SQLite access") + + # Fallback: Use direct SQLite access + # Convert DuckDB sqlite_scan query to regular SQLite query + fallback_query = query.replace("sqlite_scan(?, 'reviews')", "reviews") + fallback_query = fallback_query.replace("sqlite_scan(?, 'podcasts')", "podcasts") + fallback_query = fallback_query.replace("sqlite_scan(?, 'categories')", "categories") + + # Remove the sqlite_path parameter since we're connecting directly + if params and len(params) > 0 and params[0] == sqlite_path: + fallback_params = params[1:] + else: + fallback_params = params + + return sqlite_to_dataframe(sqlite_path, fallback_query, fallback_params) + +def save_dataframe_with_fallback( + df: pd.DataFrame, + output_path: str, + duckdb_conn: Optional[duckdb.DuckDBPyConnection] = None, + format: str = "parquet" +) -> None: + """ + Save a DataFrame to the specified format, with fallback options if DuckDB extensions fail. + + Args: + df: DataFrame to save + output_path: Output file path + duckdb_conn: Optional DuckDB connection (for parquet) + format: Output format ('parquet' or 'csv') + """ + output_path = Path(output_path) + + if format.lower() == "parquet": + try: + if duckdb_conn: + # Try using DuckDB to write parquet + duckdb_conn.register('temp_df', df) + duckdb_conn.execute(f"COPY temp_df TO '{output_path}' (FORMAT PARQUET)") + return + except Exception as e: + print(f"DuckDB parquet write failed: {e}, falling back to pandas") + + try: + # Fallback to pandas parquet (requires pyarrow) + df.to_parquet(output_path, index=False) + return + except Exception as e: + print(f"Pandas parquet write failed: {e}, falling back to CSV") + # Change extension to CSV and fall through + output_path = output_path.with_suffix('.csv') + format = "csv" + + if format.lower() == "csv": + df.to_csv(output_path, index=False) + +def read_dataframe_with_fallback( + file_path: str, + duckdb_conn: Optional[duckdb.DuckDBPyConnection] = None +) -> pd.DataFrame: + """ + Read a DataFrame from file with fallback options. + + Args: + file_path: Path to input file + duckdb_conn: Optional DuckDB connection + + Returns: + DataFrame with file contents + """ + file_path = Path(file_path) + + if file_path.suffix.lower() == '.parquet': + try: + if duckdb_conn: + # Try using DuckDB to read parquet + return duckdb_conn.execute(f"SELECT * FROM parquet_scan('{file_path}')").df() + except Exception: + pass + + try: + # Fallback to pandas + return pd.read_parquet(file_path) + except Exception: + # Try CSV fallback + csv_path = file_path.with_suffix('.csv') + if csv_path.exists(): + return pd.read_csv(csv_path) + raise + + elif file_path.suffix.lower() == '.csv': + return pd.read_csv(file_path) + + else: + raise ValueError(f"Unsupported file format: {file_path.suffix}") \ No newline at end of file diff --git a/examples/podcast_reviews/execute.py b/examples/podcast_reviews/execute.py deleted file mode 100644 index ef6ae51..0000000 --- a/examples/podcast_reviews/execute.py +++ /dev/null @@ -1,2 +0,0 @@ - -print("What a time to be alive.") diff --git a/examples/podcast_reviews/extract_podcasts_job.py b/examples/podcast_reviews/extract_podcasts_job.py new file mode 100644 index 0000000..bdd66bf --- /dev/null +++ b/examples/podcast_reviews/extract_podcasts_job.py @@ -0,0 +1,246 @@ +#!/usr/bin/env python3 + +import sys +import json +import os +from datetime import datetime +from pathlib import Path +from typing import List, Dict, Any +from duckdb_utils import create_duckdb_connection, execute_query_with_fallback, save_dataframe_with_fallback + +def main(): + # Write debug at the very start to see if main is called + debug_file = "/tmp/databuild_test/podcasts_main_debug.log" + try: + with open(debug_file, "w") as f: + f.write(f"main() called with sys.argv: {sys.argv}\n") + f.flush() + except: + pass + + if len(sys.argv) < 2: + print("Usage: extract_podcasts_job.py {config|exec} [args...]", file=sys.stderr) + sys.exit(1) + + command = sys.argv[1] + + try: + with open(debug_file, "a") as f: + f.write(f"command: {command}\n") + f.flush() + except: + pass + + if command == "config": + handle_config(sys.argv[2:]) + elif command == "exec": + handle_exec(sys.argv[2:]) + else: + print(f"Unknown command: {command}", file=sys.stderr) + sys.exit(1) + +def handle_config(args): + if len(args) < 1: + print("Config mode requires partition ref", file=sys.stderr) + sys.exit(1) + + partition_ref = args[0] + + # This job produces a single partition with all podcast metadata + if partition_ref != "podcasts/all": + print(f"Invalid partition ref: {partition_ref}. Expected 'podcasts/all'", file=sys.stderr) + sys.exit(1) + + config = { + "configs": [{ + "outputs": [{"str": partition_ref}], + "inputs": [], + "args": ["all"], + "env": { + "PARTITION_REF": partition_ref + } + }] + } + + print(json.dumps(config)) + +def handle_exec(args): + # Write debug info to a file since stdout might not be captured + debug_file = "/tmp/databuild_test/podcasts_debug.log" + with open(debug_file, "w") as f: + f.write(f"Starting extract_podcasts_job.exec with args: {args}\n") + f.flush() + + print(f"Starting extract_podcasts_job.exec with args: {args}") + partition_ref = os.getenv('PARTITION_REF', 'podcasts/all') + print(f"Partition ref: {partition_ref}") + + with open(debug_file, "a") as f: + f.write(f"Partition ref: {partition_ref}\n") + f.flush() + + # Database paths + db_path = "/tmp/databuild_test/examples/podcast_reviews/data/ingest/database.sqlite" + if not os.path.exists(db_path): + # Fallback to relative path for development + db_path = "data/ingest/database.sqlite" + + print(f"Looking for database at: {db_path}") + print(f"Database exists: {os.path.exists(db_path)}") + + # Output path + output_dir = Path("/tmp/databuild_test/examples/podcast_reviews/podcasts") + output_dir.mkdir(parents=True, exist_ok=True) + output_file = output_dir / "podcasts.parquet" + + print(f"Output directory: {output_dir}") + print(f"Output file: {output_file}") + + try: + # Extract all podcasts with their categories + print("Calling extract_podcasts_with_categories...") + result = extract_podcasts_with_categories(db_path, str(output_file)) + print(f"extract_podcasts_with_categories returned: {result}") + + print(f"Successfully extracted podcast metadata") + print(f"Output written to: {output_file}") + print(f"Output file exists: {output_file.exists()}") + + # Create manifest + manifest = { + "outputs": [{"str": partition_ref}], + "inputs": [], + "start_time": datetime.now().isoformat(), + "end_time": datetime.now().isoformat(), + "task": { + "job": {"label": "//examples/podcast_reviews:extract_podcasts_job"}, + "config": { + "outputs": [{"str": partition_ref}], + "inputs": [], + "args": [], + "env": {"PARTITION_REF": partition_ref} + } + } + } + + manifest_file = output_dir / "manifest.json" + with open(manifest_file, 'w') as f: + json.dump(manifest, f, indent=2) + + print(f"Manifest written to: {manifest_file}") + + except Exception as e: + print(f"Error extracting podcasts: {e}", file=sys.stderr) + import traceback + traceback.print_exc() + sys.exit(1) + +def extract_podcasts_with_categories(db_path: str, output_file: str): + """Extract all podcasts with their categories and save as parquet.""" + + print(f"extract_podcasts_with_categories called with db_path={db_path}, output_file={output_file}") + + # Connect to DuckDB with extension handling + print("Creating DuckDB connection...") + duckdb_conn = create_duckdb_connection() + print("DuckDB connection created") + + try: + # Use a simpler approach that works with SQLite fallback + try: + # Try complex DuckDB query first + query = """ + WITH podcast_categories AS ( + SELECT + p.podcast_id, + p.itunes_id, + p.slug, + p.itunes_url, + p.title, + c.category, + ROW_NUMBER() OVER (PARTITION BY p.podcast_id ORDER BY c.category) as category_rank + FROM sqlite_scan(?, 'podcasts') p + LEFT JOIN sqlite_scan(?, 'categories') c ON p.podcast_id = c.podcast_id + ), + primary_categories AS ( + SELECT + podcast_id, + itunes_id, + slug, + itunes_url, + title, + category as primary_category + FROM podcast_categories + WHERE category_rank = 1 + ), + all_categories AS ( + SELECT + podcast_id, + STRING_AGG(category, '|' ORDER BY category) as all_categories + FROM podcast_categories + WHERE category IS NOT NULL + GROUP BY podcast_id + ) + SELECT + pc.podcast_id, + pc.itunes_id, + pc.slug, + pc.itunes_url, + pc.title, + pc.primary_category, + COALESCE(ac.all_categories, pc.primary_category) as all_categories + FROM primary_categories pc + LEFT JOIN all_categories ac ON pc.podcast_id = ac.podcast_id + ORDER BY pc.title + """ + + df = duckdb_conn.execute(query, [db_path, db_path]).df() + + except Exception as e: + print(f"DuckDB complex query failed: {e}, using pandas fallback") + + # Fallback: Use pandas to process the data + import pandas as pd + import sqlite3 + + sqlite_conn = sqlite3.connect(db_path) + try: + # Read podcasts and categories separately + podcasts_df = pd.read_sql_query("SELECT * FROM podcasts", sqlite_conn) + categories_df = pd.read_sql_query("SELECT * FROM categories", sqlite_conn) + + # Group categories by podcast_id + categories_grouped = categories_df.groupby('podcast_id')['category'].apply( + lambda x: '|'.join(sorted(x)) + ).reset_index() + categories_grouped.columns = ['podcast_id', 'all_categories'] + + # Get primary category (first alphabetically) + primary_categories = categories_df.sort_values('category').groupby('podcast_id').first().reset_index() + primary_categories = primary_categories[['podcast_id', 'category']].rename(columns={'category': 'primary_category'}) + + # Join everything together + df = podcasts_df.merge(primary_categories, on='podcast_id', how='left') + df = df.merge(categories_grouped, on='podcast_id', how='left') + + # Fill missing values + df['primary_category'] = df['primary_category'].fillna('unknown') + df['all_categories'] = df['all_categories'].fillna(df['primary_category']) + + # Sort by title + df = df.sort_values('title') + + finally: + sqlite_conn.close() + + # Save to parquet with fallback + save_dataframe_with_fallback(df, output_file, duckdb_conn, "parquet") + + row_count = len(df) + print(f"Extracted {row_count} podcasts with category information") + + finally: + duckdb_conn.close() + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/examples/podcast_reviews/extract_reviews_job.py b/examples/podcast_reviews/extract_reviews_job.py new file mode 100644 index 0000000..245db78 --- /dev/null +++ b/examples/podcast_reviews/extract_reviews_job.py @@ -0,0 +1,170 @@ +#!/usr/bin/env python3 + +import sys +import json +import os +from datetime import datetime, date +from pathlib import Path +from typing import List, Dict, Any +import re +from duckdb_utils import create_duckdb_connection, execute_query_with_fallback, save_dataframe_with_fallback + +def main(): + # Write debug info to understand what's being called + debug_file = "/tmp/databuild_test/reviews_main_debug.log" + try: + with open(debug_file, "w") as f: + f.write(f"main() called with sys.argv: {sys.argv}\n") + f.flush() + except: + pass + + if len(sys.argv) < 2: + print("Usage: extract_reviews_job.py {config|exec} [args...]", file=sys.stderr) + sys.exit(1) + + command = sys.argv[1] + + try: + with open(debug_file, "a") as f: + f.write(f"command: {command}\n") + f.flush() + except: + pass + + if command == "config": + handle_config(sys.argv[2:]) + elif command == "exec": + handle_exec(sys.argv[2:]) + else: + print(f"Unknown command: {command}", file=sys.stderr) + sys.exit(1) + +def parse_partition_ref(partition_ref: str) -> Dict[str, str]: + """Parse partition ref like 'reviews/date=2020-01-01' into components.""" + match = re.match(r'reviews/date=(\d{4}-\d{2}-\d{2})', partition_ref) + if not match: + raise ValueError(f"Invalid partition ref format: {partition_ref}") + return {"date": match.group(1)} + +def handle_config(args): + if len(args) < 1: + print("Config mode requires partition ref", file=sys.stderr) + sys.exit(1) + + configs = [] + + # Process each partition reference + for partition_ref in args: + try: + parsed = parse_partition_ref(partition_ref) + date_str = parsed["date"] + except ValueError as e: + print(f"Error parsing partition ref: {e}", file=sys.stderr) + sys.exit(1) + + configs.append({ + "outputs": [{"str": partition_ref}], + "inputs": [], + "args": [date_str], + "env": { + "PARTITION_REF": partition_ref, + "TARGET_DATE": date_str + } + }) + + config = {"configs": configs} + print(json.dumps(config)) + +def handle_exec(args): + if len(args) < 1: + print("Exec mode requires date argument", file=sys.stderr) + sys.exit(1) + + target_date = args[0] + partition_ref = os.getenv('PARTITION_REF', f'reviews/date={target_date}') + + # Database paths + db_path = "/tmp/databuild_test/examples/podcast_reviews/data/ingest/database.sqlite" + if not os.path.exists(db_path): + # Fallback to relative path for development + db_path = "data/ingest/database.sqlite" + + # Output path + output_dir = Path(f"/tmp/databuild_test/examples/podcast_reviews/reviews/date={target_date}") + output_dir.mkdir(parents=True, exist_ok=True) + output_file = output_dir / "reviews.parquet" + + try: + # Extract reviews for the target date + extract_reviews_for_date(db_path, target_date, str(output_file)) + + print(f"Successfully extracted reviews for {target_date}") + print(f"Output written to: {output_file}") + + # Create manifest + manifest = { + "outputs": [{"str": partition_ref}], + "inputs": [], + "start_time": datetime.now().isoformat(), + "end_time": datetime.now().isoformat(), + "task": { + "job": {"label": "//examples/podcast_reviews:extract_reviews_job"}, + "config": { + "outputs": [{"str": partition_ref}], + "inputs": [], + "args": [target_date], + "env": {"PARTITION_REF": partition_ref, "TARGET_DATE": target_date} + } + } + } + + manifest_file = output_dir / "manifest.json" + with open(manifest_file, 'w') as f: + json.dump(manifest, f, indent=2) + + except Exception as e: + print(f"Error extracting reviews: {e}", file=sys.stderr) + sys.exit(1) + +def extract_reviews_for_date(db_path: str, target_date: str, output_file: str): + """Extract reviews for a specific date and save as parquet.""" + + # Connect to DuckDB with extension handling + duckdb_conn = create_duckdb_connection() + + try: + # Query reviews for the target date + query = """ + SELECT + podcast_id, + title as review_title, + content, + rating, + author_id, + created_at, + DATE(created_at) as review_date + FROM sqlite_scan(?, 'reviews') + WHERE DATE(created_at) = ? + ORDER BY created_at + """ + + # Execute query with fallback handling + df = execute_query_with_fallback( + duckdb_conn, + db_path, + query, + [db_path, target_date] + ) + + # Save to parquet with fallback + save_dataframe_with_fallback(df, output_file, duckdb_conn, "parquet") + + row_count = len(df) + print(f"Extracted {row_count} reviews for date {target_date}") + + finally: + duckdb_conn.close() + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/examples/podcast_reviews/job_lookup.py b/examples/podcast_reviews/job_lookup.py new file mode 100644 index 0000000..92bc587 --- /dev/null +++ b/examples/podcast_reviews/job_lookup.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python3 + +import sys +import json +import re +from collections import defaultdict + +def main(): + if len(sys.argv) < 2: + print("Usage: job_lookup.py partition_ref [partition_ref...]", file=sys.stderr) + sys.exit(1) + + partition_refs = sys.argv[1:] + + try: + result = defaultdict(list) + + for partition_ref in partition_refs: + job_label = lookup_job_for_partition(partition_ref) + result[job_label].append(partition_ref) + + # Output in the format expected by DataBuild + print(json.dumps({k: v for k, v in result.items() if v})) + + except Exception as e: + print(f"Error in job lookup: {e}", file=sys.stderr) + sys.exit(1) + +def lookup_job_for_partition(partition_ref: str) -> str: + """Determine which job produces a given partition reference.""" + + # Extract reviews by date: reviews/date=YYYY-MM-DD + if re.match(r'reviews/date=\d{4}-\d{2}-\d{2}', partition_ref): + return "//:extract_reviews_job" + + # Extract all podcasts: podcasts/all + if partition_ref == "podcasts/all": + return "//:extract_podcasts_job" + + # Categorized reviews: categorized_reviews/category=CATEGORY/date=YYYY-MM-DD + if re.match(r'categorized_reviews/category=[^/]+/date=\d{4}-\d{2}-\d{2}', partition_ref): + return "//:categorize_reviews_job" + + # Phrase models: phrase_models/category=CATEGORY/date=YYYY-MM-DD + if re.match(r'phrase_models/category=[^/]+/date=\d{4}-\d{2}-\d{2}', partition_ref): + return "//:phrase_modeling_job" + + # Phrase statistics: phrase_stats/category=CATEGORY/date=YYYY-MM-DD + if re.match(r'phrase_stats/category=[^/]+/date=\d{4}-\d{2}-\d{2}', partition_ref): + return "//:phrase_stats_job" + + # Daily summaries: daily_summaries/category=CATEGORY/date=YYYY-MM-DD + if re.match(r'daily_summaries/category=[^/]+/date=\d{4}-\d{2}-\d{2}', partition_ref): + return "//:daily_summary_job" + + # If no match found, raise an error + raise ValueError(f"No job found for partition reference: {partition_ref}") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/examples/podcast_reviews/phrase_modeling_job.py b/examples/podcast_reviews/phrase_modeling_job.py new file mode 100644 index 0000000..7c528fc --- /dev/null +++ b/examples/podcast_reviews/phrase_modeling_job.py @@ -0,0 +1,353 @@ +#!/usr/bin/env python3 + +import sys +import json +import os +import duckdb +import subprocess +import tempfile +from datetime import datetime +from pathlib import Path +from typing import List, Dict, Any +import re + +def main(): + if len(sys.argv) < 2: + print("Usage: phrase_modeling_job.py {config|exec} [args...]", file=sys.stderr) + sys.exit(1) + + command = sys.argv[1] + + if command == "config": + handle_config(sys.argv[2:]) + elif command == "exec": + handle_exec(sys.argv[2:]) + else: + print(f"Unknown command: {command}", file=sys.stderr) + sys.exit(1) + +def parse_partition_ref(partition_ref: str) -> Dict[str, str]: + """Parse partition ref like 'phrase_models/category=comedy/date=2020-01-01' into components.""" + match = re.match(r'phrase_models/category=([^/]+)/date=(\d{4}-\d{2}-\d{2})', partition_ref) + if not match: + raise ValueError(f"Invalid partition ref format: {partition_ref}") + return {"category": match.group(1), "date": match.group(2)} + +def handle_config(args): + if len(args) < 1: + print("Config mode requires partition ref", file=sys.stderr) + sys.exit(1) + + configs = [] + + # Process each partition reference + for partition_ref in args: + try: + parsed = parse_partition_ref(partition_ref) + category = parsed["category"] + date_str = parsed["date"] + except ValueError as e: + print(f"Error parsing partition ref: {e}", file=sys.stderr) + sys.exit(1) + + # Dependencies: categorized reviews for the category and date + categorized_reviews_ref = f"categorized_reviews/category={category}/date={date_str}" + + configs.append({ + "outputs": [{"str": partition_ref}], + "inputs": [ + {"dep_type": 1, "partition_ref": {"str": categorized_reviews_ref}} + ], + "args": [category, date_str], + "env": { + "PARTITION_REF": partition_ref, + "TARGET_CATEGORY": category, + "TARGET_DATE": date_str + } + }) + + config = {"configs": configs} + print(json.dumps(config)) + +def handle_exec(args): + if len(args) < 2: + print("Exec mode requires category and date arguments", file=sys.stderr) + sys.exit(1) + + target_category = args[0] + target_date = args[1] + partition_ref = os.getenv('PARTITION_REF', f'phrase_models/category={target_category}/date={target_date}') + + # Input path + categorized_reviews_file = f"/tmp/databuild_test/examples/podcast_reviews/categorized_reviews/category={target_category}/date={target_date}/categorized_reviews.parquet" + + # Check input file exists + if not os.path.exists(categorized_reviews_file): + print(f"Categorized reviews file not found: {categorized_reviews_file}", file=sys.stderr) + sys.exit(1) + + # Output path + output_dir = Path(f"/tmp/databuild_test/examples/podcast_reviews/phrase_models/category={target_category}/date={target_date}") + output_dir.mkdir(parents=True, exist_ok=True) + output_file = output_dir / "phrase_models.parquet" + + try: + # Extract phrases using phrase modeling + extract_phrases_for_category_date(categorized_reviews_file, target_category, target_date, str(output_file)) + + print(f"Successfully extracted phrases for category {target_category} on {target_date}") + print(f"Output written to: {output_file}") + + # Create manifest + manifest = { + "outputs": [{"str": partition_ref}], + "inputs": [ + {"str": f"categorized_reviews/category={target_category}/date={target_date}"} + ], + "start_time": datetime.now().isoformat(), + "end_time": datetime.now().isoformat(), + "task": { + "job": {"label": "//examples/podcast_reviews:phrase_modeling_job"}, + "config": { + "outputs": [{"str": partition_ref}], + "inputs": [ + {"dep_type": 1, "partition_ref": {"str": f"categorized_reviews/category={target_category}/date={target_date}"}} + ], + "args": [target_category, target_date], + "env": {"PARTITION_REF": partition_ref, "TARGET_CATEGORY": target_category, "TARGET_DATE": target_date} + } + } + } + + manifest_file = output_dir / "manifest.json" + with open(manifest_file, 'w') as f: + json.dump(manifest, f, indent=2) + + except Exception as e: + print(f"Error extracting phrases: {e}", file=sys.stderr) + sys.exit(1) + +def extract_phrases_for_category_date(categorized_reviews_file: str, target_category: str, target_date: str, output_file: str): + """Extract phrases from categorized reviews using phrase binary or simple ngram extraction.""" + + # Connect to DuckDB for processing + duckdb_conn = duckdb.connect() + + try: + # Try to install and load parquet extension, but don't fail if it's already installed + try: + duckdb_conn.execute("INSTALL parquet") + except Exception: + pass # Extension might already be installed + + duckdb_conn.execute("LOAD parquet") + + # Check if phrase binary is available + phrase_binary = find_phrase_binary() + + if phrase_binary: + # Use external phrase binary + phrases = extract_with_phrase_binary(categorized_reviews_file, phrase_binary) + else: + print("Warning: phrase binary not found, using simple ngram extraction") + # Fallback to simple ngram extraction + phrases = extract_simple_ngrams(categorized_reviews_file, duckdb_conn) + + # Convert phrases to structured data and save + if phrases: + save_phrases_to_parquet(phrases, target_category, target_date, output_file, duckdb_conn) + else: + # Create empty parquet file with correct schema + create_empty_phrase_parquet(target_category, target_date, output_file, duckdb_conn) + + finally: + duckdb_conn.close() + +def find_phrase_binary() -> str: + """Find phrase binary in common locations.""" + possible_paths = [ + "/usr/local/bin/phrase", + "/usr/bin/phrase", + "./phrase", + "../phrase", + os.path.expanduser("~/bin/phrase") + ] + + for path in possible_paths: + if os.path.exists(path) and os.access(path, os.X_OK): + return path + + return None + +def extract_with_phrase_binary(categorized_reviews_file: str, phrase_binary: str) -> List[Dict[str, Any]]: + """Extract phrases using the external phrase binary.""" + + # Read review content to temporary file + duckdb_conn = duckdb.connect() + try: + # Try to install and load parquet extension, but don't fail if it's already installed + try: + duckdb_conn.execute("INSTALL parquet") + except Exception: + pass # Extension might already be installed + + duckdb_conn.execute("LOAD parquet") + + # Extract review content + content_query = f"SELECT content FROM parquet_scan('{categorized_reviews_file}') WHERE content IS NOT NULL AND content != ''" + results = duckdb_conn.execute(content_query).fetchall() + + if not results: + return [] + + # Write content to temporary file + with tempfile.NamedTemporaryFile(mode='w', suffix='.txt', delete=False) as temp_file: + for (content,) in results: + temp_file.write(content.strip() + '\n') + temp_file_path = temp_file.name + + try: + # Run phrase binary + cmd = [phrase_binary, "--input", temp_file_path, "--output-format", "json"] + result = subprocess.run(cmd, capture_output=True, text=True, timeout=300) + + if result.returncode != 0: + print(f"Phrase binary failed: {result.stderr}", file=sys.stderr) + return [] + + # Parse JSON output + phrases_data = json.loads(result.stdout) if result.stdout.strip() else [] + return phrases_data + + finally: + # Clean up temp file + os.unlink(temp_file_path) + + finally: + duckdb_conn.close() + +def extract_simple_ngrams(categorized_reviews_file: str, duckdb_conn) -> List[Dict[str, Any]]: + """Simple ngram extraction using SQL as fallback.""" + + # Simple phrase extraction using SQL + query = f""" + WITH word_tokens AS ( + SELECT + unnest(string_split(lower(regexp_replace(content, '[^a-zA-Z0-9\\s]', '', 'g')), ' ')) as word, + podcast_id, + rating + FROM parquet_scan('{categorized_reviews_file}') + WHERE content IS NOT NULL AND content != '' + ), + bigrams AS ( + SELECT + word || ' ' || lead(word) OVER (PARTITION BY podcast_id ORDER BY rowid) as ngram, + rating + FROM (SELECT *, row_number() OVER () as rowid FROM word_tokens) t + WHERE word IS NOT NULL AND word != '' + ), + phrase_stats AS ( + SELECT + ngram, + COUNT(*) as frequency, + AVG(rating::FLOAT) as avg_rating, + MIN(rating) as min_rating, + MAX(rating) as max_rating + FROM bigrams + WHERE ngram IS NOT NULL AND ngram NOT LIKE '% %' = false + GROUP BY ngram + HAVING COUNT(*) >= 3 -- Only phrases that appear at least 3 times + ) + SELECT + ngram, + frequency, + avg_rating, + min_rating, + max_rating, + CASE + WHEN avg_rating >= 4.0 THEN frequency * avg_rating * 0.8 + WHEN avg_rating <= 2.0 THEN frequency * (5.0 - avg_rating) * 0.8 + ELSE frequency * 0.3 + END as score + FROM phrase_stats + ORDER BY score DESC + LIMIT 1000 + """ + + try: + results = duckdb_conn.execute(query).fetchall() + + phrases = [] + for row in results: + ngram, frequency, avg_rating, min_rating, max_rating, score = row + phrases.append({ + "ngram": ngram, + "frequency": frequency, + "avg_rating": float(avg_rating) if avg_rating else 0.0, + "min_rating": min_rating, + "max_rating": max_rating, + "score": float(score) if score else 0.0, + "hash": hash(ngram) % (2**31) # Simple hash for compatibility + }) + + return phrases + + except Exception as e: + print(f"Error in simple ngram extraction: {e}", file=sys.stderr) + return [] + +def save_phrases_to_parquet(phrases: List[Dict[str, Any]], category: str, date: str, output_file: str, duckdb_conn): + """Save phrases to parquet file.""" + + if not phrases: + create_empty_phrase_parquet(category, date, output_file, duckdb_conn) + return + + # Create temporary table with phrases + duckdb_conn.execute("DROP TABLE IF EXISTS temp_phrases") + duckdb_conn.execute(""" + CREATE TABLE temp_phrases ( + date VARCHAR, + category VARCHAR, + hash BIGINT, + ngram VARCHAR, + score DOUBLE + ) + """) + + # Insert phrase data + for phrase in phrases: + duckdb_conn.execute(""" + INSERT INTO temp_phrases VALUES (?, ?, ?, ?, ?) + """, [ + date, + category, + phrase.get("hash", hash(phrase.get("ngram", "")) % (2**31)), + phrase.get("ngram", ""), + phrase.get("score", 0.0) + ]) + + # Save to parquet + duckdb_conn.execute(f"COPY temp_phrases TO '{output_file}' (FORMAT PARQUET)") + + print(f"Saved {len(phrases)} phrases to parquet file") + +def create_empty_phrase_parquet(category: str, date: str, output_file: str, duckdb_conn): + """Create empty parquet file with correct schema.""" + + duckdb_conn.execute("DROP TABLE IF EXISTS empty_phrases") + duckdb_conn.execute(""" + CREATE TABLE empty_phrases ( + date VARCHAR, + category VARCHAR, + hash BIGINT, + ngram VARCHAR, + score DOUBLE + ) + """) + + duckdb_conn.execute(f"COPY empty_phrases TO '{output_file}' (FORMAT PARQUET)") + print("Created empty phrase models file (no phrases extracted)") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/examples/podcast_reviews/phrase_stats_job.py b/examples/podcast_reviews/phrase_stats_job.py new file mode 100644 index 0000000..5fe4f64 --- /dev/null +++ b/examples/podcast_reviews/phrase_stats_job.py @@ -0,0 +1,263 @@ +#!/usr/bin/env python3 + +import sys +import json +import os +import duckdb +from datetime import datetime +from pathlib import Path +from typing import List, Dict, Any +import re + +def main(): + if len(sys.argv) < 2: + print("Usage: phrase_stats_job.py {config|exec} [args...]", file=sys.stderr) + sys.exit(1) + + command = sys.argv[1] + + if command == "config": + handle_config(sys.argv[2:]) + elif command == "exec": + handle_exec(sys.argv[2:]) + else: + print(f"Unknown command: {command}", file=sys.stderr) + sys.exit(1) + +def parse_partition_ref(partition_ref: str) -> Dict[str, str]: + """Parse partition ref like 'phrase_stats/category=comedy/date=2020-01-01' into components.""" + match = re.match(r'phrase_stats/category=([^/]+)/date=(\d{4}-\d{2}-\d{2})', partition_ref) + if not match: + raise ValueError(f"Invalid partition ref format: {partition_ref}") + return {"category": match.group(1), "date": match.group(2)} + +def handle_config(args): + if len(args) < 1: + print("Config mode requires partition ref", file=sys.stderr) + sys.exit(1) + + configs = [] + + # Process each partition reference + for partition_ref in args: + try: + parsed = parse_partition_ref(partition_ref) + category = parsed["category"] + date_str = parsed["date"] + except ValueError as e: + print(f"Error parsing partition ref: {e}", file=sys.stderr) + sys.exit(1) + + # Dependencies: phrase models and categorized reviews for the category and date + phrase_models_ref = f"phrase_models/category={category}/date={date_str}" + categorized_reviews_ref = f"categorized_reviews/category={category}/date={date_str}" + + configs.append({ + "outputs": [{"str": partition_ref}], + "inputs": [ + {"dep_type": 1, "partition_ref": {"str": phrase_models_ref}}, + {"dep_type": 1, "partition_ref": {"str": categorized_reviews_ref}} + ], + "args": [category, date_str], + "env": { + "PARTITION_REF": partition_ref, + "TARGET_CATEGORY": category, + "TARGET_DATE": date_str + } + }) + + config = {"configs": configs} + print(json.dumps(config)) + +def handle_exec(args): + if len(args) < 2: + print("Exec mode requires category and date arguments", file=sys.stderr) + sys.exit(1) + + target_category = args[0] + target_date = args[1] + partition_ref = os.getenv('PARTITION_REF', f'phrase_stats/category={target_category}/date={target_date}') + + # Input paths + phrase_models_file = f"/tmp/databuild_test/examples/podcast_reviews/phrase_models/category={target_category}/date={target_date}/phrase_models.parquet" + categorized_reviews_file = f"/tmp/databuild_test/examples/podcast_reviews/categorized_reviews/category={target_category}/date={target_date}/categorized_reviews.parquet" + + # Check input files exist + if not os.path.exists(phrase_models_file): + print(f"Phrase models file not found: {phrase_models_file}", file=sys.stderr) + sys.exit(1) + + if not os.path.exists(categorized_reviews_file): + print(f"Categorized reviews file not found: {categorized_reviews_file}", file=sys.stderr) + sys.exit(1) + + # Output path + output_dir = Path(f"/tmp/databuild_test/examples/podcast_reviews/phrase_stats/category={target_category}/date={target_date}") + output_dir.mkdir(parents=True, exist_ok=True) + output_file = output_dir / "phrase_stats.parquet" + + try: + # Calculate phrase statistics per podcast + calculate_phrase_stats_for_category_date( + phrase_models_file, + categorized_reviews_file, + target_category, + target_date, + str(output_file) + ) + + print(f"Successfully calculated phrase stats for category {target_category} on {target_date}") + print(f"Output written to: {output_file}") + + # Create manifest + manifest = { + "outputs": [{"str": partition_ref}], + "inputs": [ + {"str": f"phrase_models/category={target_category}/date={target_date}"}, + {"str": f"categorized_reviews/category={target_category}/date={target_date}"} + ], + "start_time": datetime.now().isoformat(), + "end_time": datetime.now().isoformat(), + "task": { + "job": {"label": "//examples/podcast_reviews:phrase_stats_job"}, + "config": { + "outputs": [{"str": partition_ref}], + "inputs": [ + {"dep_type": 1, "partition_ref": {"str": f"phrase_models/category={target_category}/date={target_date}"}}, + {"dep_type": 1, "partition_ref": {"str": f"categorized_reviews/category={target_category}/date={target_date}"}} + ], + "args": [target_category, target_date], + "env": {"PARTITION_REF": partition_ref, "TARGET_CATEGORY": target_category, "TARGET_DATE": target_date} + } + } + } + + manifest_file = output_dir / "manifest.json" + with open(manifest_file, 'w') as f: + json.dump(manifest, f, indent=2) + + except Exception as e: + print(f"Error calculating phrase stats: {e}", file=sys.stderr) + sys.exit(1) + +def calculate_phrase_stats_for_category_date( + phrase_models_file: str, + categorized_reviews_file: str, + target_category: str, + target_date: str, + output_file: str +): + """Calculate phrase statistics per podcast by joining phrase models with reviews.""" + + # Connect to DuckDB for processing + duckdb_conn = duckdb.connect() + + try: + # Try to install and load parquet extension, but don't fail if it's already installed + try: + duckdb_conn.execute("INSTALL parquet") + except Exception: + pass # Extension might already be installed + + duckdb_conn.execute("LOAD parquet") + + # Check if we have phrase models + phrase_count = duckdb_conn.execute(f"SELECT COUNT(*) FROM parquet_scan('{phrase_models_file}')").fetchone()[0] + + if phrase_count == 0: + print(f"No phrase models found, creating empty phrase stats") + create_empty_phrase_stats(target_category, target_date, output_file, duckdb_conn) + return + + # Query to calculate phrase statistics per podcast + query = f""" + WITH phrase_matches AS ( + SELECT + r.podcast_id, + r.podcast_title, + r.rating, + r.content, + p.ngram, + p.score as phrase_score + FROM parquet_scan('{categorized_reviews_file}') r + JOIN parquet_scan('{phrase_models_file}') p + ON lower(r.content) LIKE '%' || lower(p.ngram) || '%' + WHERE r.content IS NOT NULL + AND r.content != '' + AND p.ngram IS NOT NULL + AND p.ngram != '' + ), + podcast_phrase_stats AS ( + SELECT + '{target_date}' as date, + '{target_category}' as category, + podcast_id, + podcast_title, + ngram, + COUNT(*) as count, + AVG(rating::FLOAT) as avg_rating, + MIN(rating) as min_rating, + MAX(rating) as max_rating, + AVG(phrase_score) as avg_phrase_score, + COUNT(*) * AVG(phrase_score) * AVG(rating::FLOAT) / 5.0 as weighted_score + FROM phrase_matches + GROUP BY podcast_id, podcast_title, ngram + HAVING COUNT(*) >= 2 -- Only include phrases that appear at least twice per podcast + ) + SELECT + date, + category, + podcast_id, + podcast_title, + ngram, + count, + avg_rating, + min_rating, + max_rating, + avg_phrase_score, + weighted_score + FROM podcast_phrase_stats + ORDER BY weighted_score DESC, count DESC + """ + + # Execute query and save to parquet + duckdb_conn.execute(f"COPY ({query}) TO '{output_file}' (FORMAT PARQUET)") + + # Get row count for logging + count_result = duckdb_conn.execute(f"SELECT COUNT(*) FROM ({query})").fetchone() + row_count = count_result[0] if count_result else 0 + + print(f"Calculated phrase statistics for {row_count} podcast-phrase combinations") + + if row_count == 0: + print(f"Warning: No phrase matches found for category '{target_category}' on date '{target_date}'") + create_empty_phrase_stats(target_category, target_date, output_file, duckdb_conn) + + finally: + duckdb_conn.close() + +def create_empty_phrase_stats(category: str, date: str, output_file: str, duckdb_conn): + """Create empty phrase stats parquet file with correct schema.""" + + duckdb_conn.execute("DROP TABLE IF EXISTS empty_phrase_stats") + duckdb_conn.execute(""" + CREATE TABLE empty_phrase_stats ( + date VARCHAR, + category VARCHAR, + podcast_id VARCHAR, + podcast_title VARCHAR, + ngram VARCHAR, + count BIGINT, + avg_rating DOUBLE, + min_rating INTEGER, + max_rating INTEGER, + avg_phrase_score DOUBLE, + weighted_score DOUBLE + ) + """) + + duckdb_conn.execute(f"COPY empty_phrase_stats TO '{output_file}' (FORMAT PARQUET)") + print("Created empty phrase stats file") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/examples/podcast_reviews/requirements.in b/examples/podcast_reviews/requirements.in index f6e601f..81390e6 100644 --- a/examples/podcast_reviews/requirements.in +++ b/examples/podcast_reviews/requirements.in @@ -1,2 +1,4 @@ duckdb==1.2.2 -pydantic==2.11.3 \ No newline at end of file +pydantic==2.11.3 +pandas>=2.0.0 +pyarrow>=10.0.0 \ No newline at end of file diff --git a/examples/podcast_reviews/requirements_lock.txt b/examples/podcast_reviews/requirements_lock.txt index 2072dd1..e721309 100644 --- a/examples/podcast_reviews/requirements_lock.txt +++ b/examples/podcast_reviews/requirements_lock.txt @@ -61,6 +61,160 @@ duckdb==1.2.2 \ --hash=sha256:fb9a2c77236fae079185a990434cb9d8432902488ba990235c702fc2692d2dcd \ --hash=sha256:fd9c434127fd1575694e1cf19a393bed301f5d6e80b4bcdae80caa368a61a678 # via -r requirements.in +numpy==2.3.1 \ + --hash=sha256:0025048b3c1557a20bc80d06fdeb8cc7fc193721484cca82b2cfa072fec71a93 \ + --hash=sha256:010ce9b4f00d5c036053ca684c77441f2f2c934fd23bee058b4d6f196efd8280 \ + --hash=sha256:0bb3a4a61e1d327e035275d2a993c96fa786e4913aa089843e6a2d9dd205c66a \ + --hash=sha256:0c4d9e0a8368db90f93bd192bfa771ace63137c3488d198ee21dfb8e7771916e \ + --hash=sha256:15aa4c392ac396e2ad3d0a2680c0f0dee420f9fed14eef09bdb9450ee6dcb7b7 \ + --hash=sha256:18703df6c4a4fee55fd3d6e5a253d01c5d33a295409b03fda0c86b3ca2ff41a1 \ + --hash=sha256:1ec9ae20a4226da374362cca3c62cd753faf2f951440b0e3b98e93c235441d2b \ + --hash=sha256:23ab05b2d241f76cb883ce8b9a93a680752fbfcbd51c50eff0b88b979e471d8c \ + --hash=sha256:25a1992b0a3fdcdaec9f552ef10d8103186f5397ab45e2d25f8ac51b1a6b97e8 \ + --hash=sha256:2959d8f268f3d8ee402b04a9ec4bb7604555aeacf78b360dc4ec27f1d508177d \ + --hash=sha256:2a809637460e88a113e186e87f228d74ae2852a2e0c44de275263376f17b5bdc \ + --hash=sha256:2fb86b7e58f9ac50e1e9dd1290154107e47d1eef23a0ae9145ded06ea606f992 \ + --hash=sha256:36890eb9e9d2081137bd78d29050ba63b8dab95dff7912eadf1185e80074b2a0 \ + --hash=sha256:39bff12c076812595c3a306f22bfe49919c5513aa1e0e70fac756a0be7c2a2b8 \ + --hash=sha256:467db865b392168ceb1ef1ffa6f5a86e62468c43e0cfb4ab6da667ede10e58db \ + --hash=sha256:4e602e1b8682c2b833af89ba641ad4176053aaa50f5cacda1a27004352dde943 \ + --hash=sha256:5902660491bd7a48b2ec16c23ccb9124b8abfd9583c5fdfa123fe6b421e03de1 \ + --hash=sha256:5ccb7336eaf0e77c1635b232c141846493a588ec9ea777a7c24d7166bb8533ae \ + --hash=sha256:5f1b8f26d1086835f442286c1d9b64bb3974b0b1e41bb105358fd07d20872952 \ + --hash=sha256:6269b9edfe32912584ec496d91b00b6d34282ca1d07eb10e82dfc780907d6c2e \ + --hash=sha256:6ea9e48336a402551f52cd8f593343699003d2353daa4b72ce8d34f66b722070 \ + --hash=sha256:762e0c0c6b56bdedfef9a8e1d4538556438288c4276901ea008ae44091954e29 \ + --hash=sha256:7be91b2239af2658653c5bb6f1b8bccafaf08226a258caf78ce44710a0160d30 \ + --hash=sha256:7dea630156d39b02a63c18f508f85010230409db5b2927ba59c8ba4ab3e8272e \ + --hash=sha256:867ef172a0976aaa1f1d1b63cf2090de8b636a7674607d514505fb7276ab08fc \ + --hash=sha256:8d5ee6eec45f08ce507a6570e06f2f879b374a552087a4179ea7838edbcbfa42 \ + --hash=sha256:8e333040d069eba1652fb08962ec5b76af7f2c7bce1df7e1418c8055cf776f25 \ + --hash=sha256:a5ee121b60aa509679b682819c602579e1df14a5b07fe95671c8849aad8f2115 \ + --hash=sha256:a780033466159c2270531e2b8ac063704592a0bc62ec4a1b991c7c40705eb0e8 \ + --hash=sha256:a894f3816eb17b29e4783e5873f92faf55b710c2519e5c351767c51f79d8526d \ + --hash=sha256:a8b740f5579ae4585831b3cf0e3b0425c667274f82a484866d2adf9570539369 \ + --hash=sha256:ad506d4b09e684394c42c966ec1527f6ebc25da7f4da4b1b056606ffe446b8a3 \ + --hash=sha256:afed2ce4a84f6b0fc6c1ce734ff368cbf5a5e24e8954a338f3bdffa0718adffb \ + --hash=sha256:b0b5397374f32ec0649dd98c652a1798192042e715df918c20672c62fb52d4b8 \ + --hash=sha256:bada6058dd886061f10ea15f230ccf7dfff40572e99fef440a4a857c8728c9c0 \ + --hash=sha256:c4913079974eeb5c16ccfd2b1f09354b8fed7e0d6f2cab933104a09a6419b1ee \ + --hash=sha256:c5bdf2015ccfcee8253fb8be695516ac4457c743473a43290fd36eba6a1777eb \ + --hash=sha256:c6e0bf9d1a2f50d2b65a7cf56db37c095af17b59f6c132396f7c6d5dd76484df \ + --hash=sha256:ce2ce9e5de4703a673e705183f64fd5da5bf36e7beddcb63a25ee2286e71ca48 \ + --hash=sha256:cfecc7822543abdea6de08758091da655ea2210b8ffa1faf116b940693d3df76 \ + --hash=sha256:d4580adadc53311b163444f877e0789f1c8861e2698f6b2a4ca852fda154f3ff \ + --hash=sha256:d70f20df7f08b90a2062c1f07737dd340adccf2068d0f1b9b3d56e2038979fee \ + --hash=sha256:e344eb79dab01f1e838ebb67aab09965fb271d6da6b00adda26328ac27d4a66e \ + --hash=sha256:e610832418a2bc09d974cc9fecebfa51e9532d6190223bc5ef6a7402ebf3b5cb \ + --hash=sha256:e772dda20a6002ef7061713dc1e2585bc1b534e7909b2030b5a46dae8ff077ab \ + --hash=sha256:e7cbf5a5eafd8d230a3ce356d892512185230e4781a361229bd902ff403bc660 \ + --hash=sha256:eabd7e8740d494ce2b4ea0ff05afa1b7b291e978c0ae075487c51e8bd93c0c68 \ + --hash=sha256:ebb8603d45bc86bbd5edb0d63e52c5fd9e7945d3a503b77e486bd88dde67a19b \ + --hash=sha256:ec0bdafa906f95adc9a0c6f26a4871fa753f25caaa0e032578a30457bff0af6a \ + --hash=sha256:eccb9a159db9aed60800187bc47a6d3451553f0e1b08b068d8b277ddfbb9b244 \ + --hash=sha256:ee8340cb48c9b7a5899d1149eece41ca535513a9698098edbade2a8e7a84da77 + # via pandas +pandas==2.3.0 \ + --hash=sha256:034abd6f3db8b9880aaee98f4f5d4dbec7c4829938463ec046517220b2f8574e \ + --hash=sha256:094e271a15b579650ebf4c5155c05dcd2a14fd4fdd72cf4854b2f7ad31ea30be \ + --hash=sha256:14a0cc77b0f089d2d2ffe3007db58f170dae9b9f54e569b299db871a3ab5bf46 \ + --hash=sha256:1a881bc1309f3fce34696d07b00f13335c41f5f5a8770a33b09ebe23261cfc67 \ + --hash=sha256:1d2b33e68d0ce64e26a4acc2e72d747292084f4e8db4c847c6f5f6cbe56ed6d8 \ + --hash=sha256:213cd63c43263dbb522c1f8a7c9d072e25900f6975596f883f4bebd77295d4f3 \ + --hash=sha256:23c2b2dc5213810208ca0b80b8666670eb4660bbfd9d45f58592cc4ddcfd62e1 \ + --hash=sha256:2c7e2fc25f89a49a11599ec1e76821322439d90820108309bf42130d2f36c983 \ + --hash=sha256:2eb4728a18dcd2908c7fccf74a982e241b467d178724545a48d0caf534b38ebf \ + --hash=sha256:34600ab34ebf1131a7613a260a61dbe8b62c188ec0ea4c296da7c9a06b004133 \ + --hash=sha256:39ff73ec07be5e90330cc6ff5705c651ace83374189dcdcb46e6ff54b4a72cd6 \ + --hash=sha256:404d681c698e3c8a40a61d0cd9412cc7364ab9a9cc6e144ae2992e11a2e77a20 \ + --hash=sha256:40cecc4ea5abd2921682b57532baea5588cc5f80f0231c624056b146887274d2 \ + --hash=sha256:430a63bae10b5086995db1b02694996336e5a8ac9a96b4200572b413dfdfccb9 \ + --hash=sha256:4930255e28ff5545e2ca404637bcc56f031893142773b3468dc021c6c32a1390 \ + --hash=sha256:6021910b086b3ca756755e86ddc64e0ddafd5e58e076c72cb1585162e5ad259b \ + --hash=sha256:625466edd01d43b75b1883a64d859168e4556261a5035b32f9d743b67ef44634 \ + --hash=sha256:75651c14fde635e680496148a8526b328e09fe0572d9ae9b638648c46a544ba3 \ + --hash=sha256:84141f722d45d0c2a89544dd29d35b3abfc13d2250ed7e68394eda7564bd6324 \ + --hash=sha256:8adff9f138fc614347ff33812046787f7d43b3cef7c0f0171b3340cae333f6ca \ + --hash=sha256:951805d146922aed8357e4cc5671b8b0b9be1027f0619cea132a9f3f65f2f09c \ + --hash=sha256:9efc0acbbffb5236fbdf0409c04edce96bec4bdaa649d49985427bd1ec73e085 \ + --hash=sha256:9ff730713d4c4f2f1c860e36c005c7cefc1c7c80c21c0688fd605aa43c9fcf09 \ + --hash=sha256:a6872d695c896f00df46b71648eea332279ef4077a409e2fe94220208b6bb675 \ + --hash=sha256:b198687ca9c8529662213538a9bb1e60fa0bf0f6af89292eb68fea28743fcd5a \ + --hash=sha256:b9d8c3187be7479ea5c3d30c32a5d73d62a621166675063b2edd21bc47614027 \ + --hash=sha256:ba24af48643b12ffe49b27065d3babd52702d95ab70f50e1b34f71ca703e2c0d \ + --hash=sha256:bb32dc743b52467d488e7a7c8039b821da2826a9ba4f85b89ea95274f863280f \ + --hash=sha256:bb3be958022198531eb7ec2008cfc78c5b1eed51af8600c6c5d9160d89d8d249 \ + --hash=sha256:bf5be867a0541a9fb47a4be0c5790a4bccd5b77b92f0a59eeec9375fafc2aa14 \ + --hash=sha256:c06f6f144ad0a1bf84699aeea7eff6068ca5c63ceb404798198af7eb86082e33 \ + --hash=sha256:c6da97aeb6a6d233fb6b17986234cc723b396b50a3c6804776351994f2a658fd \ + --hash=sha256:e0f51973ba93a9f97185049326d75b942b9aeb472bec616a129806facb129ebb \ + --hash=sha256:e1991bbb96f4050b09b5f811253c4f3cf05ee89a589379aa36cd623f21a31d6f \ + --hash=sha256:e5f08eb9a445d07720776df6e641975665c9ea12c9d8a331e0f6890f2dcd76ef \ + --hash=sha256:e78ad363ddb873a631e92a3c063ade1ecfb34cae71e9a2be6ad100f875ac1042 \ + --hash=sha256:ed16339bc354a73e0a609df36d256672c7d296f3f767ac07257801aa064ff73c \ + --hash=sha256:f4dd97c19bd06bc557ad787a15b6489d2614ddaab5d104a0310eb314c724b2d2 \ + --hash=sha256:f925f1ef673b4bd0271b1809b72b3270384f2b7d9d14a189b12b7fc02574d575 \ + --hash=sha256:f95a2aef32614ed86216d3c450ab12a4e82084e8102e355707a1d96e33d51c34 \ + --hash=sha256:fa07e138b3f6c04addfeaf56cc7fdb96c3b68a3fe5e5401251f231fce40a0d7a \ + --hash=sha256:fa35c266c8cd1a67d75971a1912b185b492d257092bdd2709bbdebe574ed228d + # via -r requirements.in +pyarrow==20.0.0 \ + --hash=sha256:00138f79ee1b5aca81e2bdedb91e3739b987245e11fa3c826f9e57c5d102fb75 \ + --hash=sha256:11529a2283cb1f6271d7c23e4a8f9f8b7fd173f7360776b668e509d712a02eec \ + --hash=sha256:15aa1b3b2587e74328a730457068dc6c89e6dcbf438d4369f572af9d320a25ee \ + --hash=sha256:1bcbe471ef3349be7714261dea28fe280db574f9d0f77eeccc195a2d161fd861 \ + --hash=sha256:204a846dca751428991346976b914d6d2a82ae5b8316a6ed99789ebf976551e6 \ + --hash=sha256:211d5e84cecc640c7a3ab900f930aaff5cd2702177e0d562d426fb7c4f737781 \ + --hash=sha256:24ca380585444cb2a31324c546a9a56abbe87e26069189e14bdba19c86c049f0 \ + --hash=sha256:2c3a01f313ffe27ac4126f4c2e5ea0f36a5fc6ab51f8726cf41fee4b256680bd \ + --hash=sha256:30b3051b7975801c1e1d387e17c588d8ab05ced9b1e14eec57915f79869b5031 \ + --hash=sha256:3346babb516f4b6fd790da99b98bed9708e3f02e734c84971faccb20736848dc \ + --hash=sha256:3e1f8a47f4b4ae4c69c4d702cfbdfe4d41e18e5c7ef6f1bb1c50918c1e81c57b \ + --hash=sha256:4250e28a22302ce8692d3a0e8ec9d9dde54ec00d237cff4dfa9c1fbf79e472a8 \ + --hash=sha256:4680f01ecd86e0dd63e39eb5cd59ef9ff24a9d166db328679e36c108dc993d4c \ + --hash=sha256:4a8b029a07956b8d7bd742ffca25374dd3f634b35e46cc7a7c3fa4c75b297191 \ + --hash=sha256:4ba3cf4182828be7a896cbd232aa8dd6a31bd1f9e32776cc3796c012855e1199 \ + --hash=sha256:5605919fbe67a7948c1f03b9f3727d82846c053cd2ce9303ace791855923fd20 \ + --hash=sha256:5f0fb1041267e9968c6d0d2ce3ff92e3928b243e2b6d11eeb84d9ac547308232 \ + --hash=sha256:6102b4864d77102dbbb72965618e204e550135a940c2534711d5ffa787df2a5a \ + --hash=sha256:6415a0d0174487456ddc9beaead703d0ded5966129fa4fd3114d76b5d1c5ceae \ + --hash=sha256:6bb830757103a6cb300a04610e08d9636f0cd223d32f388418ea893a3e655f1c \ + --hash=sha256:6fc1499ed3b4b57ee4e090e1cea6eb3584793fe3d1b4297bbf53f09b434991a5 \ + --hash=sha256:75a51a5b0eef32727a247707d4755322cb970be7e935172b6a3a9f9ae98404ba \ + --hash=sha256:7a3a5dcf54286e6141d5114522cf31dd67a9e7c9133d150799f30ee302a7a1ab \ + --hash=sha256:7f4c8534e2ff059765647aa69b75d6543f9fef59e2cd4c6d18015192565d2b70 \ + --hash=sha256:82f1ee5133bd8f49d31be1299dc07f585136679666b502540db854968576faf9 \ + --hash=sha256:851c6a8260ad387caf82d2bbf54759130534723e37083111d4ed481cb253cc0d \ + --hash=sha256:89e030dc58fc760e4010148e6ff164d2f44441490280ef1e97a542375e41058e \ + --hash=sha256:95b330059ddfdc591a3225f2d272123be26c8fa76e8c9ee1a77aad507361cfdb \ + --hash=sha256:96d6a0a37d9c98be08f5ed6a10831d88d52cac7b13f5287f1e0f625a0de8062b \ + --hash=sha256:96e37f0766ecb4514a899d9a3554fadda770fb57ddf42b63d80f14bc20aa7db3 \ + --hash=sha256:97c8dc984ed09cb07d618d57d8d4b67a5100a30c3818c2fb0b04599f0da2de7b \ + --hash=sha256:991f85b48a8a5e839b2128590ce07611fae48a904cae6cab1f089c5955b57eb5 \ + --hash=sha256:9965a050048ab02409fb7cbbefeedba04d3d67f2cc899eff505cc084345959ca \ + --hash=sha256:9b71daf534f4745818f96c214dbc1e6124d7daf059167330b610fc69b6f3d3e3 \ + --hash=sha256:a15532e77b94c61efadde86d10957950392999503b3616b2ffcef7621a002893 \ + --hash=sha256:a18a14baef7d7ae49247e75641fd8bcbb39f44ed49a9fc4ec2f65d5031aa3b96 \ + --hash=sha256:a1f60dc14658efaa927f8214734f6a01a806d7690be4b3232ba526836d216122 \ + --hash=sha256:a2791f69ad72addd33510fec7bb14ee06c2a448e06b649e264c094c5b5f7ce28 \ + --hash=sha256:a5704f29a74b81673d266e5ec1fe376f060627c2e42c5c7651288ed4b0db29e9 \ + --hash=sha256:a6ad3e7758ecf559900261a4df985662df54fb7fdb55e8e3b3aa99b23d526b62 \ + --hash=sha256:aa0d288143a8585806e3cc7c39566407aab646fb9ece164609dac1cfff45f6ae \ + --hash=sha256:b6953f0114f8d6f3d905d98e987d0924dabce59c3cda380bdfaa25a6201563b4 \ + --hash=sha256:b8ff87cc837601532cc8242d2f7e09b4e02404de1b797aee747dd4ba4bd6313f \ + --hash=sha256:c7dd06fd7d7b410ca5dc839cc9d485d2bc4ae5240851bcd45d85105cc90a47d7 \ + --hash=sha256:ca151afa4f9b7bc45bcc791eb9a89e90a9eb2772767d0b1e5389609c7d03db63 \ + --hash=sha256:cb497649e505dc36542d0e68eca1a3c94ecbe9799cb67b578b55f2441a247fbc \ + --hash=sha256:d5382de8dc34c943249b01c19110783d0d64b207167c728461add1ecc2db88e4 \ + --hash=sha256:db53390eaf8a4dab4dbd6d93c85c5cf002db24902dbff0ca7d988beb5c9dd15b \ + --hash=sha256:dd43f58037443af715f34f1322c782ec463a3c8a94a85fdb2d987ceb5658e061 \ + --hash=sha256:e22f80b97a271f0a7d9cd07394a7d348f80d3ac63ed7cc38b6d1b696ab3b2619 \ + --hash=sha256:e724a3fd23ae5b9c010e7be857f4405ed5e679db5c93e66204db1a69f733936a \ + --hash=sha256:e8b88758f9303fa5a83d6c90e176714b2fd3852e776fc2d7e42a22dd6c2fb368 \ + --hash=sha256:f2d67ac28f57a362f1a2c1e6fa98bfe2f03230f7e15927aecd067433b1e70ce8 \ + --hash=sha256:f3b117b922af5e4c6b9a9115825726cac7d8b1421c37c2b5e24fbacc8930612c \ + --hash=sha256:febc4a913592573c8d5805091a6c2b5064c8bd6e002131f01061797d91c783c1 + # via -r requirements.in pydantic==2.11.3 \ --hash=sha256:7471657138c16adad9322fe3070c0116dd6c3ad8d649300e3cbdfe91f4db4ec3 \ --hash=sha256:a082753436a07f9ba1289c6ffa01cd93db3548776088aa917cc43b63f68fa60f @@ -166,6 +320,18 @@ pydantic-core==2.33.1 \ --hash=sha256:fc903512177361e868bc1f5b80ac8c8a6e05fcdd574a5fb5ffeac5a9982b9e89 \ --hash=sha256:fe44d56aa0b00d66640aa84a3cbe80b7a3ccdc6f0b1ca71090696a6d4777c091 # via pydantic +python-dateutil==2.9.0.post0 \ + --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \ + --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 + # via pandas +pytz==2025.2 \ + --hash=sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3 \ + --hash=sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00 + # via pandas +six==1.17.0 \ + --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \ + --hash=sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81 + # via python-dateutil typing-extensions==4.13.2 \ --hash=sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c \ --hash=sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef @@ -177,3 +343,7 @@ typing-inspection==0.4.0 \ --hash=sha256:50e72559fcd2a6367a19f7a7e610e6afcb9fac940c650290eed893d61386832f \ --hash=sha256:9765c87de36671694a67904bf2c96e395be9c6439bb6c87b5142569dcdd65122 # via pydantic +tzdata==2025.2 \ + --hash=sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8 \ + --hash=sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9 + # via pandas diff --git a/examples/podcast_reviews/test_jobs.py b/examples/podcast_reviews/test_jobs.py new file mode 100755 index 0000000..2a0c9c1 --- /dev/null +++ b/examples/podcast_reviews/test_jobs.py @@ -0,0 +1,212 @@ +#!/usr/bin/env python3 +""" +Basic tests for podcast reviews jobs. +Tests the configuration and basic execution flow of each job. +""" + +import os +import sys +import subprocess +import tempfile +import shutil +import json +from pathlib import Path + +def run_job_config(job_script: str, partition_ref: str): + """Run a job in config mode and return the parsed config.""" + cmd = [sys.executable, job_script, "config", partition_ref] + result = subprocess.run(cmd, capture_output=True, text=True) + + if result.returncode != 0: + raise Exception(f"Config failed for {job_script}: {result.stderr}") + + return json.loads(result.stdout) + +def test_extract_reviews_job(): + """Test extract_reviews_job configuration.""" + print("Testing extract_reviews_job...") + + config = run_job_config("extract_reviews_job.py", "reviews/date=2020-01-01") + + assert len(config["configs"]) == 1 + job_config = config["configs"][0] + + assert job_config["outputs"] == [{"str": "reviews/date=2020-01-01"}] + assert job_config["inputs"] == [] + assert job_config["args"] == ["2020-01-01"] + assert job_config["env"]["TARGET_DATE"] == "2020-01-01" + + print("✓ extract_reviews_job config test passed") + +def test_extract_podcasts_job(): + """Test extract_podcasts_job configuration.""" + print("Testing extract_podcasts_job...") + + config = run_job_config("extract_podcasts_job.py", "podcasts/all") + + assert len(config["configs"]) == 1 + job_config = config["configs"][0] + + assert job_config["outputs"] == [{"str": "podcasts/all"}] + assert job_config["inputs"] == [] + assert job_config["args"] == [] + assert job_config["env"]["PARTITION_REF"] == "podcasts/all" + + print("✓ extract_podcasts_job config test passed") + +def test_categorize_reviews_job(): + """Test categorize_reviews_job configuration.""" + print("Testing categorize_reviews_job...") + + config = run_job_config("categorize_reviews_job.py", "categorized_reviews/category=comedy/date=2020-01-01") + + assert len(config["configs"]) == 1 + job_config = config["configs"][0] + + assert job_config["outputs"] == [{"str": "categorized_reviews/category=comedy/date=2020-01-01"}] + assert len(job_config["inputs"]) == 2 + + input_refs = [inp["partition_ref"]["str"] for inp in job_config["inputs"]] + assert "reviews/date=2020-01-01" in input_refs + assert "podcasts/all" in input_refs + + assert job_config["args"] == ["comedy", "2020-01-01"] + assert job_config["env"]["TARGET_CATEGORY"] == "comedy" + assert job_config["env"]["TARGET_DATE"] == "2020-01-01" + + print("✓ categorize_reviews_job config test passed") + +def test_phrase_modeling_job(): + """Test phrase_modeling_job configuration.""" + print("Testing phrase_modeling_job...") + + config = run_job_config("phrase_modeling_job.py", "phrase_models/category=comedy/date=2020-01-01") + + assert len(config["configs"]) == 1 + job_config = config["configs"][0] + + assert job_config["outputs"] == [{"str": "phrase_models/category=comedy/date=2020-01-01"}] + assert len(job_config["inputs"]) == 1 + assert job_config["inputs"][0]["partition_ref"]["str"] == "categorized_reviews/category=comedy/date=2020-01-01" + + assert job_config["args"] == ["comedy", "2020-01-01"] + assert job_config["env"]["TARGET_CATEGORY"] == "comedy" + assert job_config["env"]["TARGET_DATE"] == "2020-01-01" + + print("✓ phrase_modeling_job config test passed") + +def test_phrase_stats_job(): + """Test phrase_stats_job configuration.""" + print("Testing phrase_stats_job...") + + config = run_job_config("phrase_stats_job.py", "phrase_stats/category=comedy/date=2020-01-01") + + assert len(config["configs"]) == 1 + job_config = config["configs"][0] + + assert job_config["outputs"] == [{"str": "phrase_stats/category=comedy/date=2020-01-01"}] + assert len(job_config["inputs"]) == 2 + + input_refs = [inp["partition_ref"]["str"] for inp in job_config["inputs"]] + assert "phrase_models/category=comedy/date=2020-01-01" in input_refs + assert "categorized_reviews/category=comedy/date=2020-01-01" in input_refs + + assert job_config["args"] == ["comedy", "2020-01-01"] + assert job_config["env"]["TARGET_CATEGORY"] == "comedy" + assert job_config["env"]["TARGET_DATE"] == "2020-01-01" + + print("✓ phrase_stats_job config test passed") + +def test_daily_summary_job(): + """Test daily_summary_job configuration.""" + print("Testing daily_summary_job...") + + config = run_job_config("daily_summary_job.py", "daily_summaries/category=comedy/date=2020-01-01") + + assert len(config["configs"]) == 1 + job_config = config["configs"][0] + + assert job_config["outputs"] == [{"str": "daily_summaries/category=comedy/date=2020-01-01"}] + assert len(job_config["inputs"]) == 2 + + input_refs = [inp["partition_ref"]["str"] for inp in job_config["inputs"]] + assert "phrase_stats/category=comedy/date=2020-01-01" in input_refs + assert "categorized_reviews/category=comedy/date=2020-01-01" in input_refs + + assert job_config["args"] == ["comedy", "2020-01-01"] + assert job_config["env"]["TARGET_CATEGORY"] == "comedy" + assert job_config["env"]["TARGET_DATE"] == "2020-01-01" + + print("✓ daily_summary_job config test passed") + +def test_job_lookup(): + """Test job_lookup functionality.""" + print("Testing job_lookup...") + + test_cases = [ + ("reviews/date=2020-01-01", ":extract_reviews_job"), + ("podcasts/all", ":extract_podcasts_job"), + ("categorized_reviews/category=comedy/date=2020-01-01", ":categorize_reviews_job"), + ("phrase_models/category=comedy/date=2020-01-01", ":phrase_modeling_job"), + ("phrase_stats/category=comedy/date=2020-01-01", ":phrase_stats_job"), + ("daily_summaries/category=comedy/date=2020-01-01", ":daily_summary_job"), + ] + + for partition_ref, expected_job_label in test_cases: + cmd = [sys.executable, "job_lookup.py", partition_ref] + result = subprocess.run(cmd, capture_output=True, text=True) + + if result.returncode != 0: + raise Exception(f"Job lookup failed for {partition_ref}: {result.stderr}") + + response = json.loads(result.stdout) + # New format: {job_label: [partition_refs]} + assert expected_job_label in response + assert partition_ref in response[expected_job_label] + + print("✓ job_lookup test passed") + +def test_invalid_partition_refs(): + """Test that invalid partition refs are handled properly.""" + print("Testing invalid partition refs...") + + invalid_refs = [ + "invalid/ref", + "reviews/date=invalid-date", + "categorized_reviews/category=/date=2020-01-01", # missing category + "unknown/partition=ref", + ] + + for invalid_ref in invalid_refs: + cmd = [sys.executable, "job_lookup.py", invalid_ref] + result = subprocess.run(cmd, capture_output=True, text=True) + + # Should fail for invalid refs + assert result.returncode != 0, f"Expected failure for invalid ref: {invalid_ref}" + + print("✓ invalid partition refs test passed") + +def main(): + """Run all tests.""" + print("Running podcast reviews job tests...") + print("=" * 50) + + try: + test_extract_reviews_job() + test_extract_podcasts_job() + test_categorize_reviews_job() + test_phrase_modeling_job() + test_phrase_stats_job() + test_daily_summary_job() + test_job_lookup() + test_invalid_partition_refs() + + print("=" * 50) + print("All tests passed! ✅") + + except Exception as e: + print(f"Test failed: {e}") + sys.exit(1) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/examples/podcast_reviews/unified_job.py b/examples/podcast_reviews/unified_job.py new file mode 100644 index 0000000..f482db9 --- /dev/null +++ b/examples/podcast_reviews/unified_job.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python3 + +import sys +import json + +def main(): + if len(sys.argv) < 2: + print("Usage: unified_job.py {config|exec} [args...]", file=sys.stderr) + sys.exit(1) + + command = sys.argv[1] + + if command == "config": + handle_config(sys.argv[2:]) + elif command == "exec": + handle_exec(sys.argv[2:]) + else: + print(f"Unknown command: {command}", file=sys.stderr) + print("Usage: unified_job.py {config|exec} [args...]", file=sys.stderr) + sys.exit(1) + +def handle_config(args): + if len(args) < 1: + print("Config mode requires partition ref", file=sys.stderr) + sys.exit(1) + + partition_ref = args[0] + + config = { + "configs": [{ + "outputs": [{"str": partition_ref}], + "inputs": [], + "args": ["Hello", "gorgeous", partition_ref], + "env": {"PARTITION_REF": partition_ref} + }] + } + + print(json.dumps(config)) + +def handle_exec(args): + print("What a time to be alive.") + print(f"Partition ref: {os.getenv('PARTITION_REF', 'unknown')}") + print(f"Args: {args}") + +if __name__ == "__main__": + import os + main() \ No newline at end of file