pub struct RegistersAndStackEncoder<'a, Abi, RegisterType, const NR_REGS: usize>where
    Abi: SyscallAbi,
    RegisterType: Copy + Default,{ /* private fields */ }
Expand description

A basic encoder that encodes values byte-by-byte into registers, or the stack if we spill over. Somewhat slow, but can encode all the basic types. Can be configured by the register type (u32, u64, etc) and the number of registers that can be used as syscall arg registers.

Trait Implementations§

source§

impl<'a, Abi, RegisterType, const NR_REGS: usize> SyscallEncoder<'a, Abi, RegisterAndStackData<RegisterType, NR_REGS>> for RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>where Abi: SyscallAbi, RegisterType: Copy + Default + AllowedRegisterType,

source§

fn new_decode( abi: &'a Abi, decode_data: RegisterAndStackData<RegisterType, NR_REGS> ) -> RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>

Make a new encoder for decoding data.
source§

fn new_encode( abi: &'a Abi, allocation: Allocation ) -> RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>

Make a new encoder given this allocation.
source§

fn encode<Source>(&mut self, item: &Source) -> Result<(), EncodeError>where Source: SyscallEncodable<'a, Abi, RegisterAndStackData<RegisterType, NR_REGS>, RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>>,

Encode an item.
source§

fn finish(self) -> RegisterAndStackData<RegisterType, NR_REGS>

Finish encoding and return the EncodedType.
source§

fn decode<Target>(&mut self) -> Result<Target, DecodeError>where Target: SyscallEncodable<'a, Abi, RegisterAndStackData<RegisterType, NR_REGS>, RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>>, RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>: Sized,

Decode an item.
source§

fn encode_u8(&mut self, item: u8) -> Result<(), EncodeError>where RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>: Sized,

Encode a u8.
source§

fn decode_u8(&mut self) -> Result<u8, DecodeError>where RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>: Sized,

Decode a u8.
source§

fn size_hint(&mut self, _size: usize)

Called by SyscallEncodable when derived.
source§

impl<'a, Abi, RegisterType, const NR_REGS: usize> EncodeAllPrimitives<'a, Abi, RegisterAndStackData<RegisterType, NR_REGS>, RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>> for RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>where Abi: SyscallAbi, RegisterType: Copy + Default + AllowedRegisterType,

Auto Trait Implementations§

§

impl<'a, Abi, RegisterType, const NR_REGS: usize> RefUnwindSafe for RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>where Abi: RefUnwindSafe, RegisterType: RefUnwindSafe,

§

impl<'a, Abi, RegisterType, const NR_REGS: usize> !Send for RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>

§

impl<'a, Abi, RegisterType, const NR_REGS: usize> !Sync for RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>

§

impl<'a, Abi, RegisterType, const NR_REGS: usize> Unpin for RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>where RegisterType: Unpin,

§

impl<'a, Abi, RegisterType, const NR_REGS: usize> UnwindSafe for RegistersAndStackEncoder<'a, Abi, RegisterType, NR_REGS>where Abi: RefUnwindSafe, RegisterType: UnwindSafe,

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere 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 Twhere 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 Twhere U: Into<T>,

§

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 Twhere U: TryFrom<T>,

§

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.