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.


pydantic_to_protobuf(pydantic_model, descriptor_bytes, message_type)

Convert a Pydantic model directly to a Protobuf message.

Parameter Type Description
pydantic_model BaseModel Pydantic model instance 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_pydantic(protobuf_bytes, descriptor_bytes, model_class, message_type)

Convert a Protobuf message directly to a Pydantic model instance.

Parameter Type Description
protobuf_bytes bytes Protobuf message as bytes
descriptor_bytes bytes Compiled protobuf descriptor set
model_class Type[T] The Pydantic model class to instantiate
message_type str Full message type name (e.g. "message.Message")

Returns: T — An instance of the specified Pydantic model class.

Usage with Pydantic

protoruf provides built-in functions for seamless Pydantic integration:

from pydantic import BaseModel
from protoruf import compile_proto, pydantic_to_protobuf, protobuf_to_pydantic

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

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

# Direct conversion from Pydantic to Protobuf
protobuf_bytes = pydantic_to_protobuf(msg, descriptor, message_type="message.Message")

# Direct conversion from Protobuf back to Pydantic
result = protobuf_to_pydantic(protobuf_bytes, descriptor, Message, 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.5.tar.gz (641.0 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.5-cp312-cp312-win_amd64.whl (1.0 MB view details)

Uploaded CPython 3.12Windows x86-64

protoruf-0.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

protoruf-0.1.5-cp312-cp312-macosx_11_0_arm64.whl (1.1 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: protoruf-0.1.5.tar.gz
  • Upload date:
  • Size: 641.0 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.5.tar.gz
Algorithm Hash digest
SHA256 21384b8a34c0fc422e050251adfb161e0d2a64428e59b95cc19c44da04f64bd2
MD5 25b2027ffa880bafa12a58d172e934b4
BLAKE2b-256 6ae7f477878d21659eb3bb061ea9fcdfeb5c809f18320197ab61684a7670a128

See more details on using hashes here.

Provenance

The following attestation bundles were made for protoruf-0.1.5.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.5-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: protoruf-0.1.5-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 1.0 MB
  • 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.5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 fb4d0f1f13cda18d057c715825db7da757abf53d0af71923fe66cc877d31d1d8
MD5 749d62442e3f33d5ad346dc04ee99514
BLAKE2b-256 bf64e68b42918c640ac9a846653feaf6a719968a3be196d6c8a69ef7f47f898f

See more details on using hashes here.

Provenance

The following attestation bundles were made for protoruf-0.1.5-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.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for protoruf-0.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1b29e0b160b9f6c4f4bf20af43b11ad0fe4cd192ad38ccdbbcba387f57e29206
MD5 5589758bdfde81ad39c36be81c043fbf
BLAKE2b-256 dbb9df676b3bf7aa94e5a35757ab91663d8cc1ae3258f86e8ee38261370777fd

See more details on using hashes here.

Provenance

The following attestation bundles were made for protoruf-0.1.5-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.5-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for protoruf-0.1.5-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7221dc96139fec6026f6cb2039af20c38ba4f20e8d2c6ffb1b67a20552cbba27
MD5 8869b6ed3615a0ab53022d6e04b84564
BLAKE2b-256 3bcbeac565a06bf9a0488a6b08d97a6b4c56044f95e5e881433515041ffea76a

See more details on using hashes here.

Provenance

The following attestation bundles were made for protoruf-0.1.5-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