use crate::mock_server::bare_server::{BareMockServer, RequestRecording};
use crate::mock_server::exposed_server::InnerServer;
use crate::MockServer;
use std::net::TcpListener;
pub struct MockServerBuilder {
listener: Option<TcpListener>,
record_incoming_requests: bool,
}
impl MockServerBuilder {
pub(super) fn new() -> Self {
Self {
listener: None,
record_incoming_requests: true,
}
}
pub fn listener(mut self, listener: TcpListener) -> Self {
self.listener = Some(listener);
self
}
pub fn disable_request_recording(mut self) -> Self {
self.record_incoming_requests = false;
self
}
pub(super) async fn build_bare(self) -> BareMockServer {
let listener = if let Some(listener) = self.listener {
listener
} else {
TcpListener::bind("127.0.0.1:0").expect("Failed to bind an OS port for a mock server.")
};
let recording = if self.record_incoming_requests {
RequestRecording::Enabled
} else {
RequestRecording::Disabled
};
BareMockServer::start(listener, recording).await
}
pub async fn start(self) -> MockServer {
MockServer::new(InnerServer::Bare(self.build_bare().await))
}
}