#[non_exhaustive]pub enum PointerRepr {
Box,
Custom(String),
}Expand description
The owned smart pointer a singular message field’s buffa::MessageField
wraps in generated owned structs.
The default is Box. Custom
substitutes any pointer that satisfies the buffa::ProtoBox<T> bound — for
example a smallbox-style pointer that stores small messages inline.
Because the pointer wraps the message type, its path is a template
containing a * placeholder for the message type (e.g.
"::smallbox::SmallBox<*, ::smallbox::space::S4>" or
"::my_crate::SmallBox<*>").
Because buffa::ProtoBox is buffa-owned, a foreign pointer cannot
implement it directly (orphan rule) — the template must name a crate-local
newtype, mirroring the ProtoString newtype expectation.
Select a representation through buffa_build’s box_type_custom builder
method. The wire format is identical regardless of the pointer; view types
are unaffected. Applies to singular message fields and boxed oneof
message/group variants (a variant opted into inline storage via
unboxed_oneof_fields takes precedence and gets no pointer). Repeated
message fields use a collection, not a pointer.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
Box
::buffa::alloc::boxed::Box<T> (inside MessageField<T>) — the default.
Keeps generated output byte-identical to a build without the knob (the
MessageField pointer type parameter defaults to Box).
Custom(String)
A custom pointer named by a Rust type-path template with a *
placeholder for the message type. Must satisfy buffa::ProtoBox<T> and
be a crate-local newtype.
§Limitations
- The template must contain at least one
*; a template that omits it surfaces asCodeGenError::MissingWildcard, and one whose substitution does not parse asCodeGenError::InvalidTypePath, at generation (.compile()) time. Rc/Arcand other shared/COW pointers are unusable: the decoder merges in place (needsDerefMut), so only an exclusively-owned pointer (heapBox, inlineSmallBox) can implementProtoBox.- An inline pointer inflates the parent struct per field, so select it per field/prefix, never as a blanket default.
- On a boxed oneof variant under the
arbitraryfeature, the custom pointer must implementarbitrary::Arbitrary(the oneof enum derives it and stores the pointer directly in the variant). The singular-field path needs no such impl —MessageFieldconstructs the pointer itself.
Trait Implementations§
Source§impl Clone for PointerRepr
impl Clone for PointerRepr
Source§fn clone(&self) -> PointerRepr
fn clone(&self) -> PointerRepr
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for PointerRepr
impl Debug for PointerRepr
Source§impl Default for PointerRepr
impl Default for PointerRepr
Source§fn default() -> PointerRepr
fn default() -> PointerRepr
impl Eq for PointerRepr
Source§impl PartialEq for PointerRepr
impl PartialEq for PointerRepr
Source§fn eq(&self, other: &PointerRepr) -> bool
fn eq(&self, other: &PointerRepr) -> bool
self and other values to be equal, and is used by ==.