use crate::{Contextual, Object, SectorSubchannelFormat, SectorType, ffi};
use glib::{prelude::*, translate::*};
glib::wrapper! {
#[doc(alias = "MirageSector")]
pub struct Sector(Object<ffi::MirageSector, ffi::MirageSectorClass>) @extends Object, @implements Contextual;
match fn {
type_ => || ffi::mirage_sector_get_type(),
}
}
impl Sector {
pub const NONE: Option<&'static Sector> = None;
}
pub trait SectorExt: IsA<Sector> + 'static {
#[doc(alias = "mirage_sector_get_address")]
#[doc(alias = "get_address")]
fn address(&self) -> i32 {
unsafe { ffi::mirage_sector_get_address(self.as_ref().to_glib_none().0) }
}
#[doc(alias = "mirage_sector_get_sector_type")]
#[doc(alias = "get_sector_type")]
fn sector_type(&self) -> SectorType {
unsafe {
from_glib(ffi::mirage_sector_get_sector_type(
self.as_ref().to_glib_none().0,
))
}
}
#[doc(alias = "mirage_sector_scramble")]
fn scramble(&self) {
unsafe {
ffi::mirage_sector_scramble(self.as_ref().to_glib_none().0);
}
}
#[doc(alias = "mirage_sector_set_data")]
fn set_data(&self, buf: &[u8]) -> Result<(), glib::Error> {
let len = buf.len() as _;
unsafe {
let mut error = std::ptr::null_mut();
let is_ok = ffi::mirage_sector_set_data(
self.as_ref().to_glib_none().0,
buf.to_glib_none().0,
len,
&mut error,
);
debug_assert_eq!(is_ok == glib::ffi::GFALSE, !error.is_null());
if error.is_null() {
Ok(())
} else {
Err(from_glib_full(error))
}
}
}
#[doc(alias = "mirage_sector_set_edc_ecc")]
fn set_edc_ecc(&self, buf: &[u8]) -> Result<(), glib::Error> {
let len = buf.len() as _;
unsafe {
let mut error = std::ptr::null_mut();
let is_ok = ffi::mirage_sector_set_edc_ecc(
self.as_ref().to_glib_none().0,
buf.to_glib_none().0,
len,
&mut error,
);
debug_assert_eq!(is_ok == glib::ffi::GFALSE, !error.is_null());
if error.is_null() {
Ok(())
} else {
Err(from_glib_full(error))
}
}
}
#[doc(alias = "mirage_sector_set_header")]
fn set_header(&self, buf: &[u8]) -> Result<(), glib::Error> {
let len = buf.len() as _;
unsafe {
let mut error = std::ptr::null_mut();
let is_ok = ffi::mirage_sector_set_header(
self.as_ref().to_glib_none().0,
buf.to_glib_none().0,
len,
&mut error,
);
debug_assert_eq!(is_ok == glib::ffi::GFALSE, !error.is_null());
if error.is_null() {
Ok(())
} else {
Err(from_glib_full(error))
}
}
}
#[doc(alias = "mirage_sector_set_subchannel")]
fn set_subchannel(
&self,
format: SectorSubchannelFormat,
buf: &[u8],
) -> Result<(), glib::Error> {
let len = buf.len() as _;
unsafe {
let mut error = std::ptr::null_mut();
let is_ok = ffi::mirage_sector_set_subchannel(
self.as_ref().to_glib_none().0,
format.into_glib(),
buf.to_glib_none().0,
len,
&mut error,
);
debug_assert_eq!(is_ok == glib::ffi::GFALSE, !error.is_null());
if error.is_null() {
Ok(())
} else {
Err(from_glib_full(error))
}
}
}
#[doc(alias = "mirage_sector_set_subheader")]
fn set_subheader(&self, buf: &[u8]) -> Result<(), glib::Error> {
let len = buf.len() as _;
unsafe {
let mut error = std::ptr::null_mut();
let is_ok = ffi::mirage_sector_set_subheader(
self.as_ref().to_glib_none().0,
buf.to_glib_none().0,
len,
&mut error,
);
debug_assert_eq!(is_ok == glib::ffi::GFALSE, !error.is_null());
if error.is_null() {
Ok(())
} else {
Err(from_glib_full(error))
}
}
}
#[doc(alias = "mirage_sector_set_sync")]
fn set_sync(&self, buf: &[u8]) -> Result<(), glib::Error> {
let len = buf.len() as _;
unsafe {
let mut error = std::ptr::null_mut();
let is_ok = ffi::mirage_sector_set_sync(
self.as_ref().to_glib_none().0,
buf.to_glib_none().0,
len,
&mut error,
);
debug_assert_eq!(is_ok == glib::ffi::GFALSE, !error.is_null());
if error.is_null() {
Ok(())
} else {
Err(from_glib_full(error))
}
}
}
#[doc(alias = "mirage_sector_verify_lec")]
fn verify_lec(&self) -> bool {
unsafe {
from_glib(ffi::mirage_sector_verify_lec(
self.as_ref().to_glib_none().0,
))
}
}
#[doc(alias = "mirage_sector_verify_subchannel_crc")]
fn verify_subchannel_crc(&self) -> bool {
unsafe {
from_glib(ffi::mirage_sector_verify_subchannel_crc(
self.as_ref().to_glib_none().0,
))
}
}
}
impl<O: IsA<Sector>> SectorExt for O {}