use std::rc::Rc;
use std::sync::Arc;
pub trait Convert<TSource> {
fn convert(source: TSource) -> Self;
}
impl<T> Convert<T> for T {
#[inline(always)]
fn convert(source: T) -> T {source}
}
impl<T> Convert<&T> for T where T: Clone {
#[inline(always)]
fn convert(source: &T) -> T {source.clone()}
}
impl Convert<&str> for String {
fn convert(source: &str) -> Self {
source.to_string()
}
}
impl<T: Clone> Convert<&Rc<T>> for T {
fn convert(source: &Rc<T>) -> Self {
source.as_ref().clone()
}
}
impl<T: Clone> Convert<&Arc<T>> for T {
fn convert(source: &Arc<T>) -> Self {
source.as_ref().clone()
}
}