Codync
免費、開源的 1:1 替代方案,取代 Grok Bot 與 Muse。從 iPhone、Mac 或 Linux 桌面將 Claude Code、Codex、Cursor 與 40+ 程式碼代理人作為持續機器人傳訊。群組聊天、主題串…
AI 翻譯
Decodes and encodes Protocol Buffers messages from descriptor sets rather than generated code. One message becomes a named list; many messages become a data frame built column by column. Uses a bundle
翻譯準備中
開發工具C · RGitHub @pedrobtz上線中營運者未確認
試用過了嗎? 點一下就好,不需要登入。
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Decodes and encodes Protocol Buffers messages from descriptor sets rather than generated code. One message becomes a named list; many messages become a data frame built column by column. Uses a bundled copy of the upb runtime (<https://github.com/protocolbuffers/protobuf>), so no system protobuf library is required. Schemas are compiled into descriptor sets beforehand, with protoc or buf.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Protocol Buffers is a binary format for structured data. gRPC APIs, Kafka topics, transit feeds, telemetry pipelines and machine-learning datasets all use it. Its bytes mean nothing without the schema that describes them, and reading them in R has meant installing the C++ protobuf library and handling each message as its own object.
zuproto reads and writes any protobuf message in R. It works from the compiled schema, and turns thousands of messages into one data frame.
protoc --descriptor_set_out or buf build writes
it, and it decodes and encodes every type in it.libprotobuf, Abseil or other R package to install or
run. protoc or buf is needed only once, to compile your schema.Timestamp is
POSIXct, Duration is difftime, and 64-bit integers can stay
exact.zuproto is not on CRAN yet. Once it is, install it with:
install.packages("zuproto")
Until then, install the development version from GitHub:
# install.packages("pak")
pak::pak("pedrobtz/zuproto")
library(zuproto)
A pool holds the message types zuproto knows. Every pool starts with protobuf’s well-known types:
pool <- proto_pool()
pool
#> <proto_pool: 11 files, 61 message types>
R values become messages and back. A Timestamp is a POSIXct, and a
Struct is a named list:
when <- as.POSIXct("2026-10-27 15:36:18", tz = "UTC")
bytes <- proto_encode(when, "google.protobuf.Timestamp", pool)
bytes
#> [1] 08 f2 89 83 d7 06
proto_decode(bytes, "google.protobuf.Timestamp", pool)
#> [1] "2026-10-27 15:36:18 UTC"
bytes <- proto_encode(
list(station = "Bern", platform = 7, delayed = TRUE),
"google.protobuf.Struct",
pool
)
str(proto_decode(bytes, "google.protobuf.Struct", pool))
#> List of 3
#> $ delayed : logi TRUE
#> $ platform: num 7
#> $ station : chr "Bern"
Protobuf’s JSON mapping goes both ways. A Timestamp is an RFC 3339
string in JSON:
json <- proto_to_json(
proto_encode(when, "google.protobuf.Timestamp", pool),
"google.protobuf.Timestamp",
pool
)
json
#> [1] "\"2026-10-27T15:36:18Z\""
proto_decode(
proto_from_json(json, "google.protobuf.Timestamp", pool),
"google.protobuf.Timestamp",
pool
)
#> [1] "2026-10-27 15:36:18 UTC"
Many messages become a data frame. A descriptor set is itself a protobuf
message, a FileDescriptorSet, so the one zuproto ships for the
well-known types can be read as a table. Each row is a .proto file,
with the number of message types it defines at the top level:
wkt <- system.file("descriptors", "wkt.binpb", package = "zuproto")
files <- proto_decode_df(
wkt,
"google.protobuf.FileDescriptorSet",
pool,
field = "file"
)
data.frame(
name = files$name,
messages = vapply(files$message_type, NROW, integer(1))
)
#> name messages
#> 1 google/protobuf/any.proto 1
#> 2 google/protobuf/source_context.proto 1
#> 3 google/protobuf/type.proto 5
#> 4 google/protobuf/api.proto 3
#> 5 google/protobuf/descriptor.proto 23
#> 6 google/protobuf/duration.proto 1
#> 7 google/protobuf/empty.proto 1
#> 8 google/protobuf/field_mask.proto 1
#> 9 google/protobuf/struct.proto 3
#> 10 google/protobuf/timestamp.proto 1
#> 11 google/protobuf/wrappers.proto 9
Your own schema goes in the same way. Compile it once with protoc or
buf, then load the descriptor set. Here it is with the live trip
updates for Switzerland’s public transport, in the GTFS Realtime format.
The code is not run here; the output is from 27 October 2026:
pool <- proto_pool("gtfs-realtime.binpb")
trips <- proto_decode_df(
"trip-updates.binpb",
"transit_realtime.FeedMessage",
pool,
field = "entity"
)
table(trips$trip_update$trip$schedule_relationship)[1:4]
#>
#> SCHEDULED ADDED UNSCHEDULED CANCELED
#> 15187 245 0 144
Every function that converts a message takes the value, the message type’s full name and the pool, in that order.
?proto_decode maps protobuf types to R types,
?proto_decode_df says how fields become columns, and
?zuproto-conditions lists the errors and warnings.zuproto bundles upb and utf8_range from
protobuf v36.2. Its CI
runs protobuf’s conformance test suite, with the tests zuproto is
expected to fail listed and explained, and the test fixtures come from
Python’s protobuf.
RProtoBuf binds the C++
protobuf library and handles each message as an object.
protolite serialises a
fixed set of schemas: R objects, GeoJSON and Mapbox vector tiles.