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