use crate::{Backend, UnitHttpRequest, UnitHttpResponse};
use std::cell::RefCell;
use std::collections::VecDeque;
pub struct TraceBackend<B: Backend> {
response: B,
calls: RefCell<VecDeque<UnitHttpRequest>>,
}
impl<B: Backend> TraceBackend<B> {
pub fn new(response: B) -> Self {
Self {
response,
calls: Default::default(),
}
}
pub fn next(&self) -> Option<UnitHttpRequest> {
self.calls.borrow_mut().pop_front()
}
}
impl<B: Backend> Backend for TraceBackend<B> {
fn call(&self, req: UnitHttpRequest) -> UnitHttpResponse {
self.calls.borrow_mut().push_back(req.clone());
self.response.call(req)
}
}