use crate::errors::Result;
use crate::state::DbState;
use std::sync::Arc;
use welds_connections::Row;
pub trait VecStateExt<T> {
fn to_vms(self) -> Arc<Vec<Arc<T>>>;
fn into_inners(self) -> Vec<T>;
}
impl<T> VecStateExt<T> for Vec<DbState<T>> {
fn to_vms(mut self) -> Arc<Vec<Arc<T>>> {
let vec: Vec<_> = self.drain(..).map(|x| x.into_vm()).collect();
Arc::new(vec)
}
fn into_inners(mut self) -> Vec<T> {
self.drain(..).map(|x| x.into_inner()).collect()
}
}
pub trait VecRowExt<T> {
fn collect_into(self) -> Result<Vec<T>>;
}
impl<T> VecRowExt<T> for Vec<Row>
where
T: TryFrom<Row>,
T::Error: Into<crate::WeldsError>,
{
fn collect_into(mut self) -> crate::errors::Result<Vec<T>> {
let outs: std::result::Result<Vec<T>, _> = self.drain(..).map(T::try_from).collect();
match outs {
Err(err) => Err(err.into()),
Ok(r) => Ok(r),
}
}
}