rust_macios/foundation/
ns_decimal_number_handler.rs

1use libc::c_short;
2use objc::{msg_send, sel, sel_impl};
3
4use crate::{
5    object,
6    objective_c_runtime::{
7        macros::interface_impl,
8        traits::{FromId, PNSObject},
9    },
10};
11
12use super::NSRoundingMode;
13
14object! {
15    /// A class that adopts the decimal number behaviors protocol.
16    unsafe pub struct NSDecimalNumberHandler;
17}
18
19#[interface_impl(NSObject)]
20impl NSDecimalNumberHandler {
21    /// Returns the default instance of [`NSDecimalNumberHandler`].
22    #[property]
23    pub fn default_decimal_number_handler() -> NSDecimalNumberHandler {
24        unsafe { msg_send![Self::m_class(), defaultDecimalNumberHandler] }
25    }
26
27    /// Returns an [`NSDecimalNumberHandler`] object with customized behavior.
28    #[method]
29    pub fn decimal_number_handler_with_rounding_mode_scale_raise_on_exactness_raise_on_overflow_raise_on_underflow_raise_on_divide_by_zero(
30        rounding_mode: NSRoundingMode,
31        scale: c_short,
32        exact: bool,
33        overflow: bool,
34        underflow: bool,
35        divide_by_zero: bool,
36    ) -> Self
37    where
38        Self: Sized + FromId,
39    {
40        unsafe {
41            Self::from_id(
42                msg_send![Self::m_class(), decimalNumberHandlerWithRoundingMode: rounding_mode scale: scale raiseOnExactness: exact raiseOnOverflow: overflow raiseOnUnderflow: underflow raiseOnDivideByZero: divide_by_zero ],
43            )
44        }
45    }
46
47    /// Returns an [`NSDecimalNumberHandler`] object initialized so it behaves as specified by the method’s arguments.
48    #[method]
49    pub fn init_with_rounding_mode_scale_raise_on_exactness_raise_on_overflow_raise_on_underflow_raise_on_divide_by_zero(
50        &mut self,
51        rounding_mode: NSRoundingMode,
52        scale: c_short,
53        exact: bool,
54        overflow: bool,
55        underflow: bool,
56        divide_by_zero: bool,
57    ) -> Self
58    where
59        Self: Sized + FromId,
60    {
61        unsafe {
62            Self::from_id(
63                msg_send![self.m_self(), initWithRoundingMode: rounding_mode scale: scale raiseOnExactness: exact raiseOnOverflow: overflow raiseOnUnderflow: underflow raiseOnDivideByZero: divide_by_zero ],
64            )
65        }
66    }
67}