use crate::managers::InFlight;
use alloy_json_rpc::{Id, Response, SubId};
use alloy_primitives::map::HashMap;
#[derive(Debug, Default)]
pub(crate) struct RequestManager {
reqs: HashMap<Id, InFlight>,
}
impl RequestManager {
pub(crate) fn len(&self) -> usize {
self.reqs.len()
}
pub(crate) fn iter(&self) -> impl Iterator<Item = (&Id, &InFlight)> {
self.reqs.iter()
}
pub(crate) fn insert(&mut self, in_flight: InFlight) {
self.reqs.insert(in_flight.request.id().clone(), in_flight);
}
pub(crate) fn handle_response(&mut self, resp: Response) -> Option<(SubId, InFlight)> {
if let Some(in_flight) = self.reqs.remove(&resp.id) {
return in_flight.fulfill(resp);
}
None
}
}