Skip to content

Commit

Permalink
Extract if false error patter to ns::if_false
Browse files Browse the repository at this point in the history
  • Loading branch information
yury committed Dec 28, 2023
1 parent 72628a0 commit 1eb201e
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 113 deletions.
112 changes: 19 additions & 93 deletions cidre/src/av/audio/session.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
use crate::{arc, define_cls, objc};
use crate::{define_obj_type, ns};
use crate::{arc, define_cls, define_obj_type, ns, objc};

mod types;
pub use types::ActivationOpts;
Expand Down Expand Up @@ -54,14 +53,7 @@ impl Session {
) -> bool;

pub fn set_category<'ear>(&mut self, val: &Category) -> Result<(), &'ear ns::Error> {
let mut err = None;
unsafe {
if self.set_category_err(val, &mut err) {
Ok(())
} else {
Err(err.unwrap_unchecked())
}
}
ns::if_false(|err| unsafe { self.set_category_err(val, err) })
}

#[objc::msg_send(setCategory:withOptions:error:)]
Expand All @@ -77,14 +69,7 @@ impl Session {
val: &Category,
options: CategoryOpts,
) -> Result<(), &'ear ns::Error> {
let mut err = None;
unsafe {
if self.set_category_with_opts_err(val, options, &mut err) {
Ok(())
} else {
Err(err.unwrap_unchecked())
}
}
ns::if_false(|err| unsafe { self.set_category_with_opts_err(val, options, err) })
}

#[objc::msg_send(setCategory:mode:options:error:)]
Expand All @@ -102,14 +87,7 @@ impl Session {
mode: &Mode,
options: CategoryOpts,
) -> Result<(), &'ear ns::Error> {
let mut err = None;
unsafe {
if self.set_category_mode_opts_err(val, mode, options, &mut err) {
Ok(())
} else {
Err(err.unwrap_unchecked())
}
}
ns::if_false(|err| unsafe { self.set_category_mode_opts_err(val, mode, options, err) })
}

#[objc::msg_send(setCategory:mode:routeSharingPolicy:options:error:)]
Expand All @@ -129,20 +107,15 @@ impl Session {
route_sharing_policy: RouteSharingPolicy,
options: CategoryOpts,
) -> Result<(), &'ear ns::Error> {
let mut err = None;
unsafe {
if self.set_category_mode_policy_opts_err_throws(
ns::if_false(|err| unsafe {
self.set_category_mode_policy_opts_err_throws(
val,
mode,
route_sharing_policy,
options,
&mut err,
) {
Ok(())
} else {
Err(err.unwrap_unchecked())
}
}
err,
)
})
}

pub fn set_category_mode_policy_opts<'ear>(
Expand Down Expand Up @@ -180,14 +153,7 @@ impl Session {
) -> bool;

pub fn set_mode<'ear>(&mut self, val: &Mode) -> Result<(), &'ear ns::Error> {
let mut err = None;
unsafe {
if self.set_mode_err(val, &mut err) {
Ok(())
} else {
Err(err.unwrap_unchecked())
}
}
ns::if_false(|err| unsafe { self.set_mode_err(val, err) })
}

#[objc::msg_send(mode)]
Expand All @@ -204,14 +170,9 @@ impl Session {
&mut self,
val: bool,
) -> Result<(), &'ear ns::Error> {
let mut err = None;
unsafe {
if self.set_allow_haptics_and_sys_sounds_during_record_err(val, &mut err) {
Ok(())
} else {
Err(err.unwrap_unchecked())
}
}
ns::if_false(|err| unsafe {
self.set_allow_haptics_and_sys_sounds_during_record_err(val, err)
})
}

#[objc::msg_send(preferredInput)]
Expand All @@ -232,14 +193,7 @@ impl Session {
&mut self,
val: PortOverride,
) -> Result<(), &'ear ns::Error> {
let mut err = None;
unsafe {
if self.override_output_audio_port_err(val, &mut err) {
Ok(())
} else {
Err(err.unwrap_unchecked())
}
}
ns::if_false(|err| unsafe { self.override_output_audio_port_err(val, err) })
}
}

Expand All @@ -253,14 +207,7 @@ impl Session {
) -> bool;

pub fn set_active<'ear>(&mut self, val: bool) -> Result<(), &'ear ns::Error> {
let mut err = None;
unsafe {
if self.set_active_err(val, &mut err) {
Ok(())
} else {
Err(err.unwrap_unchecked())
}
}
ns::if_false(|err| unsafe { self.set_active_err(val, err) })
}

#[objc::msg_send(setActive:withOptions:error:)]
Expand All @@ -276,14 +223,7 @@ impl Session {
val: bool,
options: SetActiveOpts,
) -> Result<(), &'ear ns::Error> {
let mut err = None;
unsafe {
if self.set_active_with_opts_err(val, options, &mut err) {
Ok(())
} else {
Err(err.unwrap_unchecked())
}
}
ns::if_false(|err| unsafe { self.set_active_with_opts_err(val, options, err) })
}
}

Expand All @@ -298,21 +238,14 @@ impl Session {

/// The preferred hardware sample rate for the session. The actual sample rate may be different.
pub fn set_preferred_sample_rate<'ear>(&mut self, val: f64) -> Result<(), &'ear ns::Error> {
let mut err = None;
unsafe {
if self.set_preferred_sample_rate_err(val, &mut err) {
Ok(())
} else {
Err(err.unwrap_unchecked())
}
}
ns::if_false(|err| unsafe { self.set_preferred_sample_rate_err(val, err) })
}

#[objc::msg_send(preferredSampleRate)]
pub fn preferred_sample_rate(&self) -> f64;

#[objc::msg_send(setPreferredIOBufferDuration:error:)]
pub fn set_preferred_io_buff_duration_err<'ear>(
pub unsafe fn set_preferred_io_buff_duration_err<'ear>(
&mut self,
val: ns::TimeInterval,
err: *mut Option<&'ear ns::Error>,
Expand All @@ -322,14 +255,7 @@ impl Session {
&mut self,
val: ns::TimeInterval,
) -> Result<(), &'ear ns::Error> {
let mut err = None;
unsafe {
if self.set_preferred_io_buff_duration_err(val, &mut err) {
Ok(())
} else {
Err(err.unwrap_unchecked())
}
}
ns::if_false(|err| unsafe { self.set_preferred_io_buff_duration_err(val, err) })
}

//...
Expand Down
18 changes: 2 additions & 16 deletions cidre/src/av/audio/session/route.rs
Original file line number Diff line number Diff line change
Expand Up @@ -181,14 +181,7 @@ impl DataSrcDesc {
&mut self,
val: Option<&PolarPattern>,
) -> Result<(), &'ear ns::Error> {
let mut err = None;
unsafe {
if self.set_preferred_polar_pattern_err(val, &mut err) {
Ok(())
} else {
Err(err.unwrap_unchecked())
}
}
ns::if_false(|err| unsafe { self.set_preferred_polar_pattern_err(val, err) })
}
}

Expand Down Expand Up @@ -238,14 +231,7 @@ impl PortDesc {
&mut self,
val: Option<&DataSrcDesc>,
) -> Result<(), &'ear ns::Error> {
let mut err = None;
unsafe {
if self.set_preferred_data_src_err(val, &mut err) {
Ok(())
} else {
Err(err.unwrap_unchecked())
}
}
ns::if_false(|err| unsafe { self.set_preferred_data_src_err(val, err) })
}
}

Expand Down
8 changes: 4 additions & 4 deletions cidre/src/av/audio/speech_synthesis.rs
Original file line number Diff line number Diff line change
Expand Up @@ -340,19 +340,19 @@ impl Synthesizer {
Err(())
}
}
#[cfg(target_os = "ios")]
#[cfg(any(target_os = "ios", target_os = "watchos", target_os = "tvos"))]
#[objc::msg_send(usesApplicationAudioSession)]
pub fn uses_app_audio_session(&self) -> bool;

#[cfg(target_os = "ios")]
#[cfg(any(target_os = "ios", target_os = "watchos", target_os = "tvos"))]
#[objc::msg_send(setUsesApplicationAudioSession:)]
pub fn set_uses_app_audio_session(&mut self, val: bool);

#[cfg(target_os = "ios")]
#[cfg(any(target_os = "ios", target_os = "watchos", target_os = "tvos"))]
#[objc::msg_send(mixToTelephonyUplink)]
pub fn mix_to_telephony_uplink(&self) -> bool;

#[cfg(target_os = "ios")]
#[cfg(any(target_os = "ios", target_os = "watchos", target_os = "tvos"))]
#[objc::msg_send(setMixToTelephonyUplink:)]
pub fn set_mix_to_telephony_uplink(&mut self, val: bool);

Expand Down
1 change: 1 addition & 0 deletions cidre/src/ns.rs
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ pub use date::TimeInterval;
pub use date::TIME_INTERVAL_SINCE_1970;

mod error;
pub use error::if_false;
pub use error::Domain as ErrorDomain;
pub use error::Error;

Expand Down
12 changes: 12 additions & 0 deletions cidre/src/ns/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,18 @@ impl<'ear> From<&'ear ns::Error> for ns::ExErr<'ear> {
}
}

pub fn if_false<'ear, F>(f: F) -> Result<(), &'ear ns::Error>
where
F: FnOnce(*mut Option<&'ear ns::Error>) -> bool,
{
let mut err = None;
if f(&mut err) {
Ok(())
} else {
unsafe { Err(err.unwrap_unchecked()) }
}
}

define_obj_type!(
#[doc(alias = "NSError")]
pub Error(ns::Id)
Expand Down

0 comments on commit 1eb201e

Please sign in to comment.