protocrap 0.3.2

A small, efficient, and flexible protobuf implementation
Documentation
module(
    name = "protocrap",
    version = "0.3.0",
)

bazel_dep(name = "bazel_skylib", version = "1.7.1")
bazel_dep(name = "protobuf", version = "30.0")
bazel_dep(name = "rules_rust", version = "0.68.1")
bazel_dep(name = "rules_rust_prost", version = "0.68.1")

# Use main branch - it doesn't have the rules_ruby issue
git_override(
    module_name = "protobuf",
    remote = "https://github.com/protocolbuffers/protobuf.git",
    commit = "dd7c6f852f4c7ad38061f04701c470a60fd0f22a",
    patches = ["//patches:protobuf_test_messages_visibility.patch"],
    patch_strip = 1,
)

# Rust toolchain - need 1.85+ for edition 2024
rust = use_extension("@rules_rust//rust:extensions.bzl", "rust")
rust.toolchain(
    edition = "2024",
    versions = ["1.91.1"],
)
use_repo(rust, "rust_toolchains")
register_toolchains("@rust_toolchains//:all")

# Custom prost toolchain using our crate.spec prost
register_toolchains("//bazel:prost_toolchain")

# Direct crate dependencies
crate = use_extension("@rules_rust//crate_universe:extension.bzl", "crate")

crate.spec(package = "allocator-api2", version = "0.2")
crate.spec(package = "anyhow", version = "1.0")
crate.spec(package = "base64", version = "0.22")
crate.spec(package = "byteorder", version = "1.5")
crate.spec(package = "criterion", version = "0.5")
crate.spec(package = "futures", version = "0.3")
crate.spec(package = "prettyplease", version = "0.2")
crate.spec(package = "proc-macro2", version = "1.0")
crate.spec(package = "quote", version = "1.0")
crate.spec(package = "rand", version = "0.8")
crate.spec(package = "serde", version = "1.0", features = ["derive"])
crate.spec(package = "serde_json", version = "1.0")
crate.spec(package = "syn", version = "2.0", features = ["full", "parsing"])
crate.spec(package = "time", version = "0.3", features = ["formatting", "parsing", "macros"])

# Prost for benchmark comparison
crate.spec(package = "prost", version = "0.13")
crate.spec(package = "prost-types", version = "0.13")
crate.annotation(crate = "protoc-gen-prost", gen_binaries = ["protoc-gen-prost"])
crate.spec(package = "protoc-gen-prost", version = "0.4")

# Bootstrap: published protocrap for verifying codegen compatibility (always latest)
crate.spec(package = "protocrap", version = "*")

crate.from_specs(name = "crates")

use_repo(crate, "crates")