transform 0.1.0

An experimental trait and other helpers for efficiently transforming byte sequences.
Documentation
use std::io;
use std::io::Write;

use super::{Transformer, SpanningTransformer};

/// Nop is a [`SpanningTransformer`] that copies src to dst.
///
/// [`SpanningTransformer`]: trait.SpanningTransformer.html
///
/// # Examples
///
/// Basic usage:
///
/// ```rust
/// # use std::io;
/// # use transform::{Transformer, Nop};
/// # fn try_main() -> io::Result<(usize, usize)> {
/// let src = b"Does nothing";
/// let dst = &mut [0; 8];
/// let (ndst, nsrc) = Nop::new().transform(dst, src, false)?;
///
/// assert_eq!(ndst, 8);
/// assert_eq!(nsrc, 8);
/// assert_eq!(dst, b"Does not");
/// #     Ok((ndst, nsrc))
/// # }
/// # fn main() {
/// #   try_main().unwrap();
/// # }
/// ```
pub struct Nop {}

impl Nop {
    pub fn new() -> Nop {
        Nop {}
    }
}


impl Transformer for Nop {
    fn transform(&mut self, mut dst: &mut [u8], src: &[u8], _: bool) -> io::Result<(usize, usize)> {
        let n = dst.write(src)?;
        Ok((n, n))
    }
}

impl SpanningTransformer for Nop {
    fn span(&self, src: &[u8], _: bool) -> io::Result<usize> {
        Ok(src.len())
    }
}