use super::*;
pub trait StreamPairExtManual {
#[doc(alias = "alsarawmidi_stream_pair_get_protocol_version")]
#[doc(alias = "get_protocol_version")]
fn protocol_version(&self) -> Result<&[u16; 3], glib::Error>;
#[doc(alias = "alsarawmidi_stream_pair_get_substream_status")]
fn substream_status<P: IsA<SubstreamStatus>>(
&self,
direction: StreamDirection,
substream_status: &mut P,
) -> Result<(), glib::Error>;
#[doc(alias = "alsarawmidi_stream_pair_read_from_substream")]
fn read_from_substream(&self, buf: &mut [u8]) -> Result<usize, glib::Error>;
}
impl<O: IsA<StreamPair>> StreamPairExtManual for O {
fn protocol_version(&self) -> Result<&[u16; 3], glib::Error> {
unsafe {
let mut triplet = std::ptr::null_mut() as *const [u16; 3];
let mut error = std::ptr::null_mut();
let is_ok = ffi::alsarawmidi_stream_pair_get_protocol_version(
self.as_ref().to_glib_none().0,
&mut triplet as *mut *const [u16; 3],
&mut error,
);
assert_eq!(is_ok == glib::ffi::GFALSE, !error.is_null());
if error.is_null() {
Ok(&*triplet)
} else {
Err(from_glib_full(error))
}
}
}
fn substream_status<P: IsA<SubstreamStatus>>(
&self,
direction: StreamDirection,
substream_status: &mut P,
) -> Result<(), glib::Error> {
unsafe {
let mut error = std::ptr::null_mut();
let is_ok = ffi::alsarawmidi_stream_pair_get_substream_status(
self.as_ref().to_glib_none().0,
direction.into_glib(),
&mut substream_status.as_ref().to_glib_none().0,
&mut error,
);
assert_eq!(is_ok == glib::ffi::GFALSE, !error.is_null());
if error.is_null() {
Ok(())
} else {
Err(from_glib_full(error))
}
}
}
fn read_from_substream(&self, buf: &mut [u8]) -> Result<usize, glib::Error> {
unsafe {
let mut len = buf.len();
let mut error = std::ptr::null_mut();
let is_ok = ffi::alsarawmidi_stream_pair_read_from_substream(
self.as_ref().to_glib_none().0,
&mut buf.as_mut_ptr(),
&mut len,
&mut error,
);
assert_eq!(is_ok == glib::ffi::GFALSE, !error.is_null());
if error.is_null() {
Ok(len)
} else {
Err(from_glib_full(error))
}
}
}
}