Skip to main content

CacheCodec

Struct CacheCodec 

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

Type-erased codec for serializing and deserializing cache entries.

CacheCodec carries the entry’s stable type_id/version plus plain function pointers — it is Copy and has no heap allocation. Construct one via CacheCodec::from_impl for types that implement CacheCodecImpl, or CacheCodec::new for custom cases (e.g. when the orphan rule prevents a direct impl).

Implementations§

Source§

impl CacheCodec

Source

pub fn new( type_id: &'static str, version: u32, serialize_body: fn(&Arc<dyn Any + Send + Sync>, &mut CacheEntryWriter<'_>) -> Result<()>, deserialize_body: fn(&mut CacheEntryReader<'_>) -> Result<Arc<dyn Any + Send + Sync>>, ) -> Self

Create a CacheCodec from explicit body function pointers.

Prefer from_impl when the value type implements CacheCodecImpl. Use this for types where a direct impl isn’t possible (e.g. the orphan rule prevents it). type_id and version play the same role as the corresponding CacheCodecImpl constants.

Source

pub fn from_impl<T: CacheCodecImpl + 'static>() -> Self

Create a CacheCodec from a CacheCodecImpl implementation.

Source

pub fn with_memory_priority(self, priority: u8) -> Self

Hint for priority-aware memory tiers. Larger values survive pressure first.

Source

pub fn memory_priority(&self) -> u8

Source

pub fn with_plane_tag(self, plane: u8) -> Self

Tag the entry as one plane of a layered index so backends can report per-plane metrics without deriving the plane from an admission priority.

Source

pub fn plane_tag(&self) -> Option<u8>

The layered plane this entry belongs to, or None for other entries.

Source

pub const fn type_id(&self) -> &'static str

Return the stable entry type identity.

Persistent and tiered backends can use this metadata to route encoded values without retaining a readable logical cache key.

Source

pub fn serialize( &self, value: &Arc<dyn Any + Send + Sync>, writer: &mut dyn Write, ) -> Result<()>

Serialize value into writer: envelope first, then the body.

Source

pub fn supports_row_selection(&self) -> bool

Source

pub fn deserialize_rows( &self, reader: &dyn CacheRangeReader, rows: &[u32], ) -> CacheDecode<Arc<dyn Any + Send + Sync>>

Gather rows without loading the complete persistent entry.

Source

pub fn plan_rows( &self, reader: &dyn CacheRangeReader, rows: &[u32], ) -> Option<Vec<Range<usize>>>

Payload ranges that deserialize_rows would request for rows, beyond the envelope and body header it reads from reader here. None when the codec cannot plan, the entry is not compatible, or the rows are invalid; callers then decode serially, which reports invalid rows as a miss.

Source

pub fn deserialize( &self, data: &Bytes, ) -> CacheDecode<Arc<dyn Any + Send + Sync>>

Deserialize an entry from data.

Never fails: any non-fatal failure to interpret the bytes becomes a CacheDecode::Miss with the reason why (see CacheMissReason). Reading from an in-memory Bytes cannot do I/O, so there is no fault channel — a miss is the only non-Hit outcome.

Trait Implementations§

Source§

impl Clone for CacheCodec

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for CacheCodec

Source§

impl Debug for CacheCodec

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more