buffa_reflect/dynamic/mod.rs
1//! Runtime-typed protobuf messages keyed by [`crate::MessageDescriptor`].
2//!
3//! Phase 2a delivers [`DynamicMessage`] — a message whose field set is
4//! discovered at runtime from a descriptor. Use it when the wire schema is
5//! known but the Rust type is not (e.g. proto-aware proxies, schema
6//! migration tools, generic CLIs).
7//!
8//! # Examples
9//!
10//! ```no_run
11//! use buffa_reflect::{DescriptorPool, DynamicMessage};
12//!
13//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
14//! let bytes: &[u8] = &[];
15//! let pool = DescriptorPool::decode(bytes)?;
16//! let descriptor = pool.get_message_by_name("acme.v1.User").unwrap();
17//!
18//! let wire: &[u8] = &[];
19//! let mut dyn_msg = DynamicMessage::decode(descriptor, wire)?;
20//! dyn_msg.set_field_by_name("name", "Alice".into());
21//! let bytes = dyn_msg.encode_to_vec();
22//! # let _ = bytes;
23//! # Ok(())
24//! # }
25//! ```
26
27pub(crate) mod defaults;
28mod fields;
29mod message;
30mod message_codec;
31mod message_decode;
32mod unknown;
33mod value;
34
35#[cfg(feature = "serde")]
36pub mod serde;
37#[cfg(feature = "text-format")]
38pub mod text_format;
39
40#[cfg(feature = "serde")]
41pub use crate::dynamic::serde::{DeserializeOptions, SerializeOptions};
42#[cfg(feature = "text-format")]
43pub use crate::dynamic::text_format::{FormatOptions, ParseError, ParseErrorKind};
44pub use crate::dynamic::{
45 message::DynamicMessage,
46 unknown::{UnknownField, UnknownFieldSet},
47 value::{MapKey, SetFieldError, Value},
48};