cast_wd 0.0.5

这是一个类型转换的package
Documentation
//! 类型转换为string
//! author:wangdong
//! time:2020-09-30 14:13:56
use std::string::ToString;
use std::str;
//use std::fmt::Write;

pub trait Cast{
    fn string(&self)->String{
        String::new()
    }
}
/// 转换类型为string
/// 
/// #Examples
/// 
/// ```
/// let a = to_string!(32);
/// 
/// ```
#[macro_export]
macro_rules! r#string {
    ($value:expr) => {
        $crate::string::to_string($value)
    };
}

/// 转换类型为string
/// 
/// #Examples
/// 
/// ```
/// let a = to_string(32);
/// 
/// ```
#[allow(dead_code)]
pub fn to_string<T:Cast>(opt:T)->String{
    opt.string()
}

impl Cast for &str{
    fn string(&self)->String{
        String::from(*self)
    }
}

impl Cast for i8{
    fn string(&self)->String{
        self.to_string()
    }
}
impl Cast for i16{
    fn string(&self)->String{
        self.to_string()
    }
}
impl Cast for i32{
    fn string(&self)->String{
        self.to_string()
    }
}
impl Cast for i64{
    fn string(&self)->String{
        self.to_string()
    }
}
impl Cast for i128{
    fn string(&self)->String{
        self.to_string()
    }
}
impl Cast for u8{
    fn string(&self)->String{
        self.to_string()
    }
}
impl Cast for u16{
    fn string(&self)->String{
        self.to_string()
    }
}
impl Cast for u32{
    fn string(&self)->String{
        self.to_string()
    }
}
impl Cast for u64{
    fn string(&self)->String{
        self.to_string()
    }
}
impl Cast for u128{
    fn string(&self)->String{
        self.to_string()
    }
}

impl Cast for f32{
    fn string(&self)->String{
        self.to_string()
    }
}

impl Cast for f64{
    fn string(&self)->String{
        self.to_string()
    }
}

impl Cast for bool{
    fn string(&self)->String{
        self.to_string()
    }
}

impl Cast for &[u8] {
    fn string(&self)->String{
    //     let mut signature_string = String::new();
    //     for a in self.iter() { 
    //         match write!(signature_string, "{:02x}", a){
    //             Err(_)=>{
    //                 return String::new();
    //             },
    //             Ok(())=>{}
    //         }
    //     }
    //    signature_string
        unsafe{
            String::from_utf8_unchecked((*self).to_vec())
        }
    }
}

impl Cast for Vec<u8> {
    fn string(&self)->String{
        unsafe{
            String::from_utf8_unchecked(self.to_vec())
        }
    }
}