pub use common_utils::newtype; #[macro_export] macro_rules! get_payment_link_config_value_based_on_priority { ($config:expr, $business_config:expr, $field:ident, $default:expr) => { $config .as_ref() .and_then(|pc_config| pc_config.theme_config.$field.clone()) .or_else(|| { $business_config .as_ref() .and_then(|business_config| business_config.$field.clone()) }) .unwrap_or($default) }; } #[macro_export] macro_rules! get_payment_link_config_value { ($config:expr, $business_config:expr, $(($field:ident, $default:expr)),*) => { ( $(get_payment_link_config_value_based_on_priority!($config, $business_config, $field, $default)),* ) }; ($config:expr, $business_config:expr, $(($field:ident)),*) => { ( $( $config .as_ref() .and_then(|pc_config| pc_config.theme_config.$field.clone()) .or_else(|| { $business_config .as_ref() .and_then(|business_config| business_config.$field.clone()) }) ),* ) }; ($config:expr, $business_config:expr, $(($field:ident $(, $transform:expr)?)),* $(,)?) => { ( $( $config .as_ref() .and_then(|pc_config| pc_config.theme_config.$field.clone()) .or_else(|| { $business_config .as_ref() .and_then(|business_config| { let value = business_config.$field.clone(); $(let value = value.map($transform);)? value }) }) ),* ) }; }