#[non_exhaustive]pub enum RepeatedRepr {
Vec,
Custom(String),
}Expand description
The owned Rust collection a proto repeated field maps to in generated
owned structs.
The default is Vec (Vec<T>).
Custom substitutes any collection that satisfies
the buffa::ProtoList<T> bound — for example a crate-local newtype wrapping
a SmallVec-backed inline collection. Unlike the scalar string/bytes
knobs the custom collection wraps the element type, so its path is a
template containing a * placeholder where the element type is
substituted (e.g. "::my_crate::SmallList<*>").
Because buffa::ProtoList is buffa-owned, a foreign collection cannot
implement it directly (orphan rule) — the template must always name a
crate-local newtype, mirroring the ProtoString newtype expectation.
Select a representation through buffa_build’s repeated_type_custom
builder method. The wire format is identical regardless of the collection;
view types keep borrowing &[T].
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
Vec
::buffa::alloc::vec::Vec<T> — the default. Keeps the Vec-specialized
fast paths (in-place push/reserve/clear, native Arbitrary)
instead of the generic ProtoList ones, so generated output for the
default is byte-identical to a build without the knob.
Custom(String)
A custom collection named by a Rust type-path template with a *
placeholder for the element type (e.g. "::my_crate::SmallList<*>"). The
named type must satisfy buffa::ProtoList<T> and be a crate-local
newtype (a foreign collection cannot implement the buffa-owned
ProtoList).
§Limitations
- The template must contain at least one
*; the element type is substituted for every*before the result is parsed as a Rust type. A template that omits*surfaces asCodeGenError::MissingListPlaceholder, and one whose substitution does not parse asCodeGenError::InvalidTypePath, at generation (.compile()) time. - A custom collection always needs a crate-local newtype — this is not
limited to the reflection path. The generated decode and clear code
require
Field: ProtoList, so even a binary-only build cannot use a foreign collection directly. - Under reflection / vtable the newtype must implement
buffa_descriptor’sReflectList(aVec-backed newtype can delegate to the innerVec<T>: ReflectList). Under JSON it must implementserde::Serialize/Deserialize; under thearbitraryfeature,arbitrary::Arbitrary(derivable on a newtype). - A
repeated <self-type>field becomesCollection<Self>, so the collection must be heap-backed; an inline collection (SmallVec<[Self; N]>) would be infinitely sized and fail to compile.
Trait Implementations§
Source§impl Clone for RepeatedRepr
impl Clone for RepeatedRepr
Source§fn clone(&self) -> RepeatedRepr
fn clone(&self) -> RepeatedRepr
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 RepeatedRepr
impl Debug for RepeatedRepr
Source§impl Default for RepeatedRepr
impl Default for RepeatedRepr
Source§fn default() -> RepeatedRepr
fn default() -> RepeatedRepr
impl Eq for RepeatedRepr
Source§impl PartialEq for RepeatedRepr
impl PartialEq for RepeatedRepr
Source§fn eq(&self, other: &RepeatedRepr) -> bool
fn eq(&self, other: &RepeatedRepr) -> bool
self and other values to be equal, and is used by ==.