use openexr_sys as sys;
use crate::core::error::Error;
type Result<T, E = Error> = std::result::Result<T, E>;
#[repr(transparent)]
pub struct KeyCode(sys::Imf_KeyCode_t);
impl KeyCode {
pub fn film_mfc_code(&self) -> i32 {
let mut v = 0i32;
unsafe {
sys::Imf_KeyCode_filmMfcCode(&self.0, &mut v)
.into_result()
.expect("Unexpected exception from Imf_KeyCode_filmMfcCode");
}
v
}
pub fn set_film_mfc_code(&mut self, code: i32) -> Result<()> {
unsafe {
sys::Imf_KeyCode_setFilmMfcCode(&mut self.0, code).into_result()?;
}
Ok(())
}
pub fn film_type(&self) -> i32 {
let mut v = 0i32;
unsafe {
sys::Imf_KeyCode_filmType(&self.0, &mut v)
.into_result()
.expect("Unexpected exception from Imf_KeyCode_filmType");
}
v
}
pub fn set_film_type(&mut self, code: i32) -> Result<()> {
unsafe {
sys::Imf_KeyCode_setFilmType(&mut self.0, code).into_result()?;
}
Ok(())
}
pub fn prefix(&self) -> i32 {
let mut v = 0i32;
unsafe {
sys::Imf_KeyCode_filmType(&self.0, &mut v)
.into_result()
.expect("Unexpected exception from Imf_KeyCode_filmType");
}
v
}
pub fn set_prefix(&mut self, v: i32) -> Result<()> {
unsafe {
sys::Imf_KeyCode_setPrefix(&mut self.0, v).into_result()?;
}
Ok(())
}
pub fn count(&self) -> i32 {
let mut v = 0i32;
unsafe {
sys::Imf_KeyCode_filmType(&self.0, &mut v)
.into_result()
.expect("Unexpected exception from Imf_KeyCode_filmType");
}
v
}
pub fn set_count(&mut self, count: i32) -> Result<()> {
unsafe {
sys::Imf_KeyCode_setCount(&mut self.0, count).into_result()?;
}
Ok(())
}
pub fn perf_offset(&self) -> i32 {
let mut v = 0i32;
unsafe {
sys::Imf_KeyCode_filmType(&self.0, &mut v)
.into_result()
.expect("Unexpected exception from Imf_KeyCode_filmType");
}
v
}
pub fn set_perf_offset(&mut self, offset: i32) -> Result<()> {
unsafe {
sys::Imf_KeyCode_setPerfOffset(&mut self.0, offset)
.into_result()?;
}
Ok(())
}
pub fn perfs_per_frame(&self) -> i32 {
let mut v = 0i32;
unsafe {
sys::Imf_KeyCode_filmType(&self.0, &mut v)
.into_result()
.expect("Unexpected exception from Imf_KeyCode_filmType");
}
v
}
pub fn set_perfs_per_frame(&mut self, perfs: i32) -> Result<()> {
unsafe {
sys::Imf_KeyCode_setPerfsPerFrame(&mut self.0, perfs)
.into_result()?;
}
Ok(())
}
pub fn perfs_per_count(&self) -> i32 {
let mut v = 0i32;
unsafe {
sys::Imf_KeyCode_filmType(&self.0, &mut v)
.into_result()
.expect("Unexpected exception from Imf_KeyCode_filmType");
}
v
}
pub fn set_perfs_per_count(&mut self, perfs: i32) -> Result<()> {
unsafe {
sys::Imf_KeyCode_setPerfsPerCount(&mut self.0, perfs)
.into_result()?;
}
Ok(())
}
}
impl Default for KeyCode {
fn default() -> Self {
let mut inner = sys::Imf_KeyCode_t::default();
unsafe {
sys::Imf_KeyCode_ctor(&mut inner, 0, 0, 0, 0, 0, 4, 64)
.into_result()
.expect("Unexpected exception from Imf_KeyCode_ctor");
}
KeyCode(inner)
}
}
#[cfg(test)]
#[test]
fn test_keycode() {
let mut k = KeyCode::default();
assert!(k.set_film_mfc_code(-1).is_err());
assert!(k.set_film_mfc_code(1).is_ok());
assert_eq!(k.film_mfc_code(), 1);
}