#[macro_export] macro_rules! if_native { ($($item:item)*) => {$( #[cfg(not(target_arch = "wasm32"))] $item )*} } #[macro_export] macro_rules! if_wasm { ($($item:item)*) => {$( #[cfg(target_arch = "wasm32")] $item )*} } pub fn move_vec_element( vec: &mut Vec, filter: F, _from_index: usize, to_index: usize, ) -> Result where F: FnMut(&T) -> bool, { 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) } }, } } #[allow(dead_code)] pub fn timestamp() -> i64 { chrono::Utc::now().timestamp() } #[inline] pub fn md5>(data: T) -> String { let md5 = format!("{:x}", md5::compute(data)); md5 }