pwntools 0.4.0

pwntools for Rust
Documentation
use std::ops::{AddAssign, Mul};

#[derive(Debug, Clone, Default)]
pub struct Payload {
    data: Vec<u8>,
}

#[derive(Debug)]
pub struct P64(pub u64);

impl AddAssign<P64> for Payload {
    fn add_assign(&mut self, rhs: P64) {
        self.data.extend_from_slice(&rhs.0.to_le_bytes())
    }
}

impl AddAssign<&[u8]> for Payload {
    fn add_assign(&mut self, rhs: &[u8]) {
        self.data.extend_from_slice(rhs)
    }
}

impl AddAssign<Vec<u8>> for Payload {
    fn add_assign(&mut self, rhs: Vec<u8>) {
        self.data.extend_from_slice(&rhs)
    }
}

impl Mul<usize> for P64 {
    type Output = Vec<u8>;

    fn mul(self, rhs: usize) -> Self::Output {
        self.0.to_le_bytes().repeat(rhs)
    }
}

impl Payload {
    pub fn ljust(&mut self, size: usize, value: u8) {
        self.data.resize(size, value)
    }

    pub fn as_bytes(&self) -> &[u8] {
        &self.data
    }
}