wuffs 0.2.0

Bindings to wuffs.
Documentation
use crate::slice::WuffsSlice;
use wuffs_sys::{wuffs_base__io_buffer, wuffs_base__io_buffer_meta};

#[derive(Debug, Clone, Copy)]
pub struct WuffsBuf(wuffs_base__io_buffer);

impl WuffsBuf {
  pub fn from_slice(buf: &mut [u8]) -> Self {
    Self(wuffs_base__io_buffer {
      data: WuffsSlice::from(buf).into_inner(),
      meta: wuffs_base__io_buffer_meta {
        wi: 0,
        ri: 0,
        pos: 0,
        closed: false,
      },
    })
  }

  pub unsafe fn from_slice_readonly(buf: &[u8]) -> Self {
    let len = buf.len() as _;

    Self(wuffs_base__io_buffer {
      data: WuffsSlice::from_readonly(buf),
      meta: wuffs_base__io_buffer_meta {
        wi: len,
        ri: 0,
        pos: 0,
        closed: true,
      },
    })
  }

  pub fn as_mut_ptr(&mut self) -> *mut wuffs_base__io_buffer {
    &mut self.0 as *mut _
  }

  pub fn len(&self) -> usize {
    self.0.data.len as _
  }

  pub fn is_empty(&self) -> bool {
    self.len() == 0
  }

  pub fn pos(&self) -> usize {
    self.0.meta.pos as _
  }

  pub fn read(&self) -> usize {
    self.0.meta.ri as _
  }

  pub fn written(&self) -> usize {
    self.0.meta.wi as _
  }
}