use std::string::ToString;
use std::str;
pub trait Cast{
fn string(&self)->String{
String::new()
}
}
#[macro_export]
macro_rules! r#string {
($value:expr) => {
$crate::string::to_string($value)
};
}
#[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{
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())
}
}
}