3 个版本 (破坏性)
0.3.0 | 2024年3月5日 |
---|---|
0.2.0 | 2023年5月30日 |
0.1.0 | 2023年2月22日 |
#228 在 解析器实现
101,353 每月下载量
用于 4 个crate (2 直接)
42KB
827 行
protoc-prebuilt
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();
}
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_PROXY
、HTTPS_PROXY
及其小写类似项。
要使用curl
协议禁用代理使用,可以将github.com
(绕过代理下载资产)、api.github.com
(绕过代理检查版本是否存在)、.github.com
(绕过两种情况下的代理)添加到NO_PROXY
或no_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