     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35

    use crate::borrow::Cow;
    use core::iter::FromIterator;

    use super::Vec;

    #[stable(feature = "cow_from_vec", since = "1.8.0")]
    impl<'a, T: Clone> From<&'a [T]> for Cow<'a, [T]> {
        fn from(s: &'a [T]) -> Cow<'a, [T]> {
            Cow::Borrowed(s)
        }
    }

    #[stable(feature = "cow_from_vec", since = "1.8.0")]
    impl<'a, T: Clone> From<Vec<T>> for Cow<'a, [T]> {
        fn from(v: Vec<T>) -> Cow<'a, [T]> {
            Cow::Owned(v)
        }
    }

    #[stable(feature = "cow_from_vec_ref", since = "1.28.0")]
    impl<'a, T: Clone> From<&'a Vec<T>> for Cow<'a, [T]> {
        fn from(v: &'a Vec<T>) -> Cow<'a, [T]> {
            Cow::Borrowed(v.as_slice())
        }
    }

    #[stable(feature = "rust1", since = "1.0.0")]
    impl<'a, T> FromIterator<T> for Cow<'a, [T]>
    where
        T: Clone,
    {
        fn from_iter<I: IntoIterator<Item = T>>(it: I) -> Cow<'a, [T]> {
            Cow::Owned(FromIterator::from_iter(it))
        }
    }