#protobuf-compiler #protobuf #protoc #api-bindings

protoc-prebuilt

Protobuf 编译器 protoc 预编译二进制安装程序

3 个版本 (破坏性)

0.3.0 2024年3月5日
0.2.0 2023年5月30日
0.1.0 2023年2月22日

#228解析器实现

Download history 15513/week @ 2024-04-22 15249/week @ 2024-04-29 14648/week @ 2024-05-06 15859/week @ 2024-05-13 14711/week @ 2024-05-20 15085/week @ 2024-05-27 24013/week @ 2024-06-03 31472/week @ 2024-06-10 21981/week @ 2024-06-17 23937/week @ 2024-06-24 27640/week @ 2024-07-01 31812/week @ 2024-07-08 24518/week @ 2024-07-15 23581/week @ 2024-07-22 23893/week @ 2024-07-29 26458/week @ 2024-08-05

101,353 每月下载量
用于 4 个crate (2 直接)

MIT 许可证

42KB
827

protoc-prebuilt

crates.io docs.rs license

Protobuf 编译器 protoc 预编译二进制安装程序。

使用库的crate中存储安装的二进制文件在 OUT_DIR

用法

库导出 init 函数,该函数接受 version 参数。版本参数应该是 protobuf 仓库中的标签名称,不带 v 前缀,例如,"21.12" 或 "22.0-rc3"(见 protobuf 仓库标签)。函数返回一个包含 protoc 二进制文件和 include 目录路径的元组。

在以下示例中提供了不同生成器的 build.rs 脚本内容。例如,我们有以下简化的项目结构,包含 protobuf 文件

src/
    proto/
          apple.proto
          orange.proto
build.rs

使用 prost-build

use prost_build::compile_protos;
use protoc_prebuilt::init;
use std::env::set_var;

fn main() {
  let (protoc_bin, _) = init("22.0").unwrap();
  set_var("PROTOC", protoc_bin);

  compile_protos(
    &["src/proto/apple.proto", "src/proto/orange.proto"],
    &["src/proto"]
  ).unwrap();
}

使用 protobuf-codegen

use protobuf_codegen::Codegen;
use protoc_prebuilt::init;
use std::env::set_var;

fn main() {
  let (protoc_bin, _) = init("22.0").unwrap();

  Codegen::new()
    .protoc()
    .protoc_path(&protoc_bin)
    .includes(&["src/proto"])
    .inputs(&["src/proto/apple.proto", "src/proto/orange.proto"])
    .cargo_out_dir("proto")
    .run_from_script();
}

GitHub API 限制

为了避免 GitHub API 限制,库将 Authorization 头添加到 API 请求中,其中包含 GITHUB_TOKEN 环境变量的内容。

要防止此行为,将 PROTOC_PREBUILT_NOT_ADD_GITHUB_TOKEN 环境变量设置为任何值以减少到 true(见来源中的 var_bool 函数)。

要强制此库使用来自另一个环境变量的授权令牌,将其名称设置为 PROTOC_PREBUILT_GITHUB_TOKEN_ENV_NAME 环境变量。

使用自定义 protobuf 安装

如果您有自定义 protobuf 安装并需要使用此安装的版本,请使用以下环境变量来更改默认行为

  • PROTOC_PREBUILT_FORCE_PROTOC_PATH 以设置强制使用从该变量值的 protoc 二进制文件路径,如果该变量存在,则 protoc-prebuilt 不会从 GitHub 下载 protobuf;

  • PROTOC_PREBUILT_FORCE_INCLUDE_PATH 以设置强制使用从该变量的 includes 目录路径,如果该变量不存在,则 protoc-prebuilt 将根据版本自行从 protoc 二进制文件路径计算 includes 目录路径(见来源中的 get_include_path 函数)。

使用 HTTP 代理请求 GitHub API

要设置HTTP代理,请使用与curl相同的环境变量,使用protoc-prebuilt。库使用HTTP_PROXYHTTPS_PROXY及其小写类似项。

要使用curl协议禁用代理使用,可以将github.com(绕过代理下载资产)、api.github.com(绕过代理检查版本是否存在)、.github.com(绕过两种情况下的代理)添加到NO_PROXYno_proxy环境变量。

要禁用protoc-prebuilt中任何代理的使用,将PROTOC_PREBUILT_NOT_USE_PROXY环境变量设置为任何降低到true的值(参见源中的var_bool函数)。

版本检查

安装后,使用带有"--version"参数的protoc二进制文件运行protoc-prebuilt,并将结果与所需版本进行比较。这需要确保安装正确,并检查自定义protobuf安装的版本。

如果您需要禁用此行为,将PROTOC_PREBUILT_NOT_CHECK_VERSION环境变量设置为任何降低到true的值(参见源中的var_bool函数)。

与类似产品的比较

  • protoc-bin-vendored将预构建的protobuf编译器存储在依赖项crates中,因此您不能使用最新版本或指定编译器的版本,除非它由crates作者提供;
  • protobuf-src从源代码构建protobuf编译器,它不支持windows目标,并且编译器版本是硬编码的,因此您不能使用指定版本。

依赖关系

~10–18MB
~349K SLoC