libmirage 0.1.1

Rust bindings for libMirage
Documentation
use crate::{Stream, ffi};
use glib::prelude::*;
use glib::translate::*;
use std::ffi::c_void;
use std::ptr;

pub trait StreamExtManual: IsA<Stream> + 'static {
    #[doc(alias = "mirage_stream_read")]
    fn read(&self, buffer: &mut [u8]) -> Result<isize, glib::Error> {
        let mut error = ptr::null_mut();
        unsafe {
            let ret = ffi::mirage_stream_read(
                self.as_ref().to_glib_none().0,
                buffer.as_mut_ptr() as *mut c_void,
                buffer.len(),
                &mut error,
            );
            if error.is_null() {
                Ok(ret)
            } else {
                Err(from_glib_full(error))
            }
        }
    }

    #[doc(alias = "mirage_stream_read")]
    fn write(&self, buffer: &[u8]) -> Result<isize, glib::Error> {
        let mut error = ptr::null_mut();
        unsafe {
            let ret = ffi::mirage_stream_write(
                self.as_ref().to_glib_none().0,
                mut_override(buffer.as_ptr()) as *mut c_void,
                buffer.len(),
                &mut error,
            );
            if error.is_null() {
                Ok(ret)
            } else {
                Err(from_glib_full(error))
            }
        }
    }
}

impl<O: IsA<Stream>> StreamExtManual for O {}