ascent 0.6.0-alpha

Logic programming in Rust
Documentation

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()
   }
}