Skip to main content

Module type_registry

Module type_registry 

Source
Available on crate features json or text only.
Expand description

Unified type registry for Any expansion and extension brackets — JSON + text.

google.protobuf.Any in both proto3 JSON and textproto needs to know how to serialize the embedded message by its type URL. Extension fields in both formats likewise need a lookup by (extendee, number) or [full_name]. This module is the single install point for both formats: populate a TypeRegistry with generated register_types(&mut reg) calls, then set_type_registry once at startup.

The per-format entry types are feature-split so that json and text are independently enableable — no #[cfg] on struct-literal fields, no Option<fn> placeholders, no cross-feature implication.

§Usage

use buffa::type_registry::{TypeRegistry, set_type_registry};

let mut reg = TypeRegistry::new();
// Per generated file — registers JSON entries (if generate_json was on)
// and text entries (if generate_text was on), as appropriate:
// my_pkg::register_types(&mut reg);
// Well-known types (hand-registered in buffa-types):
// buffa_types::register_wkt_types(&mut reg);
set_type_registry(reg);

§Codegen helpers

any_to_json / any_from_json (under json) and any_encode_text / any_merge_text (under text) are generic function pointers emitted by codegen into each message’s entry consts. They compose Message::decode_from_slice / encode_to_vec with the message’s own Serialize/Deserialize or TextFormat impl.

Re-exports§

pub use crate::any_registry::JsonAnyEntry;json
pub use crate::extension_registry::JsonExtEntry;json

Structs§

TextAnyEntrytext
Registry entry for a single message type’s textproto ↔ Any conversion.
TextExtEntrytext
Registry entry for a single extension field’s textproto conversion.
TypeRegistry
Unified registry: JSON Any + extension entries (under json) and text Any + extension entries (under text).

Functions§

any_encode_texttext
Any.value bytes → textproto: decode M, write its fields as a { ... } message body.
any_from_jsonjson
JSON → Any.value bytes: deserialize M via its Deserialize impl, then encode to wire bytes.
any_merge_texttext
Textproto { ... } body → Any.value bytes: merge into a fresh M, re-encode to wire bytes.
any_to_jsonjson
Any.value bytes → JSON: decode M from wire bytes, then serialize via M’s own Serialize impl.
group_encode_texttext
Textproto encode for a group-encoded extension. Identical body to message_encode_text on the encode side — only the wire-type of the stored unknown field differs (Group vs LengthDelimited).
group_merge_texttext
Textproto merge for a group-encoded extension: consume { ... }, re-encode the message’s fields into a Group(UnknownFields) record.
message_encode_texttext
Textproto encode for a message-typed extension: decode M from the unknown fields (merge semantics), write as a { ... } message body.
message_merge_texttext
Textproto merge for a message-typed extension: consume { ... }, re-encode to a LengthDelimited unknown-field record.
set_json_registryDeprecated
Deprecated: call set_type_registry. This alias exists for one release cycle to ease migration; the registry now covers text entries too.
set_type_registry
Install the global type registry.

Type Aliases§

AnyTextMergeFntext
TextAnyEntry::text_merge fn-pointer type (factored out for clippy’s type_complexity).
AnyTypeEntryDeprecatedjson
Deprecated alias for JsonAnyEntry. Retained for one release cycle.
ExtTextMergeFntext
TextExtEntry::text_merge fn-pointer type.
ExtensionRegistryEntryDeprecatedjson
Deprecated alias for JsonExtEntry. Retained for one release cycle.
JsonRegistryDeprecated
Deprecated alias for TypeRegistry. The registry now covers both JSON and text formats.