ShapeBuilder

Struct ShapeBuilder 

Source
pub struct ShapeBuilder { /* private fields */ }
Expand description

Builder for creating Shape instances.

This builder provides a convenient way to construct Shape values with sensible defaults. Many fields can be inferred or have reasonable defaults:

ShapeBuilder::for_sized::<MyType>("MyType")
    .def(Def::Scalar)
    .vtable(my_vtable)
    .build()

Implementations§

Source§

impl ShapeBuilder

Source

pub const fn for_sized<T>(type_identifier: &'static str) -> ShapeBuilder

Create a new builder for a sized type.

The id and layout are derived from the type parameter.

Source

pub const fn for_unsized<T>(type_identifier: &'static str) -> ShapeBuilder
where T: ?Sized,

Create a new builder for an unsized type.

Source

pub const fn vtable(self, vtable: VTableErased) -> ShapeBuilder

Set the vtable (type-erased).

Source

pub const fn vtable_direct(self, vtable: &'static VTableDirect) -> ShapeBuilder

Set the vtable from a direct vtable reference.

Source

pub const fn vtable_indirect( self, vtable: &'static VTableIndirect, ) -> ShapeBuilder

Set the vtable from an indirect vtable reference.

Source

pub const fn type_ops(self, type_ops: TypeOps) -> ShapeBuilder

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.

Source

pub const fn type_ops_direct( self, type_ops: &'static TypeOpsDirect, ) -> ShapeBuilder

Set per-type operations for concrete types (uses thin pointers).

Use this for scalars, String, and derived structs/enums.

Source

pub const fn type_ops_indirect( self, type_ops: &'static TypeOpsIndirect, ) -> ShapeBuilder

Set per-type operations for generic containers (uses wide pointers).

Use this for Vec<T>, Option<T>, Arc<T>, etc.

Source

pub const fn add_marker_trait(self, trait_flag: MarkerTraits) -> ShapeBuilder

Add a marker trait flag.

Source

pub const fn marker_traits(self, traits: MarkerTraits) -> ShapeBuilder

Set all marker traits at once using combined bitflags.

Source

pub const fn eq(self) -> ShapeBuilder

Mark type as implementing Eq.

Source

pub const fn copy(self) -> ShapeBuilder

Mark type as implementing Copy.

Source

pub const fn send(self) -> ShapeBuilder

Mark type as implementing Send.

Source

pub const fn sync(self) -> ShapeBuilder

Mark type as implementing Sync.

Source

pub const fn unpin(self) -> ShapeBuilder

Mark type as implementing Unpin.

Source

pub const fn unwind_safe(self) -> ShapeBuilder

Mark type as implementing UnwindSafe.

Source

pub const fn ref_unwind_safe(self) -> ShapeBuilder

Mark type as implementing RefUnwindSafe.

Source

pub const fn ty(self, ty: Type) -> ShapeBuilder

Set the type.

Source

pub const fn def(self, def: Def) -> ShapeBuilder

Set the definition.

Source

pub const fn type_params( self, type_params: &'static [TypeParam], ) -> ShapeBuilder

Set the type parameters.

Source

pub const fn doc(self, doc: &'static [&'static str]) -> ShapeBuilder

Set the documentation.

Source

pub const fn attributes(self, attributes: &'static [Attr]) -> ShapeBuilder

Set the attributes.

Source

pub const fn type_tag(self, type_tag: &'static str) -> ShapeBuilder

Set the type tag.

Source

pub const fn inner(self, inner: &'static Shape) -> ShapeBuilder

Set the inner shape (for transparent/newtype wrappers).

Source

pub const fn builder_shape(self, builder: &'static Shape) -> ShapeBuilder

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>).

Source

pub const fn type_name( self, type_name: fn(&'static Shape, &mut Formatter<'_>, TypeNameOpts) -> Result<(), Error>, ) -> ShapeBuilder

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>).

Source

pub const fn proxy(self, proxy: &'static ProxyDef) -> ShapeBuilder

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.

Source

pub const fn variance( self, variance: fn(&'static Shape) -> Variance, ) -> ShapeBuilder

Set the variance function for this type.

For derived types, use Shape::computed_variance which walks fields. For leaf types, use Variance::COVARIANT, Variance::INVARIANT, etc.

Source

pub const fn flags(self, flags: ShapeFlags) -> ShapeBuilder

Set the flags for this shape.

Source

pub const fn untagged(self) -> ShapeBuilder

Mark this enum as untagged.

Untagged enums serialize their content directly without any discriminant.

Source

pub const fn tag(self, tag: &'static str) -> ShapeBuilder

Set the tag field name for internally/adjacently tagged enums.

Source

pub const fn content(self, content: &'static str) -> ShapeBuilder

Set the content field name for adjacently tagged enums.

Source

pub const fn build(self) -> Shape

Build the Shape.

If ty was not explicitly set (still Type::Undefined), it will be inferred from def.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.