use async_trait::async_trait;
use pact_models::pact::Pact;
use pact_models::sync_pact::RequestResponsePact;
use url::Url;
use pact_mock_server::matching::MatchResult;
use pact_mock_server::mock_server::{MockServerConfig, MockServerMetrics};
use crate::mock_server::http_mock_server::ValidatingHttpMockServer;
pub(crate) mod http_mock_server;
#[cfg(feature = "plugins")] pub(crate) mod plugin_mock_server;
pub trait ValidatingMockServer {
fn url(&self) -> Url;
fn path(&self, path: &str) -> Url;
fn status(&self) -> Vec<MatchResult>;
fn metrics(&self) -> MockServerMetrics;
}
pub trait StartMockServer {
fn start_mock_server(
&self,
catalog_entry: Option<&str>,
mock_server_config: Option<MockServerConfig>
) -> Box<dyn ValidatingMockServer>;
}
#[async_trait]
pub trait StartMockServerAsync {
async fn start_mock_server_async(
&self,
catalog_entry: Option<&str>,
mock_server_config: Option<MockServerConfig>
) -> Box<dyn ValidatingMockServer>;
}
impl StartMockServer for RequestResponsePact {
fn start_mock_server(
&self,
_catalog_entry: Option<&str>,
mock_server_config: Option<MockServerConfig>
) -> Box<dyn ValidatingMockServer> {
ValidatingHttpMockServer::start(self.boxed(), None, mock_server_config)
}
}
#[async_trait]
impl StartMockServerAsync for RequestResponsePact {
async fn start_mock_server_async(
&self,
_catalog_entry: Option<&str>,
mock_server_config: Option<MockServerConfig>
) -> Box<dyn ValidatingMockServer> {
ValidatingHttpMockServer::start_async(self.boxed(), None, mock_server_config).await
}
}