rust 是否存在可变片的现有枚举|拥有VC?

ijxebb2r  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(98)

我有一些结构体,它们可以被赋予一个可变切片或一个Vec来拥有。我能想到的最好的解决方案是制作一个简单的枚举,它可以包含一个切片或一个Vec,然后Deref s到一个切片。

pub enum DataSource<'a, T> {
    Borrowed(&'a mut [T]),
    Owned(Vec<T>),
}

impl<T> Deref for DataSource<'_, T> {
    type Target = [T];
    fn deref(&self) -> &Self::Target {
        match self {
            DataSource::Borrowed(val) => val,
            DataSource::Owned(val) => val,
        }
    }
}

impl<T> DerefMut for DataSource<'_, T> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        match self {
            DataSource::Borrowed(val) => val,
            DataSource::Owned(val) => val,
        }
    }
}

字符串
这看起来很简单(即使是not recommended to implement Deref for your own types),所以我肯定我不是第一个想到这个的人。
Rust std库中是否已经有类似的东西,或者是否有一个crate提供它?

相关问题