pub struct ShapeBuilder { /* private fields */ }Expand description
Implementations§
Source§impl ShapeBuilder
impl ShapeBuilder
Sourcepub const fn for_sized<T>(type_identifier: &'static str) -> Self
pub const fn for_sized<T>(type_identifier: &'static str) -> Self
Create a new builder for a sized type.
The id and layout are derived from the type parameter.
Sourcepub const fn for_unsized<T: ?Sized>(type_identifier: &'static str) -> Self
pub const fn for_unsized<T: ?Sized>(type_identifier: &'static str) -> Self
Create a new builder for an unsized type.
Sourcepub const fn vtable(self, vtable: VTableErased) -> Self
pub const fn vtable(self, vtable: VTableErased) -> Self
Set the vtable (type-erased).
Sourcepub const fn vtable_direct(self, vtable: &'static VTableDirect) -> Self
pub const fn vtable_direct(self, vtable: &'static VTableDirect) -> Self
Set the vtable from a direct vtable reference.
Sourcepub const fn vtable_indirect(self, vtable: &'static VTableIndirect) -> Self
pub const fn vtable_indirect(self, vtable: &'static VTableIndirect) -> Self
Set the vtable from an indirect vtable reference.
Sourcepub const fn type_ops(self, type_ops: TypeOps) -> Self
pub const fn type_ops(self, type_ops: TypeOps) -> Self
Set the per-type operations (drop, default, clone) using the erased enum.
For generic containers, use this to provide the monomorphized operations while sharing the main vtable across all instantiations.
Sourcepub const fn type_ops_direct(self, type_ops: &'static TypeOpsDirect) -> Self
pub const fn type_ops_direct(self, type_ops: &'static TypeOpsDirect) -> Self
Set per-type operations for concrete types (uses thin pointers).
Use this for scalars, String, and derived structs/enums.
Sourcepub const fn type_ops_indirect(self, type_ops: &'static TypeOpsIndirect) -> Self
pub const fn type_ops_indirect(self, type_ops: &'static TypeOpsIndirect) -> Self
Set per-type operations for generic containers (uses wide pointers).
Use this for Vec<T>, Option<T>, Arc<T>, etc.
Sourcepub const fn add_marker_trait(self, trait_flag: MarkerTraits) -> Self
pub const fn add_marker_trait(self, trait_flag: MarkerTraits) -> Self
Add a marker trait flag.
Sourcepub const fn marker_traits(self, traits: MarkerTraits) -> Self
pub const fn marker_traits(self, traits: MarkerTraits) -> Self
Set all marker traits at once using combined bitflags.
Sourcepub const fn unwind_safe(self) -> Self
pub const fn unwind_safe(self) -> Self
Mark type as implementing UnwindSafe.
Sourcepub const fn ref_unwind_safe(self) -> Self
pub const fn ref_unwind_safe(self) -> Self
Mark type as implementing RefUnwindSafe.
Sourcepub const fn module_path(self, module_path: &'static str) -> Self
pub const fn module_path(self, module_path: &'static str) -> Self
Set the module path where this type is defined.
This is typically set to module_path!() by the derive macro,
which expands to the module path at the definition site.
Sourcepub const fn decl_id(self, decl_id: DeclId) -> Self
pub const fn decl_id(self, decl_id: DeclId) -> Self
Set the declaration identifier.
The DeclId identifies the type declaration independent of type
parameters. For derive macros, this is typically computed from the
source location and type name.
For non-generic types (no type parameters), you don’t need to call this - the decl_id will be automatically computed from the type identifier.
For generic foreign types, just set module_path and
the decl_id will be auto-computed from @module_path#kind#type_identifier.
See DeclId for stability guarantees (spoiler: there are none).
Sourcepub const fn source_file(self, file: &'static str) -> Self
pub const fn source_file(self, file: &'static str) -> Self
Set the source file where this type is defined.
This is typically set to file!() by the derive macro
when the doc feature is enabled.
Sourcepub const fn source_line(self, line: u32) -> Self
pub const fn source_line(self, line: u32) -> Self
Set the source line number where this type is defined.
This is typically set to line!() by the derive macro
when the doc feature is enabled.
Sourcepub const fn source_column(self, column: u32) -> Self
pub const fn source_column(self, column: u32) -> Self
Set the source column number where this type is defined.
This is typically set to column!() by the derive macro
when the doc feature is enabled.
Sourcepub const fn type_params(self, type_params: &'static [TypeParam]) -> Self
pub const fn type_params(self, type_params: &'static [TypeParam]) -> Self
Set the type parameters.
Sourcepub const fn attributes(self, attributes: &'static [Attr]) -> Self
pub const fn attributes(self, attributes: &'static [Attr]) -> Self
Set the attributes.
Sourcepub const fn inner(self, inner: &'static Shape) -> Self
pub const fn inner(self, inner: &'static Shape) -> Self
Set the inner shape (for transparent/newtype wrappers).
Sourcepub const fn builder_shape(self, builder: &'static Shape) -> Self
pub const fn builder_shape(self, builder: &'static Shape) -> Self
Set the builder shape for immutable collections.
If set, deserializers will build the value using the builder shape,
then convert to the target type. Used for immutable collections like
Bytes (builds through BytesMut) or Arc<[T]> (builds through Vec<T>).
Sourcepub const fn type_name(self, type_name: TypeNameFn) -> Self
pub const fn type_name(self, type_name: TypeNameFn) -> Self
Set the type name function for formatting generic type names.
For generic types like Vec<T>, this function formats the full name
including type parameters (e.g., Vec<String>).
Sourcepub const fn proxy(self, proxy: &'static ProxyDef) -> Self
pub const fn proxy(self, proxy: &'static ProxyDef) -> Self
Set the container-level proxy for custom serialization/deserialization.
When a proxy is set, the type will be serialized/deserialized through the proxy type instead of directly.
Sourcepub const fn format_proxies(self, proxies: &'static [FormatProxy]) -> Self
pub const fn format_proxies(self, proxies: &'static [FormatProxy]) -> Self
Set the format-specific container-level proxy definitions.
Format-specific proxies take precedence over the format-agnostic proxy when
the format matches. Use this for types that need different representations
in different formats (e.g., XML vs JSON).
Sourcepub const fn variance(self, variance: VarianceDesc) -> Self
pub const fn variance(self, variance: VarianceDesc) -> Self
Set the variance description for this type.
For types that propagate inner variance, use VarianceDesc::propagate(inner_shape).
For types with constant variance, use VarianceDesc::BIVARIANT or VarianceDesc::INVARIANT.
For complex types like function pointers, construct with VarianceDesc::new(base, deps).
Sourcepub const fn flags(self, flags: ShapeFlags) -> Self
pub const fn flags(self, flags: ShapeFlags) -> Self
Set the flags for this shape.
Sourcepub const fn untagged(self) -> Self
pub const fn untagged(self) -> Self
Mark this enum as untagged.
Untagged enums serialize their content directly without any discriminant.
Sourcepub const fn tag(self, tag: &'static str) -> Self
pub const fn tag(self, tag: &'static str) -> Self
Set the tag field name for internally/adjacently tagged enums.
Sourcepub const fn content(self, content: &'static str) -> Self
pub const fn content(self, content: &'static str) -> Self
Set the content field name for adjacently tagged enums.
Sourcepub const fn is_numeric(self) -> Self
pub const fn is_numeric(self) -> Self
Mark this enum as numeric.
Numeric enums serialize to the underlying discriminant
Sourcepub const fn pod(self) -> Self
pub const fn pod(self) -> Self
Mark this type as Plain Old Data.
POD types have no invariants - any combination of valid field values produces a valid instance. This enables safe mutation through reflection.
Sourcepub const fn metadata_container(self) -> Self
pub const fn metadata_container(self) -> Self
Mark this struct as a metadata container.
Metadata containers serialize transparently through their non-metadata field while preserving metadata fields for formats that support them.
Sourcepub const fn build(self) -> Shape
pub const fn build(self) -> Shape
Build the Shape.
If ty was not explicitly set (still Type::Undefined), it will be
inferred from def.
§DeclId auto-computation
- Non-generic types: computed from
type_identifier - Generic types with
module_path: computed from@module_path#kind#type_identifier - Generic types without
module_path: panics (derive macro setsdecl_idexplicitly)