pub trait Sig {
fn get_sig(&self) -> Vec<u8>;
}
impl Sig for u8 {
fn get_sig(&self) -> Vec<u8> {
vec![*self]
}
}
impl Sig for u16 {
fn get_sig(&self) -> Vec<u8> {
Vec::from(self.to_ne_bytes())
}
}
impl Sig for u32 {
fn get_sig(&self) -> Vec<u8> {
Vec::from(self.to_ne_bytes())
}
}
impl Sig for u64 {
fn get_sig(&self) -> Vec<u8> {
Vec::from(self.to_ne_bytes())
}
}
impl Sig for i16 {
fn get_sig(&self) -> Vec<u8> {
Vec::from(self.to_ne_bytes())
}
}
impl Sig for i32 {
fn get_sig(&self) -> Vec<u8> {
Vec::from(self.to_ne_bytes())
}
}
impl Sig for Vec<u8> {
fn get_sig(&self) -> Vec<u8> {
self.clone()
}
}
impl Sig for Vec<u16> {
fn get_sig(&self) -> Vec<u8> {
let mut c = self.clone();
let ptr = c.as_mut_ptr();
let new_len = c.len() * std::mem::size_of::<u16>();
unsafe { Vec::<u8>::from_raw_parts(ptr as *mut u8, new_len, new_len) }
}
}
impl Sig for Vec<u32> {
fn get_sig(&self) -> Vec<u8> {
let mut c = self.clone();
let ptr = c.as_mut_ptr();
let new_len = c.len() * std::mem::size_of::<u32>();
unsafe { Vec::<u8>::from_raw_parts(ptr as *mut u8, new_len, new_len) }
}
}
impl Sig for String {
fn get_sig(&self) -> Vec<u8> {
let s: &[u8] = self.as_ref();
s.to_vec()
}
}