use vecdb::IterableBoxedVec; #[derive(Clone)] pub enum Source { Compute, None, Vec(IterableBoxedVec), } impl Source { pub fn is_compute(&self) -> bool { matches!(self, Self::Compute) } pub fn is_none(&self) -> bool { matches!(self, Self::None) } pub fn is_vec(&self) -> bool { matches!(self, Self::Vec(_)) } pub fn vec(self) -> Option> { match self { Self::Vec(v) => Some(v), _ => None, } } } impl From for Source { #[inline] fn from(value: bool) -> Self { if value { Self::Compute } else { Self::None } } } impl From> for Source { #[inline] fn from(value: IterableBoxedVec) -> Self { Self::Vec(value) } } impl From>> for Source { #[inline] fn from(value: Option>) -> Self { if let Some(v) = value { Self::Vec(v) } else { Self::None } } }