Skip to main content

A Python library written in Rust for JSON/Protobuf conversion

Project description

protoruf

protoruf logo

High-performance JSON ↔ Protobuf conversion for Python, powered by Rust

📖 Documentation💻 Source🐛 Issues


A high-performance Python library written in Rust for converting between JSON and Protobuf messages.

Features

  • Fast — JSON ↔ Protobuf conversion powered by Rust
  • 🔒 Type-safe — Explicit message type specification
  • 📦 Built-in proto compilation — Uses Rust protox, no external dependencies

Installation

pip install protoruf

Quick Start

from protoruf import json_to_protobuf, protobuf_to_json, compile_proto

# 1. Compile your .proto file
descriptor = compile_proto("message.proto")

# 2. Convert JSON to Protobuf
json_data = '{"id": "123", "content": "Hello", "priority": 1}'
protobuf_bytes = json_to_protobuf(json_data, descriptor, message_type="message.Message")

# 3. Convert Protobuf back to JSON
json_str = protobuf_to_json(protobuf_bytes, descriptor, message_type="message.Message", pretty=True)
print(json_str)

API Reference

compile_proto(proto_path, include_paths=None, output_path=None)

Compile a .proto file to a descriptor set.

Parameter Type Description
proto_path str Path to the .proto file
include_paths list[str] | None Optional include paths for imports
output_path str | None Optional path to save the descriptor

Returns: bytes — The compiled descriptor set.


load_descriptor(descriptor_path)

Load a pre-compiled descriptor set from a file.

Parameter Type Description
descriptor_path str Path to the .desc file

Returns: bytes — The descriptor set.


json_to_protobuf(json_str, descriptor_bytes, message_type)

Convert a JSON string to a Protobuf message.

Parameter Type Description
json_str str JSON string to convert
descriptor_bytes bytes Compiled protobuf descriptor set
message_type str Full message type name (e.g. "message.Message")

Returns: bytes — The Protobuf message.


protobuf_to_json(protobuf_bytes, descriptor_bytes, message_type, pretty=False)

Convert a Protobuf message to a JSON string.

Parameter Type Description
protobuf_bytes bytes Protobuf message as bytes
descriptor_bytes bytes Compiled protobuf descriptor set
message_type str Full message type name (e.g. "message.Message")
pretty bool If True, format JSON with indentation

Returns: str — The JSON representation.

Usage with Pydantic

from pydantic import BaseModel
from protoruf import compile_proto, json_to_protobuf, protobuf_to_json

class Message(BaseModel):
    id: str = ""
    content: str = ""
    priority: int = 0

descriptor = compile_proto("message.proto")
msg = Message(id="123", content="Hello", priority=1)

protobuf_bytes = json_to_protobuf(msg.model_dump_json(), descriptor, message_type="message.Message")
result = protobuf_to_json(protobuf_bytes, descriptor, message_type="message.Message")

Links

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

protoruf-0.1.2.tar.gz (628.5 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

protoruf-0.1.2-cp312-cp312-win_amd64.whl (861.7 kB view details)

Uploaded CPython 3.12Windows x86-64

protoruf-0.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

protoruf-0.1.2-cp312-cp312-macosx_11_0_arm64.whl (956.6 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

File details

Details for the file protoruf-0.1.2.tar.gz.

File metadata

  • Download URL: protoruf-0.1.2.tar.gz
  • Upload date:
  • Size: 628.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for protoruf-0.1.2.tar.gz
Algorithm Hash digest
SHA256 d659200a8b904f3375c91c74e62a7c855fa15f191cb04cf0db62cdfbe7596279
MD5 8574ecc1f0593e8c39aec8df68f34280
BLAKE2b-256 b32e9aee91ed6e8adf58d3e4f5da1e7ee758ef88ff3755c31bd15e4456a23316

See more details on using hashes here.

Provenance

The following attestation bundles were made for protoruf-0.1.2.tar.gz:

Publisher: publish-pypi.yml on EdwinAlkins/protoruf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file protoruf-0.1.2-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: protoruf-0.1.2-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 861.7 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for protoruf-0.1.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 e2d950a95ec9f40834d476af6079774ad713fc77bd6edf8e5214e67df2e3a856
MD5 0d81d5e274246d029a9910a80059c634
BLAKE2b-256 72591171e0562e65613fd153e8635daea1fb5534395263c531d174831a33bc6d

See more details on using hashes here.

Provenance

The following attestation bundles were made for protoruf-0.1.2-cp312-cp312-win_amd64.whl:

Publisher: publish-pypi.yml on EdwinAlkins/protoruf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file protoruf-0.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for protoruf-0.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 927838e8492f01f10bfbf6094375e69701c9a593b1116e2ff896f7945afd59b1
MD5 330555404857980ddc1f6cf6a6674c90
BLAKE2b-256 05d5f90faac63185cd4a2b1f95535bb13e6ca91f9bd6b28790d957196a8e9a8e

See more details on using hashes here.

Provenance

The following attestation bundles were made for protoruf-0.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish-pypi.yml on EdwinAlkins/protoruf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file protoruf-0.1.2-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for protoruf-0.1.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f9500cd063b9aba72b39a94e24a3423da1078ee418b1b3c29c025f061aa9cfea
MD5 9d1f850d5bbe8ae5740379edf2918464
BLAKE2b-256 8a8f437c7adc1c39357dd64b9ac0f567602d503eb7233b376f9975fc413f141a

See more details on using hashes here.

Provenance

The following attestation bundles were made for protoruf-0.1.2-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: publish-pypi.yml on EdwinAlkins/protoruf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page