mirror of
				https://github.com/juspay/hyperswitch.git
				synced 2025-10-31 10:06:32 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			98 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| #![allow(missing_docs)]
 | |
| 
 | |
| #[macro_export]
 | |
| macro_rules! newtype_impl {
 | |
|     ($is_pub:vis, $name:ident, $ty_path:path) => {
 | |
|         impl std::ops::Deref for $name {
 | |
|             type Target = $ty_path;
 | |
| 
 | |
|             fn deref(&self) -> &Self::Target {
 | |
|                 &self.0
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         impl std::ops::DerefMut for $name {
 | |
|             fn deref_mut(&mut self) -> &mut Self::Target {
 | |
|                 &mut self.0
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         impl From<$ty_path> for $name {
 | |
|             fn from(ty: $ty_path) -> Self {
 | |
|                 Self(ty)
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         impl $name {
 | |
|             pub fn into_inner(self) -> $ty_path {
 | |
|                 self.0
 | |
|             }
 | |
|         }
 | |
|     };
 | |
| }
 | |
| 
 | |
| #[macro_export]
 | |
| macro_rules! newtype {
 | |
|     ($is_pub:vis $name:ident = $ty_path:path) => {
 | |
|         $is_pub struct $name(pub $ty_path);
 | |
| 
 | |
|         $crate::newtype_impl!($is_pub, $name, $ty_path);
 | |
|     };
 | |
| 
 | |
|     ($is_pub:vis $name:ident = $ty_path:path, derives = ($($trt:path),*)) => {
 | |
|         #[derive($($trt),*)]
 | |
|         $is_pub struct $name(pub $ty_path);
 | |
| 
 | |
|         $crate::newtype_impl!($is_pub, $name, $ty_path);
 | |
|     };
 | |
| }
 | |
| 
 | |
| /// Use this to ensure that the corresponding
 | |
| /// openapi route has been implemented in the openapi crate
 | |
| #[macro_export]
 | |
| macro_rules! openapi_route {
 | |
|     ($route_name: ident) => {{
 | |
|         #[cfg(feature = "openapi")]
 | |
|         use openapi::routes::$route_name as _;
 | |
| 
 | |
|         $route_name
 | |
|     }};
 | |
| }
 | |
| 
 | |
| #[macro_export]
 | |
| macro_rules! fallback_reverse_lookup_not_found {
 | |
|     ($a:expr,$b:expr) => {
 | |
|         match $a {
 | |
|             Ok(res) => res,
 | |
|             Err(err) => {
 | |
|                 router_env::logger::error!(reverse_lookup_fallback = %err);
 | |
|                 match err.current_context() {
 | |
|                     errors::StorageError::ValueNotFound(_) => return $b,
 | |
|                     errors::StorageError::DatabaseError(data_err) => {
 | |
|                         match data_err.current_context() {
 | |
|                             diesel_models::errors::DatabaseError::NotFound => return $b,
 | |
|                             _ => return Err(err)
 | |
|                         }
 | |
|                     }
 | |
|                     _=> return Err(err)
 | |
|                 }
 | |
|             }
 | |
|         };
 | |
|     };
 | |
| }
 | |
| 
 | |
| #[macro_export]
 | |
| macro_rules! collect_missing_value_keys {
 | |
|     [$(($key:literal, $option:expr)),+] => {
 | |
|         {
 | |
|             let mut keys: Vec<&'static str> = Vec::new();
 | |
|             $(
 | |
|                 if $option.is_none() {
 | |
|                     keys.push($key);
 | |
|                 }
 | |
|             )*
 | |
|             keys
 | |
|         }
 | |
|     };
 | |
| }
 | 
