#![doc = include_str!("../README.md")]
#![deny(missing_docs)]
use crate::{
config::EasyHttpMockConfig, errors::EasyHttpMockError, mock::Mock, server::ServerAdapter,
};
pub mod config;
pub mod errors;
pub mod mock;
pub mod server;
#[cfg(test)]
mod tests;
pub struct EasyHttpMock<S>
where
S: ServerAdapter,
{
config: EasyHttpMockConfig<S>,
server: S,
}
impl<S: ServerAdapter> EasyHttpMock<S> {
pub fn new(config: EasyHttpMockConfig<S>) -> Result<EasyHttpMock<S>, EasyHttpMockError> {
let server = S::new(
config
.server_config
.clone(),
)?;
Ok(EasyHttpMock { config, server })
}
pub fn url(&self, path: &str) -> String {
if let Some(base_url) = &self.config.base_url {
format!("{}{}", base_url, path)
} else {
format!(
"{}{}",
self.server
.base_url(),
path
)
}
}
pub fn base_url(&self) -> String {
self.server
.base_url()
}
pub fn register_mock(&mut self, mock: Mock) {
self.server
.register_mock(mock);
}
pub async fn start(&mut self) -> Result<(), EasyHttpMockError> {
self.server
.start()
.await
}
pub async fn assert(&mut self) -> Result<(), EasyHttpMockError> {
self.server
.stop()
.await
}
}