tina-core 0.0.2

Tina platform
Documentation
//! ToOwned转换扩展
/// Option解开
pub trait OptionToOwned<T> {
    /// Option解开
    fn unwrap_to_owned_or_else<F>(&self, f: F) -> T
    where
        F: Fn() -> T;
}

impl<T> OptionToOwned<T> for Option<&T>
where
    T: ToOwned<Owned = T>,
{
    fn unwrap_to_owned_or_else<F>(&self, f: F) -> T
    where
        F: Fn() -> T,
    {
        self.map(|o| o.to_owned()).unwrap_or_else(f)
    }
}

/// ToOwned扩展
pub trait ToOwnedExt<T> {
    /// 自定义ToOwned
    fn to_owned(&self) -> T;
}

impl<T, R> ToOwnedExt<Vec<R>> for Vec<&T>
where
    T: ToOwned<Owned = R> + ?Sized,
{
    fn to_owned(&self) -> Vec<R> {
        self.iter().map(|&o| o.to_owned()).collect()
    }
}

impl<T, R> ToOwnedExt<Option<R>> for Option<&T>
where
    T: ToOwned<Owned = R> + ?Sized,
{
    fn to_owned(&self) -> Option<R> {
        self.map(|o| o.to_owned())
    }
}