Trait scroll::ctx::TryIntoCtx
source · [−]pub trait TryIntoCtx<Ctx: Copy = (), This: ?Sized = [u8]>: Sized {
type Error;
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();