pub struct VTableIndirect {
pub display: Option<unsafe fn(OxPtrConst, &mut Formatter<'_>) -> Option<Result>>,
pub debug: Option<unsafe fn(OxPtrConst, &mut Formatter<'_>) -> Option<Result>>,
pub hash: Option<unsafe fn(OxPtrConst, &mut HashProxy<'_>) -> Option<()>>,
pub invariants: Option<unsafe fn(OxPtrConst) -> Option<Result<(), String>>>,
pub parse: Option<unsafe fn(&str, OxPtrUninit) -> Option<Result<(), ParseError>>>,
pub parse_bytes: Option<unsafe fn(&[u8], OxPtrUninit) -> Option<Result<(), ParseError>>>,
pub try_from: Option<unsafe fn(OxPtrUninit, &'static Shape, PtrConst) -> TryFromOutcome>,
pub try_into_inner: Option<unsafe fn(OxPtrMut) -> Option<Result<PtrMut, String>>>,
pub try_borrow_inner: Option<unsafe fn(OxPtrConst) -> Option<Result<PtrMut, String>>>,
pub partial_eq: Option<unsafe fn(OxPtrConst, OxPtrConst) -> Option<bool>>,
pub partial_cmp: Option<unsafe fn(OxPtrConst, OxPtrConst) -> Option<Option<Ordering>>>,
pub cmp: Option<unsafe fn(OxPtrConst, OxPtrConst) -> Option<Ordering>>,
}Expand description
VTable for generic containers with runtime trait resolution.
Uses OxPtrConst/OxPtrMut as receivers to access inner type’s shape at runtime.
Used for Vec<T>, Option<T>, Arc<T>, etc.
Returns Option to indicate whether the operation is supported
(the inner type may not implement the required trait).
§Per-type operations
Note that drop_in_place, default_in_place, and clone_into are NOT in this struct.
These operations must be monomorphized per-type and live in TypeOps on the crate::Shape.
This allows vtables to be shared across generic instantiations (e.g., one vtable for all Vec<T>).
§Safety
All function pointers are unsafe fn because they operate on raw pointers.
Callers must ensure:
- The pointer points to a valid instance of the expected type
- The pointer has the correct alignment for the type
- For mutable operations, the caller has exclusive access to the data
- The lifetime of the data extends for the duration of the operation
Fields§
§display: Option<unsafe fn(OxPtrConst, &mut Formatter<'_>) -> Option<Result>>Display function - formats value using Display trait.
debug: Option<unsafe fn(OxPtrConst, &mut Formatter<'_>) -> Option<Result>>Debug function - formats value using Debug trait.
hash: Option<unsafe fn(OxPtrConst, &mut HashProxy<'_>) -> Option<()>>Hash function - hashes value using Hash trait via HashProxy.
invariants: Option<unsafe fn(OxPtrConst) -> Option<Result<(), String>>>Invariants function - checks type invariants.
parse: Option<unsafe fn(&str, OxPtrUninit) -> Option<Result<(), ParseError>>>Parse function - parses value from string into uninitialized destination.
The destination is uninitialized memory. Implementations must use target.put(value)
to write the parsed value, NOT *target.as_mut() = value which would try to drop
uninitialized memory.
parse_bytes: Option<unsafe fn(&[u8], OxPtrUninit) -> Option<Result<(), ParseError>>>Parse bytes function - parses value from byte slice into uninitialized destination. Used for binary formats where types have a more efficient representation.
The destination is uninitialized memory. Implementations must use target.put(value)
to write the parsed value.
try_from: Option<unsafe fn(OxPtrUninit, &'static Shape, PtrConst) -> TryFromOutcome>Try from function - converts from another value type into uninitialized destination.
§Arguments
dst: Uninitialized destination pointer where the converted value will be writtensrc_shape: Shape of the source typesrc_ptr: Pointer to the source value
§Return Value
Returns crate::TryFromOutcome which encodes both the result and ownership semantics:
crate::TryFromOutcome::Converted: Success. Source was consumed.crate::TryFromOutcome::Unsupported: Source type not supported. Source was NOT consumed.crate::TryFromOutcome::Failed: Conversion failed. Source WAS consumed.
See VTableDirect::try_from for implementation patterns.
§Safety
dstmust be valid for writes and properly aligned for the destination typesrc_ptrmust point to valid, initialized memory of the type described bysrc_shape
§Implementation Note
The destination is uninitialized memory. Implementations must use dst.put(value)
to write the converted value, NOT *dst.as_mut() = value.
try_into_inner: Option<unsafe fn(OxPtrMut) -> Option<Result<PtrMut, String>>>Try into inner function - extracts inner value (consuming).
try_borrow_inner: Option<unsafe fn(OxPtrConst) -> Option<Result<PtrMut, String>>>Try borrow inner function - borrows inner value.
partial_eq: Option<unsafe fn(OxPtrConst, OxPtrConst) -> Option<bool>>PartialEq function - tests equality with another value.
partial_cmp: Option<unsafe fn(OxPtrConst, OxPtrConst) -> Option<Option<Ordering>>>PartialOrd function - compares with another value.
cmp: Option<unsafe fn(OxPtrConst, OxPtrConst) -> Option<Ordering>>Ord function - total ordering comparison.
Implementations§
Trait Implementations§
Source§impl Clone for VTableIndirect
impl Clone for VTableIndirect
Source§fn clone(&self) -> VTableIndirect
fn clone(&self) -> VTableIndirect
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more