mirror of
				https://github.com/juspay/hyperswitch.git
				synced 2025-10-31 18:17:13 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			147 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			147 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| #![allow(dead_code, clippy::unwrap_used, clippy::panic_in_result_fn)]
 | |
| 
 | |
| use masking as pii;
 | |
| 
 | |
| #[test]
 | |
| fn basic() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
 | |
|     use pii::{Secret, SerializableSecret, ZeroizableSecret};
 | |
|     use serde::Serialize;
 | |
| 
 | |
|     #[derive(Clone, Debug, Serialize, PartialEq, Eq)]
 | |
|     pub struct AccountNumber(String);
 | |
| 
 | |
|     impl ZeroizableSecret for AccountNumber {
 | |
|         fn zeroize(&mut self) {
 | |
|             self.0.zeroize();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     impl SerializableSecret for AccountNumber {}
 | |
| 
 | |
|     #[derive(Clone, Debug, Serialize, PartialEq, Eq)]
 | |
|     pub struct Composite {
 | |
|         secret_number: Secret<AccountNumber>,
 | |
|         not_secret: String,
 | |
|     }
 | |
| 
 | |
|     // construct
 | |
| 
 | |
|     let secret_number = Secret::<AccountNumber>::new(AccountNumber("abc".to_string()));
 | |
|     let not_secret = "not secret".to_string();
 | |
|     let composite = Composite {
 | |
|         secret_number,
 | |
|         not_secret,
 | |
|     };
 | |
| 
 | |
|     // clone
 | |
| 
 | |
|     let composite2 = composite.clone();
 | |
|     assert_eq!(composite, composite2);
 | |
| 
 | |
|     // format
 | |
| 
 | |
|     let got = format!("{:?}", composite);
 | |
|     let exp = "Composite { secret_number: *** basic::basic::AccountNumber ***, not_secret: \"not secret\" }";
 | |
|     assert_eq!(got, exp);
 | |
| 
 | |
|     // serialize
 | |
| 
 | |
|     let got = serde_json::to_string(&composite).unwrap();
 | |
|     let exp = "{\"secret_number\":\"abc\",\"not_secret\":\"not secret\"}";
 | |
|     assert_eq!(got, exp);
 | |
| 
 | |
|     // end
 | |
| 
 | |
|     Ok(())
 | |
| }
 | |
| 
 | |
| #[test]
 | |
| fn without_serialize() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
 | |
|     use pii::{Secret, ZeroizableSecret};
 | |
|     use serde::Serialize;
 | |
| 
 | |
|     #[derive(Clone, Debug, Serialize, PartialEq, Eq)]
 | |
|     pub struct AccountNumber(String);
 | |
| 
 | |
|     impl ZeroizableSecret for AccountNumber {
 | |
|         fn zeroize(&mut self) {
 | |
|             self.0.zeroize();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     #[derive(Clone, Debug, Serialize, PartialEq, Eq)]
 | |
|     pub struct Composite {
 | |
|         #[serde(skip)]
 | |
|         secret_number: Secret<AccountNumber>,
 | |
|         not_secret: String,
 | |
|     }
 | |
| 
 | |
|     // construct
 | |
| 
 | |
|     let secret_number = Secret::<AccountNumber>::new(AccountNumber("abc".to_string()));
 | |
|     let not_secret = "not secret".to_string();
 | |
|     let composite = Composite {
 | |
|         secret_number,
 | |
|         not_secret,
 | |
|     };
 | |
| 
 | |
|     // format
 | |
| 
 | |
|     let got = format!("{:?}", composite);
 | |
|     let exp = "Composite { secret_number: *** basic::without_serialize::AccountNumber ***, not_secret: \"not secret\" }";
 | |
|     assert_eq!(got, exp);
 | |
| 
 | |
|     // serialize
 | |
| 
 | |
|     let got = serde_json::to_string(&composite).unwrap();
 | |
|     let exp = "{\"not_secret\":\"not secret\"}";
 | |
|     assert_eq!(got, exp);
 | |
| 
 | |
|     // end
 | |
| 
 | |
|     Ok(())
 | |
| }
 | |
| 
 | |
| #[test]
 | |
| fn for_string() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
 | |
|     use pii::Secret;
 | |
|     use serde::Serialize;
 | |
| 
 | |
|     #[derive(Clone, Debug, Serialize, PartialEq, Eq)]
 | |
|     pub struct Composite {
 | |
|         secret_number: Secret<String>,
 | |
|         not_secret: String,
 | |
|     }
 | |
| 
 | |
|     // construct
 | |
| 
 | |
|     let secret_number = Secret::<String>::new("abc".to_string());
 | |
|     let not_secret = "not secret".to_string();
 | |
|     let composite = Composite {
 | |
|         secret_number,
 | |
|         not_secret,
 | |
|     };
 | |
| 
 | |
|     // clone
 | |
| 
 | |
|     let composite2 = composite.clone();
 | |
|     assert_eq!(composite, composite2);
 | |
| 
 | |
|     // format
 | |
| 
 | |
|     let got = format!("{:?}", composite);
 | |
|     let exp =
 | |
|         "Composite { secret_number: *** alloc::string::String ***, not_secret: \"not secret\" }";
 | |
|     assert_eq!(got, exp);
 | |
| 
 | |
|     // serialize
 | |
| 
 | |
|     let got = serde_json::to_string(&composite).unwrap();
 | |
|     let exp = "{\"secret_number\":\"abc\",\"not_secret\":\"not secret\"}";
 | |
|     assert_eq!(got, exp);
 | |
| 
 | |
|     // end
 | |
| 
 | |
|     Ok(())
 | |
| }
 | 
