1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
use std::mem::transmute; pub trait ToBytes { fn to_bytes(self: Self) -> Vec<u8>; } impl ToBytes for u64 { fn to_bytes(self: Self) -> Vec<u8> { let slice = unsafe{transmute::<u64, [u8; 8]>(self)}; slice.to_vec() } } pub trait FromBytes { fn from_bytes(_bytes: Vec<u8>) -> Self; } impl FromBytes for u64 { fn from_bytes(bytes: Vec<u8>) -> u64 { if bytes.len() == 8 { let mut slice: [u8; 8] = [0; 8]; slice.copy_from_slice(&bytes[..]); unsafe{transmute::<[u8; 8], u64>(slice)} } else { 0 } } }