use super::Batcher;
use crate::inferer::{Inferer, Response, State};
use std::collections::HashMap;
pub struct Batched<Inf: Inferer> {
inner: Inf,
batcher: Batcher,
}
impl<Inf> Batched<Inf>
where
Inf: Inferer,
{
pub fn wrap(inferer: Inf) -> Self {
let batcher = Batcher::new(&inferer);
Self {
batcher,
inner: inferer,
}
}
pub fn push(&mut self, id: u64, state: State<'_>) -> anyhow::Result<()> {
self.batcher.push(id, state)
}
pub fn extend<'a, Iter: IntoIterator<Item = (u64, State<'a>)>>(
&mut self,
states: Iter,
) -> anyhow::Result<()> {
self.batcher.extend(states)
}
pub fn execute(&mut self) -> anyhow::Result<HashMap<u64, Response<'_>>> {
self.batcher.execute(&self.inner)
}
pub fn into_parts(self) -> (Inf, Batcher) {
(self.inner, self.batcher)
}
}