use crate::node::Node; use sha2::Digest; pub fn parse_node_ip(node: &Node) -> String { parse_basic_ip(node.ip.to_string(), node.port) } pub fn parse_basic_ip(ip: String, port: i32) -> String { format!("{}:{}", ip, port) } pub fn usize_to_u8_array(num: u32) -> [u8; 4] { u32::to_le_bytes(num) } pub fn u8_array_to_usize(bytes: [u8; 4]) -> usize { u32::from_le_bytes(bytes) as usize } pub fn hasher(data: &[u8]) -> Vec { let mut hasher = sha2::Sha256::new(); hasher.update(data); hasher.finalize()[..].to_vec() } #[cfg(test)] mod tests { use crate::utils::{u8_array_to_usize, usize_to_u8_array}; #[tokio::test] async fn test_usize_to_u8_array() { let message = "Hello".repeat(100000); let bytes = message.as_bytes(); let len = bytes.len(); assert_eq!(len, 500000_usize); let to_u8_array = usize_to_u8_array(len as u32); let expected: [u8; 4] = [32, 161, 7, 0]; assert_eq!(to_u8_array, expected); assert_eq!(500000_usize, u8_array_to_usize(to_u8_array)); assert_eq!(usize_to_u8_array(500000), expected.to_owned()); } }