我有一些结构体,它们可以被赋予一个可变切片或一个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提供它?
1条答案
按热度按时间izj3ouym1#
either::Either
实现Deref
和DerefMut
,如果两端deref到相同的类型。