| 
									
										
										
										
											2023-02-13 09:29:49 +08:00
										 |  |  | pub fn move_vec_element<T, F>(
 | 
					
						
							|  |  |  |   vec: &mut Vec<T>,
 | 
					
						
							|  |  |  |   filter: F,
 | 
					
						
							|  |  |  |   _from_index: usize,
 | 
					
						
							|  |  |  |   to_index: usize,
 | 
					
						
							|  |  |  | ) -> Result<bool, String>
 | 
					
						
							| 
									
										
										
										
											2022-04-28 16:02:03 +08:00
										 |  |  | where
 | 
					
						
							| 
									
										
										
										
											2023-02-13 09:29:49 +08:00
										 |  |  |   F: FnMut(&T) -> bool,
 | 
					
						
							| 
									
										
										
										
											2022-04-28 16:02:03 +08:00
										 |  |  | {
 | 
					
						
							| 
									
										
										
										
											2023-02-13 09:29:49 +08:00
										 |  |  |   match vec.iter().position(filter) {
 | 
					
						
							|  |  |  |     None => Ok(false),
 | 
					
						
							|  |  |  |     Some(index) => {
 | 
					
						
							|  |  |  |       if vec.len() > to_index {
 | 
					
						
							|  |  |  |         let removed_element = vec.remove(index);
 | 
					
						
							|  |  |  |         vec.insert(to_index, removed_element);
 | 
					
						
							|  |  |  |         Ok(true)
 | 
					
						
							|  |  |  |       } else {
 | 
					
						
							|  |  |  |         let msg = format!(
 | 
					
						
							|  |  |  |           "Move element to invalid index: {}, current len: {}",
 | 
					
						
							|  |  |  |           to_index,
 | 
					
						
							|  |  |  |           vec.len()
 | 
					
						
							|  |  |  |         );
 | 
					
						
							|  |  |  |         Err(msg)
 | 
					
						
							|  |  |  |       }
 | 
					
						
							|  |  |  |     },
 | 
					
						
							|  |  |  |   }
 | 
					
						
							| 
									
										
										
										
											2022-04-28 16:02:03 +08:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #[allow(dead_code)]
 | 
					
						
							|  |  |  | pub fn timestamp() -> i64 {
 | 
					
						
							| 
									
										
										
										
											2023-02-13 09:29:49 +08:00
										 |  |  |   chrono::Utc::now().timestamp()
 | 
					
						
							| 
									
										
										
										
											2022-04-28 16:02:03 +08:00
										 |  |  | }
 | 
					
						
							| 
									
										
										
										
											2023-01-30 11:11:19 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | #[inline]
 | 
					
						
							|  |  |  | pub fn md5<T: AsRef<[u8]>>(data: T) -> String {
 | 
					
						
							| 
									
										
										
										
											2023-02-13 09:29:49 +08:00
										 |  |  |   let md5 = format!("{:x}", md5::compute(data));
 | 
					
						
							|  |  |  |   md5
 | 
					
						
							| 
									
										
										
										
											2023-01-30 11:11:19 +08:00
										 |  |  | }
 |