asciiz 0.1.0

asciiz create buffer and copy bytes ends with 0u8
Documentation
/// asciiz create buffer and copy bytes ends with 0u8
///
/// #Examples
/// Keep lifetime
/// ```
/// use asciiz::u8z::U8zBuf;
///
/// let b = b"bytesarray";
/// let mut m = U8zBuf::from_u8array(b);
/// assert_eq!(m.as_u8p() as usize, m.as_u8p_mut() as usize);
/// // let r = unsafe { c_function_requests_asciiz(m.as_i8p_mut()) };
///
/// ```

pub mod u8z;

#[cfg(test)]
mod tests {
  use super::*;

  #[test]
  fn a_const_i8p_eq_u8p() {
    let b = b"ab";
    let c = u8z::U8zBuf::from_u8array(b);
    assert_eq!(c.as_i8p() as usize, c.as_u8p() as usize);
  }

  #[test]
  fn b_const_eq_mut() {
    let b = b"ab";
    let mut m = u8z::U8zBuf::from_u8array(b);
    assert_eq!(m.as_u8p() as usize, m.as_u8p_mut() as usize);
    assert_eq!(m.as_i8p() as usize, m.as_i8p_mut() as usize);
    assert_eq!(m.as_i8p() as usize, m.as_u8p() as usize);
  }

  #[test]
  fn c_check_array() {
    let b = b"x\0yz"; // includes 0u8
    let mut m = u8z::U8zBuf::from_u8array(b);
    let s: usize = b.len() + 1;
    assert_eq!(s, 5);
    let d: &mut Vec<u8> = &mut vec![255u8; s]; // fill not 0u8
    d[..].copy_from_slice(
      unsafe { std::slice::from_raw_parts(m.as_u8p_mut(), s) });
    assert_eq!(d[..(s - 1)], b.to_vec()); // check bytes
    assert_eq!(d[s - 1], 0u8); // end 0u8
  }
}