scroll::ctx

Trait TryIntoCtx

Source
pub trait TryIntoCtx<Ctx: Copy = (), This: ?Sized = [u8]>: Sized {
    type Error;

    // Required method
    fn try_into_ctx(self, _: &mut This, ctx: Ctx) -> Result<usize, Self::Error>;
}
Expand description

Tries to write Self into This using the context Ctx To implement writing into an arbitrary byte buffer, implement TryIntoCtx

§Example

use scroll::{self, ctx, LE, Endian, Pwrite};
#[derive(Debug, PartialEq, Eq)]
pub struct Foo(u16);

// this will use the default `DefaultCtx = scroll::Endian`
impl ctx::TryIntoCtx<Endian> for Foo {
    // you can use your own error here too, but you will then need to specify it in fn generic parameters
    type Error = scroll::Error;
    // you can write using your own context type, see `leb128.rs`
    fn try_into_ctx(self, this: &mut [u8], le: Endian) -> Result<usize, Self::Error> {
        if this.len() < 2 { return Err((scroll::Error::Custom("whatever".to_string())).into()) }
        this.pwrite_with(self.0, 0, le)?;
        Ok(2)
    }
}
// now we can write a `Foo` into some buffer (in this case, a byte buffer, because that's what we implemented it for above)

let mut bytes: [u8; 4] = [0, 0, 0, 0];
bytes.pwrite_with(Foo(0x7f), 1, LE).unwrap();

Required Associated Types§

Required Methods§

Source

fn try_into_ctx(self, _: &mut This, ctx: Ctx) -> Result<usize, Self::Error>

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl TryIntoCtx for CString

Source§

type Error = Error

Source§

fn try_into_ctx(self, dst: &mut [u8], _ctx: ()) -> Result<usize>

Source§

impl TryIntoCtx<Endian> for f32
where f32: IntoCtx<Endian>,

Source§

type Error = Error

Source§

fn try_into_ctx(self, dst: &mut [u8], le: Endian) -> Result<usize>

Source§

impl TryIntoCtx<Endian> for f64
where f64: IntoCtx<Endian>,

Source§

type Error = Error

Source§

fn try_into_ctx(self, dst: &mut [u8], le: Endian) -> Result<usize>

Source§

impl TryIntoCtx<Endian> for i8
where i8: IntoCtx<Endian>,

Source§

type Error = Error

Source§

fn try_into_ctx(self, dst: &mut [u8], le: Endian) -> Result<usize>

Source§

impl TryIntoCtx<Endian> for i16
where i16: IntoCtx<Endian>,

Source§

type Error = Error

Source§

fn try_into_ctx(self, dst: &mut [u8], le: Endian) -> Result<usize>

Source§

impl TryIntoCtx<Endian> for i32
where i32: IntoCtx<Endian>,

Source§

type Error = Error

Source§

fn try_into_ctx(self, dst: &mut [u8], le: Endian) -> Result<usize>

Source§

impl TryIntoCtx<Endian> for i64
where i64: IntoCtx<Endian>,

Source§

type Error = Error

Source§

fn try_into_ctx(self, dst: &mut [u8], le: Endian) -> Result<usize>

Source§

impl TryIntoCtx<Endian> for i128

Source§

type Error = Error

Source§

fn try_into_ctx(self, dst: &mut [u8], le: Endian) -> Result<usize>

Source§

impl TryIntoCtx<Endian> for u8
where u8: IntoCtx<Endian>,

Source§

type Error = Error

Source§

fn try_into_ctx(self, dst: &mut [u8], le: Endian) -> Result<usize>

Source§

impl TryIntoCtx<Endian> for u16
where u16: IntoCtx<Endian>,

Source§

type Error = Error

Source§

fn try_into_ctx(self, dst: &mut [u8], le: Endian) -> Result<usize>

Source§

impl TryIntoCtx<Endian> for u32
where u32: IntoCtx<Endian>,

Source§

type Error = Error

Source§

fn try_into_ctx(self, dst: &mut [u8], le: Endian) -> Result<usize>

Source§

impl TryIntoCtx<Endian> for u64
where u64: IntoCtx<Endian>,

Source§

type Error = Error

Source§

fn try_into_ctx(self, dst: &mut [u8], le: Endian) -> Result<usize>

Source§

impl TryIntoCtx<Endian> for u128

Source§

type Error = Error

Source§

fn try_into_ctx(self, dst: &mut [u8], le: Endian) -> Result<usize>

Source§

impl<'a> TryIntoCtx for &'a str

Source§

type Error = Error

Source§

fn try_into_ctx(self, dst: &mut [u8], _ctx: ()) -> Result<usize>

Source§

impl<'a> TryIntoCtx for &'a CStr

Source§

type Error = Error

Source§

fn try_into_ctx(self, dst: &mut [u8], _ctx: ()) -> Result<usize>

Source§

impl<'a> TryIntoCtx for &'a [u8]

Source§

type Error = Error

Source§

fn try_into_ctx(self, dst: &mut [u8], _ctx: ()) -> Result<usize>

Source§

impl<'a> TryIntoCtx<Endian> for &'a f32

Source§

type Error = Error

Source§

fn try_into_ctx(self, dst: &mut [u8], le: Endian) -> Result<usize>

Source§

impl<'a> TryIntoCtx<Endian> for &'a f64

Source§

type Error = Error

Source§

fn try_into_ctx(self, dst: &mut [u8], le: Endian) -> Result<usize>

Source§

impl<'a> TryIntoCtx<Endian> for &'a i8

Source§

type Error = Error

Source§

fn try_into_ctx(self, dst: &mut [u8], le: Endian) -> Result<usize>

Source§

impl<'a> TryIntoCtx<Endian> for &'a i16

Source§

type Error = Error

Source§

fn try_into_ctx(self, dst: &mut [u8], le: Endian) -> Result<usize>

Source§

impl<'a> TryIntoCtx<Endian> for &'a i32

Source§

type Error = Error

Source§

fn try_into_ctx(self, dst: &mut [u8], le: Endian) -> Result<usize>

Source§

impl<'a> TryIntoCtx<Endian> for &'a i64

Source§

type Error = Error

Source§

fn try_into_ctx(self, dst: &mut [u8], le: Endian) -> Result<usize>

Source§

impl<'a> TryIntoCtx<Endian> for &'a i128

Source§

type Error = Error

Source§

fn try_into_ctx(self, dst: &mut [u8], le: Endian) -> Result<usize>

Source§

impl<'a> TryIntoCtx<Endian> for &'a u8

Source§

type Error = Error

Source§

fn try_into_ctx(self, dst: &mut [u8], le: Endian) -> Result<usize>

Source§

impl<'a> TryIntoCtx<Endian> for &'a u16

Source§

type Error = Error

Source§

fn try_into_ctx(self, dst: &mut [u8], le: Endian) -> Result<usize>

Source§

impl<'a> TryIntoCtx<Endian> for &'a u32

Source§

type Error = Error

Source§

fn try_into_ctx(self, dst: &mut [u8], le: Endian) -> Result<usize>

Source§

impl<'a> TryIntoCtx<Endian> for &'a u64

Source§

type Error = Error

Source§

fn try_into_ctx(self, dst: &mut [u8], le: Endian) -> Result<usize>

Source§

impl<'a> TryIntoCtx<Endian> for &'a u128

Source§

type Error = Error

Source§

fn try_into_ctx(self, dst: &mut [u8], le: Endian) -> Result<usize>

Implementors§