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
#[cfg(feature = "std")] {
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.
Implementations on Foreign Types§
Source§impl TryIntoCtx for CString
Available on crate feature std only.
impl TryIntoCtx for CString
Available on crate feature
std only.Source§impl TryIntoCtx<Endian> for f32
impl TryIntoCtx<Endian> for f32
Source§impl TryIntoCtx<Endian> for f64
impl TryIntoCtx<Endian> for f64
Source§impl TryIntoCtx<Endian> for i8
impl TryIntoCtx<Endian> for i8
Source§impl TryIntoCtx<Endian> for i16
impl TryIntoCtx<Endian> for i16
Source§impl TryIntoCtx<Endian> for i32
impl TryIntoCtx<Endian> for i32
Source§impl TryIntoCtx<Endian> for i64
impl TryIntoCtx<Endian> for i64
Source§impl TryIntoCtx<Endian> for i128
impl TryIntoCtx<Endian> for i128
Source§impl TryIntoCtx<Endian> for u8
impl TryIntoCtx<Endian> for u8
Source§impl TryIntoCtx<Endian> for u16
impl TryIntoCtx<Endian> for u16
Source§impl TryIntoCtx<Endian> for u32
impl TryIntoCtx<Endian> for u32
Source§impl TryIntoCtx<Endian> for u64
impl TryIntoCtx<Endian> for u64
Source§impl TryIntoCtx<Endian> for u128
impl TryIntoCtx<Endian> for u128
Source§impl<'a> TryIntoCtx for &'a str
impl<'a> TryIntoCtx for &'a str
Source§impl<'a> TryIntoCtx for &'a CStr
Available on crate feature std only.
impl<'a> TryIntoCtx for &'a CStr
Available on crate feature
std only.